Довольно часто возникает необходимость настроить почтовые оповещения от системы (речь конечно же про Linux, если что). Это могут быть послания от cron, всяческих mdadm (мониторинг RAID), да и вообще при всём бурном развитии мессенджеров старый добрый пуленепробиваемый email ещё никто не отменял. Тем более, что большинство утилит (тот же cron) и умеют как раз-таки общаться именно через почту.
Полноценный почтовый сервер поднимать не имеет смысла, особенно, когда речь идёт про одноплатные компьютеры. Там дорог каждый байт, как и в RAM, так и на флешке.
Поэтому будем обходиться простым средством и сведём задачу к простой отправке писем на наш самый обычный email адрес.
Итак, дано:
- Свежеустановленный Armbian (Debian stretch).
- Почтовый адрес на Яндексе.
Не проверял на Ubuntu, но думаю будет всё тоже самое. И да, с gmail это тоже заработает. Важно, чтобы в настройках вашего почтового аккаунта на Яндекс/Gmail/whatever была разрешена отправка через SMTP.
Надо:
- Уметь отсылать почту на произвольный почтовый адрес.
- Всю почту адресованную root, вашему_пользователю и служебным аккаунтам (типа www-data) отсылать на некий внешний адрес.
Задача осложняется тем, что нельзя так просто взять и использовать первый попавшийся smtp сервер. Конечно, ваш провайдер может и разрешит отсылку, но устройство может быть подключено по альтернативному каналу.
А ведь я помню времена, когда все работало без всяких авторизаций. А потом появились интернет-маркетологи, нигерийские принцы и прочие пидорасы.
Так что будем пользоваться этим самым Яндексом, упомянутым выше.
Итак, поехали…
Первое, что нужно сделать — обеспечить функционирование команды mail в свежепоставленном Linux.
Две команды:
1 | sudo apt- install heirloom-mailx |
Первая ставит старорежимный почтовый клиент (она будет эмулировать команду mail), вторая же делает “официальную запись о том, что в качестве команды mail мы будем использовать другой бинарник”. Нет, вопрос можно решить и симлинком, но это способ более каноничный.
Дальше можно набрать команду mail
и получить гордый отлуп No mail for my_username
.
Теперь нам нужно настроить почтовый транспорт, то есть обеспечить работу sendmail. Настройка каноничного sendmail — занятие требующее самоотречения, поэтому поставим его заменитель.
1 | sudo apt-get install msmtp |
msmtp — небольшая утилита, которая умеет делать только одно — отсылать почту на сконфигурированный smtp сервер. К недостаткам можно отнести следующее — в моем случае она не делает никакую очередь. То есть в случае проблем с сетью письмо просто пропадет. В принципе, для “домашнего пользованя” очень даже подойдет.
Если же сохранность оповещений критична — используте другой транспорт, например exim4. Но это уже совсем другая история.
Дальше нужно отконфигурировать _msmtp. Шага три:
- Создать папку для логов (я хз почему она не создается сама).
- Создать конфигурационный файл
- Настроить алиасы
Раз:
1 | sudo mkdir /var/log/msmtp |
На самом деле chmod/owner должны быть более адекватные-другие. Но мне лениво искать, какие именно, поэтому пусть будет можно всё всем.
Два:
Предположим, наш аккаунт на Яндексе — zaloopa@yandex.ru.
Тогда файл /etc/msmtprc должен иметь следующее содержание:
1 | defaults |
В случае использования Gmail нужно будет сменить то, что в поле host. Ну и возможно настройки tls, хотя вроде всё должно работать. Если используется “ПДД — почта для домена”, то вместо логина нужно писать полный адрес — zaloopa@zaloopa.info
Три:
Алиасы важны. Вот пример файла /etc/mail_aliases:
1 | root: zaloopa@yandex.ru |
Теперь вся почта для пользователей root,my_username и www-data будет уходить на внешний адрес.
Отлично. Проверить довольно просто — пишем три письма командой mail. Одно для root, второе для my_username, третье — для www-data. Если вы осилили работу с консольным почтовым клиентом и успешно написали их, то в логе msmtp будет примерно следующее:
1 | Feb 20 10:45:09 host=smtp.yandex.ru tls=on auth=on user=zaloopa from=zaloopad@yandex.ru recipients=zaloopa@yandex.ru mailsize=144 smtpstatus=250 smtpmsg='250 2.0.0 Ok: queued on smtp4o.mail.yandex.net as 1550659509-c1eIJdfssfdgsgen-j9fgfQghhgX' exitcode=EX_OK |
Письма благополучно приняты почтовым сервером и теперь их доставка на могучих плечах Яндекс или Google.
Ещё раз о приемуществах и недостатках такого setup.
Плюсы:
- Он занимает мало места
- Прост, понятен и прозрачен в конфигурации
- Не висит никакой процесс в памяти
Минусы:
- Нет очереди (письма потеряются при недоступности сервера)
У меня на подобной фигне вполне бодро работает гейтвей sms2email и приходят уведомительные письма от cron.
И да, для “разработчиков на ПоХаПэ” — это будет работать с функциями php_mail, или как там называется это ваше поделие. Короче, будет работать со всем, что умеет использовать sendmail в Linux. А это 99.9% случаев.