В этой статье разбираемся как на 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *