Отправить заявку

PHP: mail() через внешние SMTP (smtp.yandex.ru) для разных пользователей


В один день понадобилось на сервере с PHP под CentOS отправлять почту через внешний STMP. Причем каждый сайт должен отправлять от своего домена и очень желательно, что бы почта не попадала в папку SPAM на сервера получателя. Поднимать полноценные сервера такие как Exim или Postfix для таких целей не имеет смысла т.к. из "коробки" они не удовлетворяют всем требованиям и можно потратить много времени на корректную настройку и борьбу со спамом.

Мы пойдем путем подключения почты для доменов от Яндекса. Нужно всего лишь добавить NS Яши в дополнение к текущим нс-серверам домена и подтвердить любым доступным способом права на этот самый домен.

Итак - мы устанавливаем msmtp. Он есть и под *nix и под Windows.
В зависимости от вашей ОС вариант установки отличается только командами. Т.е. у нас центос - пишем:

yum install msmtp

После установки узнаем путь к конфигурационному файлу:

$ msmtp --version
...
System configuration file name: /etc/msmtprc
User configuration file name: /home/artkiev.com/.msmtprc

Теперь создадим этот файл и файл лога

$ touch /etc/msmtprc
$ touch /var/log/msmtp.log

Пример конфигурации:

defaults
tls on
tls_starttls on
tls_certcheck off
logfile /var/log/msmtp.log

account test_artkiev
host smtp.yandex.ru
port 25
auth on
user info@****.com.ua
password ************
from info@****.com.ua

account other_mail_artkiev
host smtp.yandex.ru
port 25
auth on
user order@**.org.ua
password *******
from order@**.org.ua

account default : other_mail_artkiev

После этого нужно сделать симлинки sendmail:

$ ln -s /usr/bin/msmtp /usr/sbin/sendmail
$ ln -s /usr/bin/msmtp /usr/bin/sendmail
$ ln -s /usr/bin/msmtp /usr/lib/sendmail

После этого необходимо подменить отправку в php.ini:
sendmail_path = "/usr/bin/msmtp -t"

Для виртуалхостов вызываем нужную нам секцию отправки:

php_admin_value sendmail_path "/usr/bin/msmtp -a other_mail_artkiev -t"

Перезагружаем апач и тестируем отправку

Другие публикации