Отправка почты стандартными средствами PHP c использованием стороннего почтового сервера

HELP-ME-24.COM (Freelance Team), Черноусов Антон

В ряде проектов, которые были переданы нам на поддержку, одним из требований заказчиков, было исключить попадание исходящей почты (например, подтверждения регистрации на сайте или уведомления о отправленном заказе) в спам.

Настройка отправки почты средствами PHP

В большинстве этих случаев, мы видим однотипную ситуацию, а именно, отправку почты стандартной функцией mail напрямую с web-сервера, причем web-сервер и почтовый сервер это абсолютно разные серверы.

Не будем вдаваться в технические подробности, я скажу лишь только то, что в такой конфигурации вся исходящая корреспонденция однозначно будет отклонена или помещена в спам почтовым сервером получателя. Если web-сервер и почтовый сервер это не один и тот-же хост, вам необходимо использовать вышестоящий сервер для отправки почты или настроить локальный демон postfix на пересылку исходящей почты вышестоящему. Для использования вышестоящего почтового сервера для отправки почты потребуется модификация вашего приложения или использования плагинов для типовых CMS.

Сегодня мы рассмотрим метод с настройкой локального демона postfix. Это самый универсальный метод, который определенно сработает со всеми приложениями, даже если там ,в принципе, не предусмотрено использование вышестоящего почтового сервера.

Установите почтовый сервер Postfix (аналогичную настройку для почтового сервера Exim мы рассмотрим в следующих статьях) командой:

# aptitude install mailutils postfix libsasl2-modules

При установке демона postfix выберите режим "Local only", в этом режиме Postfix будет работать только на отправку почты от имени локальной системы с именем локального пользователя. Это поведение аналогично описанному выше и почта отправленная почтовому серверу mail.ru от имени пользователя www-data@localhost определенно будет отклонена. Если демон Postfix уже установлен, вам потребуется его переконфигурировать командой:

# dpkg-reconfigure postfix

Настройка Postfix в режим Local only

Для настройки пересылки почты вышестоящему серверу измените конфигурационный файл /etc/postfix/main.cf (измените указанные строки или в случае их отсутствия добавьте их):

smtp_sasl_auth_enable = yes
smtp_always_send_ehlo = yes
smtp_sasl_password_maps = hash:/etc/postfix/remote_smtp_passwd
smtp_sasl_security_options = noanonymous
relayhost = [mail.th22.info]:25
smtpd_use_tls=no
inet_interfaces = loopback-only
default_transport = smtp
relay_transport = smtp

Для хранения учетных данных авторизации на вышестоящем сервере используется файл /etc/postfix/remote_smtp_passwd и этот файл имеет следующий формат:

[mail.server.host.ru] username:password

Для использования SSL-шифрования ,если это требуется удаленным сервером, дополнительно укажите порт подключения (обычно 587 для TLS-режима):

[mail.server.host.ru]:587 username:password

Обратите внимание на параметр конфигурации smtpd_use_tls, в случае использования соединений без шифрования обязательно установите его smtpd_use_tls=no, в противном случае вы получите ошибку:

local data error while talking to

Параметры подключения и авторизации на популярных почтовых сервисах вы можете посмотреть в справочной системы соответствующей почтовой службы (например, для Mail.ru https://help.mail.ru/mail-help/mailer/popsmtp ). Обратите внимание, что символы "[" и "]" указываются в файле, а не являются элементами оформления примера записи, хотя отсутствие этих элементов не является ошибкой.

Созданный файл необходимо преобразовать в формат базы данных postmap и изменить права доступа к файлу:

# postmap /etc/postfix/remote_smtp_passwd
# chown root:root /etc/postfix/remote_smtp_passwd.db /etc/postfix/remote_smtp_passwd
# chmod 0600 /etc/postfix/remote_smtp_passwd.db /etc/postfix/remote_smtp_passwd

После настройки вы можете проверить отправку локальной почты выполнив в консоли команду (в качестве адреса электронной почты укажите реально существующий ящик):

# echo "text-mail" | mail test-mail@mail.ru

В случае возникновения затруднений проверьте log-файлы почтовой системы:

# cat /var/log/mail.log

На этапе отладки у вас так же могут возникнуть проблемы с очередью отправки сообщений, поэтому в вкратце разберем и этот вопрос.

Рассмотрим основные команды управления почтовой очередью:

1. Посмотреть текущее состояние очереди отправки сообщений Postfix:

# mailq

2. Удалить сообщение из очереди по идентификатору сообщения полученного прошлой командой:

# postsuper -d 6A19B6E85C

3. Удалить все "зависшие" сообщения:

# postsuper -d ALL deferred

4. Форсировать отправку сообщений из почтовой очереди:

# postqueue -f

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий