В этой статье разбираемся как на linux сервере из консоли отправить email используя postfix через яндекс почту.
Подготовка Яндекс почты
Чтобы появилась возможность отправлять email через яндекс почту с помощью приложений, а в linux мы будем использовать приложения, нам вначале нужно настроить сам яндекс. А именно создать пароль приложений и разрешить доступ к imap, чем мы сейчас и займёмся.
Создание пароля приложений
Переходим по следующей ссылке — https://id.yandex.ru/. Затем идём в пункт меню «Безопасность». И, в самом низу, вы найдёте пункт «Пароли приложений», он то вам и нужен.
Вам необходимо создать пароль для почты, то есть выбираете пункт «Почта (IMAP, POP3, SMTP)». При создании вам нужно придумать только название для пароля. Сам же пароль сгенерируется самостоятельно, и вы должны этот пароль куда-нибудь записать. В последующем вы не сможете здесь его подсмотреть, а сможете лишь удалить его и сделать новый.
Разрешение подключаться по IMAP
Дальше переходим к яндекс почте — https://mail.yandex.ru/. И открываем её настройки, вам нужно будет выбрать пункт меню «Все настройки».
В настройках идём в «Почтовые программы».
И разрешаем подключаться по IMAP с использованием паролей приложений.
Подготовка Linux
Кстати, я всё это проделываю на сервере Debian 12.
Во-первых, установим postfix и mailutils.
Postfix необходим для пересылки, то есть отправляете вы письмо от пользователя alex с компьютера pc-deb, значит вы отправляете письмо от alex@pc-deb.localdomain. А postfix видя этого отправителя пересылает письмо уже через вашу почту на яндексе.
А в пакете mailutils есть почтовый клиент mail, с помощью которого вы будите отправлять письма.
$ sudo apt install mailutils postfix
Настроим postfix в качестве релея. Релей — это узел, занимающийся получением и пересылкой электронной почты.
Все возможные параметры, необходимые для настройки postfix вы можете посмотреть здесь — https://www.postfix.org/postconf.5.html. А вот-так выглядит мой конфиг:
$ sudo nano /etc/postfix/main.cf inet_protocols = ipv4 relayhost = smtp.yandex.ru:465 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_generic_maps = hash:/etc/postfix/generic smtp_tls_CAfile = /etc/ssl/certs/Entrust_Root_Certification_Authority.pem smtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cache smtp_tls_session_cache_timeout = 600s smtp_tls_wrappermode = yes smtp_sasl_security_options = noanonymous smtp_tls_security_level = encrypt smtp_tls_loglevel = 1
После настройки перезапустим сервис:
$ sudo systemctl restart postfix
И сделаем ещё два файлика.
- generic — для сопоставления пользователя на linux с пользователем на яндекс.
- sasl_passwd — для указания логина и пароля от яндекс почты. Это тот пароль приложения, который мы создали.
$ sudo nano /etc/postfix/generic alex@pc-deb.localdomain <user>@yandex.ru $ sudo nano /etc/postfix/sasl_passwd smtp.yandex.ru <user>@yandex.ru:<password>
Исправим права доступа к файлу sasl_passwd, чтобы ваш пароль смог увидеть только root.
$ sudo chmod 600 /etc/postfix/sasl_passwd
Затем необходимо привести файлы generic и sasl_passwd к специальному формату.
$ sudo postmap /etc/postfix/generic $ sudo postmap /etc/postfix/sasl_passwd
После выполнения предыдущих команд у нас появятся следующие файлы:
$ ls -1 /etc/postfix/*.db /etc/postfix/generic.db /etc/postfix/sasl_passwd.db
Отправка письма из консоли
Для отправки письма вы можете воспользоваться утилитой mail. Письмо отправляется следующем образом:
$ echo "Текст письма." | mail -s "Тема письма" <email - того, кому мы отправляем письмо>
Логи отправки писем
Для просмотра логов выполните следующую команду:
$ sudo journalctl -u postfix@-.service
А если хотите, добавьте ключ -f чтобы смотреть логи в режиме реального времени.
Вот пример успешной отправки письма:
postfix/pickup[692]: 04705C0010: uid=1000 from=<alex@pc-deb> postfix/trivial-rewrite[891]: using backwards-compatible default setting append_dot_mydomain=yes to rewrite "pc-deb" to "pc-deb.localdomain" postfix/cleanup[890]: 04705C0010: message-id=<20240925073447.04705C0010@pc-deb.localdomain> postfix/qmgr[693]: 04705C0010: from=<alex@pc-deb.localdomain>, size=369, nrcpt=1 (queue active) postfix/smtp[892]: Untrusted TLS connection established to smtp.yandex.ru[77.88.21.158]:465: TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (2048 bits) server-digest SHA256 postfix/smtp[892]: 04705C0010: to=<user@yandex.ru>, relay=smtp.yandex.ru[77.88.21.158]:465, delay=0.71, delays=0.01/0.01/0.3/0.4, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued on mail-nwsmtp-smtp-production-main-73.iva.yp-c.yandex.net 1727249687-lYOHxv3Oe8c0-9tFPM7FI) postfix/qmgr[693]: 04705C0010: removed
Работа с очередью
Когда вы отправляете письмо, оно вначале залетает в очередь, а затем эта очередь обрабатывается. Ниже я опишу команды с помощью которых вы можете работать с очередью.
Посмотреть на очередь:
$ mailq или $ sudo postqueue -p
Запустить принудительную отправку писем из очереди:
$ mailq -q или $ sudo postqueue -f
Удалить письмо из очереди:
$ sudo postsuper -d <идентификатор письма>
Удалить все письма из очереди:
$ sudo postsuper -d ALL
Если статья вам понравилась, подпишись на мой канал VK.