4

Я использую Raspbian, и служба Postfix (версия 2.9.6), кажется, автоматически запускается при загрузке, но если я хочу отправить письмо, электронное письмо остается в очереди:

$ mailq
26CB72201F    443 Sat Sep 19 19:44:17   user@mail.example.com
(Host or domain name not found. Name service error for name=smtp.gmail.com type=A: Host not found, try again)
                                        someone@gmail.com

Если я перезапущу службу ( перезапуск постфикса службы sudo service postfix restart), то письма будут работать до следующей загрузки.

Зачем? В чем разница?

Во время установки Postfix я выбрал конфигурацию «Интернет со смартхостом», но затем следовал учебному пособию для… Интернет-сайта », чтобы завершить настройку, так что это может быть проблемой (?) Я просто хочу отправлять электронные письма.

ОБНОВЛЕНИЕ: Проблема может заключаться в том, что Postfix запускается до подключения Wi-Fi.

2 ответа2

12

Короче ответ.

Если «Хост не найден, попробуйте еще раз». Это может означать, что на вашем сервере есть проблемы с разрешением DNS, или у самого Postfix есть проблемы с разрешением DNS. Но это суть того, что нужно очистить.

Что касается того, как это прояснить, ваш вопрос не содержит достаточно информации о вашей базовой ОС или настройке, чтобы дать краткий ответ. Похоже, вы работаете с Ubuntu/Debian, если вы запускаете sudo service postfix restart , но какую еще информацию вы можете предоставить?

Более длинный ответ.

Возможно, при подключении к resolv.conf загадочно исчезает.

На основании ошибки:

Имя хоста или домена не найдено. Ошибка службы имен для name = smtp.gmail.com type = A: Хост не найден, попробуйте еще раз.

Похоже, вы используете SMTP-серверы Gmail для исходящей почты. Не знаю, какая у вас базовая ОС, но, основываясь на этом ответе на форумах Ubuntu, похоже, это проблема с отсутствующим resolv.conf при перезагрузке; смелый акцент мой

У меня такая же проблема на Ubuntu 14.04 LTS. Когда postfix установлен, он копирует /etc/resolv.conf в /var/spool/postfix/etc/resolve.conf . но по какой-то причине после перезагрузки / перезапуска файл не копируется и вы получаете пустой файл только с заголовком.

Предлагаемое временное решение - скопировать основную ОС resolv.conf в каталог Postfix:

sudo cp /etc/resolv.conf /var/spool/postfix/etc/resolv.conf

Кажется, это не постоянное исправление, но, по крайней мере, это то, что нужно проверить.

Возможно, связано с настройками inet_protocols .

Также этот ответ о сбое сервера объясняет аналогичную ситуацию, которая сосредоточена на поддержке IPv6. Уверен, что ваша проблема не связана с IPv6, поскольку ошибка связана с записью «type = A», которая является IPv4, а для IPv6 это будет «type = AAAA». Тем не менее, возможно, стоит поэкспериментировать с настройкой параметра inet_protocols в вашем конфигурационном файле Postfix. Вот что объясняет официальная документация Postfix:

Когда поддержка IPv4 включена через параметр inet_protocols, Postfix будет искать записи DNS типа A и преобразовывать IP-адреса клиентов IPv4-in-IPv6 (::ffff:1.2.3.4) в исходную форму IPv4 (1.2.3.4). Последнее необходимо на хостах, которые поддерживают IPV6_V6ONLY (RFC 3493).

Когда поддержка IPv6 включена через параметр inet_protocols, Postfix будет выполнять поиск записей типа AAAA в DNS.

Если включена поддержка как IPv4, так и IPv6, SMTP-клиент Postfix выберет протокол в соответствии с параметром smtp_address_preference. Версии Postfix до 2.8 пытаются подключиться через IPv6, прежде чем использовать IPv4.

Примеры:

  • inet_protocols = ipv4
  • inet_protocols = all (ПО УМОЛЧАНИЮ)
  • inet_protocols = ipv6
  • inet_protocols = ipv4, ipv6

Предполагая, что вы находитесь на установке Ubuntu/Debian, откройте конфигурацию здесь:

sudo nano /etc/postfix/main.cf

И найдите или установите значение в строке inet_protocols чтобы оно было следующим:

inet_protocols = ipv4

Или будь таким:

inet_protocols = all

Затем перезапустите службу Postfix - или весь сервер - и посмотрите, не поможет ли это:

sudo service postfix restart
2

Проблема в том, что Postfix проверяет /etc/resolv.conf перед подключением WiFi. Поэтому /var/spool/etc/postfix/resolv.conf остается пустым после загрузки, и письма не могут быть отправлены.

Чтобы решить проблему, я отключил постфиксный сервис:

sudo update-rc.d postfix disable

… И я написал этот скрипт, чтобы дождаться окончания соединения Wi-Fi, прежде чем запускать Postfix (сохранен в /usr/local/bin/postfix_wifi.sh):

#!/usr/bin/sh

host="smtp.gmail.com"
port=587

until nc $host $port -w 5
do
    sleep 10
done

sudo service postfix start
exit 0

… И я добавил эту строку в /etc/rc.local чтобы скрипт запускался при загрузке:

/usr/local/bin/postfix_wifi.sh &

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .