Отправка почты из Fedora


В статье приводится алгоритм настройки утилиты msmtp. Это позволит отправлять почту как из консоли, так и из виртуальных хостов (полезно при разработке сайтов). С большой долей вероятности данные советы будут работать и на других современных ОС семейства Linux (благодаря повсеместному внедрению systemd).
Устанавливаем msmtp:
sudo dnf install msmtp
В настройке мне помогла статья "How to use MSMTP with Gmail, Yahoo and PHP Mail".
Правим персональный конфиг (~/.msmtprc), указываем настройки своего почтового ящика (с которого будут отправляться письма). На примере yandex почты записываем в файл (это и есть самая ценная информация статьи):
account default
logfile /var/log/msmtp.log
host smtp.yandex.ru
port 587
from mymail@yandex.ru
keepbcc on
auth on
user mymail@yandex.ru
password mypass
tls on
tls_starttls on
tls_certcheck off
Меняем права на конфиг (иначе персональные данные доступны другим пользователям и программа откажется работать):
chmod 600 ~/.msmtprc
Создаём файл для лога:
sudo touch /var/log/msmtp.log
Я изменил права на лог, чтобы мой web-сервер в дальнейшем также смог сюда писать лог отправки почты (мой пользователь находится в группе apache):
sudo chown apache:apache /var/log/msmtp.log
И права:
chmod 660 /var/log/msmtp.log
Для проверки создаём файл письма для отправки (~/demo_email) с содержимым:
From: Oleg <emailfrom@yandex.ru>
To: Oleg <emailto@mail.ru>
Subject: Hello World
Email sent using MSMTP
И пробуем отправить:
cat ~/demo_email | msmtp emailto@mail.ru
Результат: в консоли ничего не видно, а в логах отметка об отправке и письмо должно прийти на указанный адрес.
Всё, теперь можно слать письма из консоли!
Можно пойти дальше и научить отправлять письма локальный web-сервер. Для начала скопируем настройки локального пользователя в системные настройки:
sudo cp -p ~/.msmtprc /etc/msmtprc
Я сменил пользователя и группу так:
sudo chown apache:oleg /etc/msmtprc
И права (иначе не работает):
chmod 600 /etc/msmtprc
Открываем для редактирования файл /etc/php.ini (я это делаю через mc, запущенный через sudo) и находим секцию "[mail function]". Указываем новые данные почтовой программы:
sendmail_path = "/usr/bin/msmtp -C /etc/msmtprc -r"
Перезапускаем Apache:
sudo systemctl restart httpd.service
После того, как я перешёл с Apache на Nginx + PHP-FPM, конфиг php.ini я почему-то изменил (уже не помню, по какой причине). Теперь у меня такая запись в php.ini:
sendmail_path = "/usr/bin/msmtp -t -i"
Перезапуск PHP-FPM:
sudo systemctl restart php-fpm.service
Теперь можно создать тестовый скрипт отправки почты (~/test_mail.php):
<?
if (mail("mailto@mail.ru","test subject", "test body","From: mailfrom@yandex.ru")) {
    echo "Сообщение передано функции mail, проверьте почту в ящике.";
} else {
    echo "Функция mail не работает, свяжитесь с администрацией хостинга.";
}
Пробуем запускать из консоли:
php ~/test_mail.php
По ответу будет понятно, всё ли правильно работает.

Комментарии

Популярные сообщения из этого блога

Пропорциональное распределение суммы

Битрикс: своя геолокация

Bitrix24 API - разбор демо приложения третьего типа