Postfix yandex relay
Как сконфигурировать postfix, чтобы он отправлял почту через stmp-сервер Яндекса
Я тут перевез свой блог в Облако Яндекса и по пути столкнулся с трудностью - не отправляются письма. В логах моего любимого почтовика постфикса ошибка:
Jun 17 00:32:56 vm1 postfix/smtp[1374175]: connect to gmail-smtp-in.l.google.com[142.251.1.26]:25: Connection timed out
Jun 17 00:32:56 vm1 postfix/smtp[1374175]: connect to gmail-smtp-in.l.google.com[2a00:1450:4010:c0d::1a]:25: Network is unreachable
Jun 17 00:33:26 vm1 postfix/smtp[1374175]: connect to alt1.gmail-smtp-in.l.google.com[142.250.157.27]:25: Connection timed out
Jun 17 00:33:26 vm1 postfix/smtp[1374175]: connect to alt1.gmail-smtp-in.l.google.com[2404:6800:4008:c13::1a]:25: Network is unreachable
Jun 17 00:33:56 vm1 postfix/smtp[1374175]: connect to alt2.gmail-smtp-in.l.google.com[173.194.202.26]:25: Connection timed out
Обратился в поддержку. Оказалось, что из облака исходящий трафик на 25 порт заблокирован. Отправлять почту можно только через сервера яндекса от имени какого-то пользователя.
Поскольку мой домен - codepoetry.ru
То пользователь пусть будет root@codepoetry.ru
Домен уже делегирован на яндекс, поэтому я просто добавил нового пользователя и залогинился под ним в почту, чтобы поставить галочку "Я согласен ..."
Потом от этого пользователя зашел в настройки профиля и создал отдельный пароль:
Если у вас нет своего домена, то можете просто создать новый ящик вида myserverroot@yandex.ru
- в остальном настройка ничем не отличается.
Дальше можно перейти к настройке, собственно, postfix.
Postfix relay
Дописываем в основной конфиг /etc/postfix/main.cf
следующие строки:
smtp_sasl_auth_enable = yes
smtp_tls_security_level = encrypt
smtp_tls_wrappermode = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
relayhost = [smtp.yandex.ru]:465
Создаем файл с логином-паролем:
sudo touch /etc/postfix/sasl_passwd
sudo chmod 0640 /etc/postfix/sasl_passwd
И пишем туда:
[smtp.yandex.ru]:465 root@codepoetry.ru:my-password
Тут важно отметить, что строка [smtp.yandex.ru]:465
должна быть одинаковой и там и там.
Потом не забудьте превратить файл в базу данных:
sudo postmap /etc/postfix/sasl_passwd
И сделаем релоад, чтобы постфикс подхватил изменения конфига
sudo systemctl reload postfix
Проверка
Дальше я открыл в одном окне логи
sudo tail -f /var/log/mail.log
А из другого отправлял письма
echo "This is the body of the email" | mail -s "This is the subject line" dima@gmail.com
Письмо не ушло, а в логе появилась ошибка 553 5.7.1 Sender address rejected: not owned by auth user. 1655646734-7knhhkCpkb-qEMS4B3Z (in reply to MAIL FROM command))
В статьях яндекса об этом говорится. По логу выше видно, что в поле FROM
стоит адрес from=dima@vm1.ru-central1.internal
- а должно быть root@codepoetry.ru
, иначе яндекс не примет.
Поэтому я добавил в main.cf
:
smtp_generic_maps = hash:/etc/postfix/generic
И создал файл /etc/postfix/generic
:
@vm1.ru-central1.internal root@codepoetry.ru
Теперь для любых отправленных с сервера писем в момент их выхода будет подменяться адрес отправителя. Не забудем переиндексировать:
sudo postmap /etc/postfix/generic
sudo systemctl reload postfix
Другие возможные ошибки
503 5.5.4 Error: send AUTH command first. 1655644978-vxV6fiLXFy-MwN8PqpG (in reply to MAIL FROM command))
Вы забыли включить smtp_sasl_auth_enable = yes
status=deferred (SASL authentication failed; server smtp.yandex.ru[77.88.21.158] said: 535 5.7.8 Error: authentication failed: This user does not have access rights to this service 1655646115-7Ko3u9UTap-ftNKo6bN)
Вот эта ошибка интересная и сначала поставила меня в тупик. Чтобы победить, нужно разрешить доступ почтовых программ в настройках почты:
Не очевидно, что imap влияет на возможность функционирования smtp.