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

SMTPS wrappermode (TCP port 465) requires setting "smtp_tls_wrappermode = yes", and "smtp_tls_security_level = encrypt" (or stronger)
тут говорящее название
status=deferred (delivery temporarily suspended: SASL authentication failed; cannot authenticate to server smtp.yandex.ru[77.88.21.158]: no mechanism available)
забыли прописать smtp_sasl_security_options = noanonymous
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.