Из-за обилия спама человечеству приходится ухищряться и придумывать разнообразные фильтры писем. Эти фильтры действуют по нескольким критериям. Одним из которых является адекватное значение Return-path. По моим наблюдениям, если значение выставлено неверно, то шанс попадания письма в папку "спам" увеличивается почти на 30%.
Return-Path - это адрес возврата в случае неудачи. На него возвращается отбивка, если невозможно доставить письмо по адресу назначения.
Обычно для Return-Path ставят аналогичное значение, что и для поля "From". В противном случае вероятность попадания в папку "спам" увеличивается почти на 30%.
В чём проблема
Рассмотрим на примере: есть сервер с php и SendMail. Отправляется письмо через стандартную функцию mail():
mail($to, $subject, $message, $additional_headers);
И к получателю письмо приходит со следующими заголовками:
From: "AlexGur" <me@alexgur.ru>
Return-path: user@server_name.server_domain
Reply: "AlexGur" <me@alexgur.ru>
С большой вероятностью это письмо попадёт в папку "спам", если значение Return-path не содержит домен со следующими свойствами:
- Существует A запись для server_name.server_domain
- Существует MX запись для server_name.server_domain
Но даже если сделать эти записи, то некоторые почтовики всё равно могут выдавать предупреждение о невозможности подтвердить отправителя.
Проблема в том, что Return-path генерируется автоматически, но его можно задать вручную, через пятый параметр функции mail():
mail($to, $subject, $message, $additional_headers, '-f me@alexgur.ru');
Пятый параметр заставит SendMail отправить письмо с Return-path равным me@alexgur.ru.
Почему через PHP, а не файл конфига
Можно в конфигурационном файле сайта, в php.ini или в .htaccess поставить локальное/глобальное значение для Return-Path. К примеру, так:
php_admin_value sendmail_from "me@alexgur.ru"
Или в случае моей конфигурации сервера:
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f me@alexgur.ru"
Это должно работать. Но оно не сработает! Не будут отправляться мэйлы через php с Return-Path равным me@alexgur.ru, если задать это значение в файле конфигурации. Поэтому единственный выход - писать Return-Path пятым параметром в функции php mail(). Казалось бы, даже если убедиться в правильности выставления настроек через phpinfo():
- всё равно Return-Path не будет выставлен! Единственный способ - передавать пятый параметр в функцию mail();
P.S.
Потратил четыре часа, чтобы понять, почему Return-Path не может принять правильно значение. Перерыл весь мануал SendMail.
Благодарю за наводку! Очень помогло ваше решение.