Сложности с доставкой писем на ящики mail.ru stat=Service unavailable
Столкнулся с ситуацией, когда письма, отправленные с VPS сервера, имя которого mail.maindomain.tld не доходят до некоторых почтовых систем. Т.е. тестирую я (на ящики на частном сервере, на @gmail.com, на @yandex.ru) - письма доходят. Тестирует другой человек - письма не доходят… Мол “не работает” выяснилось, что письма
В логах sendmail обнаружилась куча ошибок:
mail loops back to me (MX problem?)
relay=mxs.mail.ru. [194.67.23.20], dsn=5.0.0, stat=Service unavailable
Сложность в том, что домен mail.maindomain.tld не был прописан в DNS, а почта должна была отправляться от info@maindomain.tld, но в имя отправителя попадал домен mail.maindomain.tld (несмотря на указание заголовка FROM)
Варианты решения:
- В конфиге sendmail (/etc/mail/…cf) задать верное имя основного домена, от которого должна уходить почта
define('confDOMAIN_NAME', 'maindomain.tld')
- В php.ini задать (раскомментировать и указать нужное значение) параметр (он переопределит дополнительные параметры, полученные из функции - см следующий пункт)
mail.force_extra_parameters = -finfo@maindomain.tld
- В конфиге сайта (виртуального хоста) задать sendmail_path
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@maindomain.tld"
- В php при использовании функции mail задавать последний параметр string $additional_parameters равным “-finfo@maindomain.tld” (т.е. -f и без пробела имя пользователя)
Параметр additional_parameters может быть использован для передачи дополнительных флагов в виде аргументов командной строки для программы сконфигурированной для отправки писем, указанной директивой sendmail_path. Например, можно установить отправителя письма при использовании sendmail с помощью опции -f.
Пользователь, под которым работает веб-сервер должен быть добавлен в список доверенных в конфигурации sendmail для того чтобы избежать добавления заголовка ‘X-Warning’ при указании отправителя с помощью опции (-f). Для пользователей sendmail - это файл /etc/mail/trusted-users.
- настроить sendmail, чтобы он подставлял нужного отправителя (в дебри не полез.. но про саму возможность упомянуть решил.)
Использованы материалы:
- http://www.opennet.ru/openforum/vsluhforumID1/77794.html
На некоторых хостингах требуется настройка параметра from для задания разрешённых имен отправителя при отправке писем из PHP..