====== Почта: настройка ssmtp ====== ===== Что будем делать ===== ssmtp - SMTP-клиент (не MTA?). Когда некогда настраивать Exim/Postfix, но почту отправлять надо (postfix+Яндекс.ПДД совсем недолго, но сложно если ранее не делали). Рассмотрим пример настройки для отправки писем с трёх разных сайтов через три разные почтовые службы. Перефразируя - условные три сайта работают одновременно и отправляют почту каждый со своего почтового домена. Вымышленные пользователи и их email адреса * Бэтмэн использует Gmail (batman@gmail.com) * Пингвин использует Яндекс.ПДД (tux@linux.com) * Джокер использует biz.mail.ru (joker@anekdot.ru) ===== Установка и настройка ssmtp ===== Устанавливаем SMTP клиент # apt-get install ssmtp Файл конфигурации ''/etc/ssmtp/ssmtp.conf'' оставляем без изменений. Создаём новые конфигурационные файлы для каждой почтовой службы # touch /etc/ssmtp/ssmtp-gmail.conf # touch /etc/ssmtp/ssmtp-yandex.conf # touch /etc/ssmtp/ssmtp-mailru.conf В файл ''/etc/ssmtp/revaliases'' заранее добавляем batman:batman@gmail.com:smtp.gmail.com:465 tux:tux@linux.com:smtp.yandex.ru:465 joker:joker@anekdot.ru:smtp.mail.ru:465 root:batman@gmail.com:smtp.gmail.com:465 www-data:batman@gmail.com:smtp.gmail.com:465 batman:batman@gmail.com:smtp.gmail.com:465 Почему root и другие пользователи? Через консоль мы будем отправлять от имени root, а через php от имени системного пользователя (использую mod_ruid). В тестовом окружении можно позволить себе работать под root'ом. Но если сервер не ваш или дико важный продакшн, тогда вы ССЗБ. {{:linux:root_on_prod.jpg?nolink&350|}} ==== Конфигурационные файлы ssmtp ==== Файл **/etc/ssmtp/ssmtp-gmail.conf** mailhub=smtp.gmail.com:465 AuthUser=batman@gmail.com AuthPass=BWisthebest AuthMethod=LOGIN rewriteDomain=gmail.com hostname=localhost UseTLS=Yes #UseSTARTTLS=Yes TLS_CA_File=/etc/ssl/certs/ca-certificates.crt FromLineOverride=Yes #Debug=Yes Файл **/etc/ssmtp/ssmtp-yandex.conf** mailhub=smtp.yandex.ru:465 AuthUser=tux@linux.com AuthPass=nvidiasuxx AuthMethod=LOGIN rewriteDomain=linux.com hostname=localhost UseTLS=Yes #UseSTARTTLS=Yes TLS_CA_File=/etc/ssl/certs/ca-certificates.crt FromLineOverride=Yes #Debug=Yes Файл **/etc/ssmtp/ssmtp-mailru.conf** mailhub=smtp.mail.ru:465 AuthUser=joker@anekdot.ru AuthPass=waiting1april AuthMethod=LOGIN rewriteDomain=anekdot.ru hostname=localhost UseTLS=Yes #UseSTARTTLS=Yes TLS_CA_File=/etc/ssl/certs/ca-certificates.crt FromLineOverride=Yes #Debug=Yes ==== Проверка ==== Проверить отправку писем через консоль можно множеством способов. Самый простой через pipe, добавляем здесь ключ ''-C'' для указания на конкретный конфигурационный файл ([[https://linux.die.net/man/8/ssmtp|подробнее в man]]) echo "Test text" | ssmtp -C/etc/ssmtp/ssmtp-gmail.conf vvp@kermlin.su echo "Test text" | ssmtp -C/etc/ssmtp/ssmtp-yandex.conf vvp@kermlin.su echo "Test text" | ssmtp -C/etc/ssmtp/ssmtp-mailru.conf vvp@kermlin.su Проверка через PHP ==== Наступлю на грабли за вас ==== **1** Для mail.ru и Yandex: перед отравкой почты необходимо зайти в почтовый ящик через веб-интерфейс. В противном случае будет ошибка ssmtp: 550 Message was not accepted -- invalid mailbox. You need to complete your registration in order to send your mail. Please visit http://e.mail.ru/signup?NeedMoreInfo=1 **2** Ещё одна ошибка RCPT TO: (501 sender address must match authenticated user) В ''revaliases'' добавляем нужных пользователей. В моём случае php-скрипты запускаются от имени системного пользователя, а не от nobody или www-data/httpd, поэтому в revaliases помимо root указаны логины системных пользователей. **3** Неверный From Дальше я ещё сильнее расширил свои познания в Linux. Если у системного пользователя задан email, то именно он будет использоваться в поле From. Пример файла **/etc/passwd** dx:x:1001:1001:username@gmail.com:/home/dx:/usr/sbin/nologin **4** Если в логе FIXME Creating SSL connection to host SSL not working: certificate verify failed (20) Cannot open smtp.gmail.com:587 то добавьте в конфигурационный файл опцию **TLS_CA_File** Путь для Ubuntu/Debian /etc/ssl/certs/ca-certificates.crt Путь для CentOS /etc/pki/tls/certs/ca-bundle.crt ==== Есть ли журнал/лог у ssmtp? ==== Да, для этого требуется добавить опцию **Debug=YES**. После чего в syslog будут записываться содержимое отправленных писем и почтовые заголовки. Если не в syslog, то куда-нибудь уж точно. Найти поможет команда # grep -riI ssmtp /var/log ==== Как указать сайту какой конфиг использовать ==== Наконец-то самое интересное Через htaccess нельзя. Если у каждого сайта свой php.ini, то sendmail_path "/usr/sbin/ssmtp -t -C/etc/ssmtp/ssmtp-gmail.conf" Либо через конфигурацию виртуального хоста Для Apache ... ... php_admin_value sendmail_path "/usr/sbin/ssmtp -t -C/etc/ssmtp/ssmtp-gmail.conf" Для nginx/php-fpm fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/ssmtp -t -C/etc/ssmtp/ssmtp-gmail.conf"; ===== Заключение ===== //Неразборчиво врачебным почерком// у ssmtp есть есть аналог - [[:linux/msmtp|msmtp]].