Почему sendmail не отправляет письма на mail ru

Иногда при обслуживании сайтов клиентов сталкиваемся с тем, что не уходит почта с сайта (через PHP скрипты) на ящики @mail.ru, @bk.ru, @list.ru, @inbox.ru и @gmail.com. Решение проблемы заключается в редактировании файла настроек PHP (см. ниже). Вот как пришли к такому выводу.

Сначала проводили тесты на работу функции sendmail на самом простом скрипте вида:

<?php
var_dump(mail('testuser@mail.ru', 'subject', 'body'));
?>

В результате исполнения получили – true. То есть письмо было отправлено с хостинга, но на почту testuser@mail.ru (реальный адрес мы, конечно не приводим) ничего не пришло, и в папке «Спам » тоже не появилось.

Стали изучать требования к входящим письмам самого сервиса "MAIL.RU". Оказалось, что PHP функция sendmail должна быть настроена специальным образом. Понадобилось отредактировать файл php.ini.

Обычно этот файл находится по адресу ~/php-bin/php.ini. Нужно открыть его через «Менеджер файлов» панели управления хостингом или средствами FTP или SSH. и Далее найти строку:

sendmail_path = «/usr/sbin/sendmail -t -i»

и поставить в конце адрес ящика на Вашем домене, не относящийся к системе mail.ru (это домены mail.ru, inbox.ru, list.ru, bk.ru), например, info@domain.ru, где domain.ru – Ваш домен. Т.е. в итоге получится вот так:

sendmail_path = «/usr/sbin/sendmail -t -i -f info@domain.ru»

ВНИМАНИЕ! По умолчанию, права на данный файл ограничивают его изменение. Предварительно смените права с 400 на 600, а после изменения содержимого файла, в целях безопасности, смените права обратно на 400. ВНИМАНИЕ! Чтобы изменения, внесенные в php.ini, вступили в силу, необходимо, чтобы web-сервер его перечитал. Самый простой способ перейти в раздел «Версия PHP», сменить версию PHP на отличную от текущей, после чего вернуть необходимую Вам версию. Или если у вас VPS перезагрузить сервер.

Данный прием наладил отправку почты с сайтов клиентов. Если у Вас он не сработал Вам необходимо проверить корректность генерируемых заголовков письма. В качестве отправителя также должен быть ящик, не относящийся к системе mail.ru:

$headers = "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: info@domain.ru\r\n";

| опубликовано: 28 Январь 2018

Комментирование этой статьи закрыто.