morontt.info

PHP → mail(), msmtp и Яндекс.Почта для домена

Переносил к себе на сервер один сайт и наткнулся на такую задачку, как отправка писем. Письма в движке этого сайта отправляются обычной функцией mail, а желания (да, в общем-то, и потребности) переписывать хоть одну строчку кода не было. Для отправки сообщений я давно уже использую сервис Яндекс.Почта для домена. Есть, конечно, куча других вариантов, но и этот отлично работает. Можно отправлять почту и своими силами, но имеется большая вероятность попасть в папку "спам" у получателей, необходимо настраивать разные штуки, вроде SPF и DKIM. В общем, было принято решение подружить mail и Яндекс.Почту

Для отправки задействуем транспорт SMTP, а отправлять будем простым клиентом msmtp. Устанавливается он двумя движениями пальцев, даже писать неохота, но напишу (для Debian или Ubuntu).

sudo apt-get install msmtp

Следующим шагом создаём конфигурационный файл msmtp для работы с Яндекс.Почтой, разместить его можно где угодно, главное не забыть где он находится.

account yandex
tls on
tls_certcheck off
auth on
host smtp.yandex.ru
port 587
user pupkin@example.org
from pupkin@example.org
password 11111111
logfile /path/to/msmtp.log

Порт 465 тут не работает, проверял. И если отправитель, который from, не совпадает с пользователем user, через которого логинимся, то письмо никуда не уходит.

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

chmod 600 /path/to/config/msmtp

# такая строчка, потому что msmtp будет запускаться
# от пользователя сервера Apache2
chown www-data:www-data /path/to/config/msmtp

Далее нужно научить PHP работать с msmtp, а сделать это просто. Для этого необходимо установить в php.ini директиву sendmail_path. Поскольку у меня на сервере крутится несколько сайтов, то у себя я эту директиву определил в настройках виртуального хоста апача. А заодно, для надёжности, прописал отправителя в sendmail_from:

<VirtualHost *:80>
    ServerName example.org

    php_admin_value sendmail_path "/usr/bin/msmtp -C /path/to/config/msmtp -a yandex -t"
    php_admin_value sendmail_from "pupkin@example.org"

    DocumentRoot "/path/to/httpdocs"
    <Directory "/path/to/httpdocs">
        ...
    </Directory>
</VirtualHost>

Готово :)

g-plus-icon
Теги: php mail smtp msmtp
comments powered by Disqus
Учтите, что комментарии добавляются только при включённом JavaScript в браузере. В ином случае информация хоть и не пропадёт бесследно, но будет отправлена в спам и вряд ли хоть кто-нибудь её увидит.
Поля, помеченные asterisk, обязательны для заполнения.
Адрес электронной почты нигде не отображается, необходим только для обратной связи.
Веб-сайт вводите в формате http://example.org, при желании, конечно.