Отправка email из консоли linux через Yandex
Создание пароля приложений Yandex
Чтобы появилась возможность отправлять email из консоли linux через yandex-почту, вначале нужно создать пароль приложений. Для этого, переходим по ссылке — https://id.yandex.ru/ , идём в пункт меню «Безопасность». И, в самом низу, находим пункт «Пароли приложений».

Необходимо создать пароль для почты, то есть выбираем пункт «Почта (IMAP, POP3, SMTP)». При создании придумываем только название для пароля. Сам же пароль сгенерируется самостоятельно, и вы должны этот пароль куда-нибудь записать. В последующем вы не сможете здесь его посмотреть, а сможете лишь удалить его и сделать новый.

Разрешение подключаться по IMAP
Переходим к yandex-почте — https://mail.yandex.ru/ , открываем её настройки, вам нужно будет выбрать пункт меню «Все настройки».

В настройках идём в «Почтовые программы».

И разрешаем подключаться по IMAP с использованием паролей приложений.

Подготовка Linux
Я буду настраивать сервер под управлением Debian 12. Во-первых, установим postfix и mailutils. Postfix необходим для пересылки, то есть отправляете вы письмо от пользователя alex с компьютера pc-deb, значит вы отправляете письмо от alex@pc-deb.localdomain . А postfix видя этого отправителя пересылает письмо уже через вашу почту на Yandex. А в пакете 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 - того, кому мы отправляем письмо>
А если хотите смотреть логи в режиме реального времени, добавьте ключ -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 или Telegram .