Назад | Перейти на главную страницу

смарт-хост не доставляет электронную почту, если отправлен заголовок даты?

Я использую MantisBT 1.2.6 на сервере Amazon Linux. У него есть собственный класс отправки электронной почты, расположенный поверх функции PHP mail (). На самом деле, у него есть другие возможности напрямую использовать smtp или sendmail, но я использую почту PHP. Затем почта PHP, в свою очередь, использует sendmail.

Я настроил sendmail на использование интеллектуального хоста, который работал нормально, поскольку я мог написать небольшую программу PHP для успешной отправки сообщения через его функцию mail ().

Но почта, отправленная MantisBT, никогда не приходила и не возвращалась.

/var/log/maillog показал, что сообщения MantiBT успешно отправляются на смарт-хост

(relay=my-smarthost-hostname) with "stat=Sent (ok nnnn qp nnnn)"

Если я изменил файл / etc / mail / authinfo, чтобы использовать неправильный пароль, maillog показывал «stat = Service unavailable» для этого реле.

Похоже, проблема заключалась в чем-то тонком в коде MantiBT. Я использовал xdebug, чтобы найти вызов, который он сделал для mail (), получить значения его параметров и извлечь их в отдельный файл php для игры. Он передал несколько заголовков в дополнение к «От:» в четвертом параметре, и я подозревал, что они могли быть разделены просто \ n вместо \ r \ n, как того требует RFC (2) 821, что вызвало проблему. . Но я добавил код для изменения \ n на \ r \ n в строке заголовка, и это не имело никакого значения.

В конце концов, проблема была вызвана наличием (правильного) заголовка «Дата:». Когда я удалил этот заголовок из 4-го параметра в mail (), почта была доставлена ​​немедленно. Поэтому я отредактировал исходный код MantisBT, чтобы не генерировать этот заголовок, и все было в порядке (я также отредактировал исходный код MantisBT, чтобы не ставить пробел между параметром «-f» и адресом отправителя).

Итак, мой вопрос только в том, известно ли, что наличие заголовка «Date:» в 4-м параметре mail () вызывает проблемы с отправкой через smarthost. С продолжением, разве вы не ожидали бы ни отказов, ни сообщения в почтовом журнале, если бы смарт-хост не хотел видеть заголовок Date?

PS Я действительно позвонил в службу технической поддержки Network Solutions по этому поводу, когда увидел отправленное сообщение ok в почтовом журнале, но до того, как изолировал его от заголовка Date. Естественно, ничего полезного это не дало, просто инструкции по настройке вашего почтового клиента для POP или IMAP :-)

Видимо, я попался на петарде собственной методологии.

Теперь похоже, что причина того, что заголовок даты привел к тому, что сообщение было принято интеллектуальным хостом без доставки, заключается в том, что я не менял метку времени в заголовке с каждым тестом. Таким образом, интеллектуальный хост увидел несколько сообщений с одинаковыми идентификаторами сообщений и временными метками и просто не доставил дубликаты.

В процессе работы я обнаружил ошибки, когда параметр -f использовался в качестве адреса получателя (возможно, из-за пробела между «-f» и адресом отправителя) и другие проблемы. Так что, возможно, когда я исправлю это, сообщение прошло нормально. Но затем попытки подтвердить этот успех застряли в ловушке дублирования сообщений. В реальной жизни, конечно, временная метка никогда не будет дублироваться вместе с идентификатором сообщения, это был просто артефакт записи параметров, передаваемых в mail (), в автономный статический тестовый набор.

В любом случае, я думаю, что теперь все готово, и я восстановлю заголовок Date в коде MantisBT.

Раньше я мало играл с отправкой почты, поэтому для меня это был полезный опыт. И, возможно, кому-то еще будет полезно знать, что если вы хотите проверить исходящую почту, вы не можете использовать стандартные заголовки с неизменными заголовками MessageID и Date!