Oтправка почты из консоли: smtpd и Яндекс Почта

Опубликовано 15.10.2024 в OpenBSD

В свежеустановленной системе OpenBSD присутствует (и даже по умолчанию запускается) почтовый демон smtpd. Правда, в дефолтной своей конфигурации он настроен для работы исключительно с локальной почтой в пределах одной системы - по умолчанию, например, через механизм локальной почты рассылается немало полезных уведомлений: логи системных апдейтов, ежедневного скрининга системы на всякие небезопасные моменты и тому подобное. Да, собственно, первое, что вы увидите в свежеустановленной системе - это уведомление при логине в консоль "у вас новая почта" и письмо от Theo de Raadt :) В общем, запускайте присутствующий по дефолту клиент mail или ставьте что-нибудь с более человеколюбивым интерфейсом (например, mutt, для любителей GUI могу порекомендовать claws-mail) и читайте!

Но вот чтобы похвастаться после установки выводом dmesg или воспользоваться встроенной утилитой sendbug - нужно уметь отправлять почту вовне, например, настроив пересылку (relay) исходящей почты через какой-нибудь внешний почтовый сервис. В качестве такового я предпочитаю использовать Яндекс Почту. Итак, что нам потребуется:

  • Руководствуясь вот этой инструкцией от Яндекса разрешаем в настройках Яндекс Почты доступ к почтовому ящику с помощью почтовых программ и создаем пароль для приложения (алярм! пароль можно увидеть только один раз при его создании, не продолбайте, сохраняйте!).

  • Как учит нас Партия и Правительство man smtpd.conf, перво-наперво нам нужно создать файл для хранения наших секретиков (в последней строчке в качестве username подставьте "вашупочту@yandex.ru", а password тот самый, что выше):

# touch /etc/mail/secrets
# chmod 640 /etc/mail/secrets
# chown root:_smtpd /etc/mail/secrets
# echo "твойлогин username:password" > /etc/mail/secrets
  • А теперь подредактируем непосредственно конфиг /etc/mail/smtpd.conf, приведя его вот к такому примерно виду:
table aliases file:/etc/mail/aliases
table secrets file:/etc/mail/secrets

listen on lo0

action "local_mail" mbox alias <aliases>
action "outbound" relay host smtps://твойлогин@smtp.yandex.ru:465 auth <secrets>

match from local for local action "local_mail"
match from local for any action "outbound"
  • Перезапускаем smtpd: doas rcctl restart smtpd и проверяем, что всё работает, отправив спам себе или близким:
$ echo "Текст тестового сообщения" | mail -s "Тема сообщения" -r твойлогин@yandex.ru получатель@почта.его 
  • Кстати, чтобы каждый раз не указывать почту отправителя (как в примере выше), можно, например, в /etc/mail.rc вписать строчку set from="твойлогин@yandex.ru"

Вот вроде и весь рецепт.