Я использую 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!