RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Боковая панель


Навигация

Линкшэринг

ALARM!

Добавить новую страницу

You are not allowed to add pages
linux:ssmtp


Почта: настройка 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'ом. Но если сервер не ваш или дико важный продакшн, тогда вы ССЗБ.

Конфигурационные файлы 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 для указания на конкретный конфигурационный файл (подробнее в 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

<?php
mail('vvp@kermlin.ru', 'Пенсионная реформа', 'Смерть ворогам!');
?>

Наступлю на грабли за вас

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:<dimon@gov.ru> (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

<VirtualHost 1.3.3.7:80>
 ...
    <Directory /home/user/domain.tld/public_html>
        ...
        php_admin_value sendmail_path "/usr/sbin/ssmtp -t -C/etc/ssmtp/ssmtp-gmail.conf"
    </Directory>
</VirtualHost>

Для nginx/php-fpm

fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/ssmtp -t -C/etc/ssmtp/ssmtp-gmail.conf";

Заключение

Неразборчиво врачебным почерком у ssmtp есть есть аналог - msmtp.

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies

Discussion

Enter your comment. Wiki syntax is allowed:
 
linux/ssmtp.txt · Последнее изменение: 2018/07/03 13:51 (внешнее изменение)