Как известно, все настоящие админы лентяи, в хорошем смысле этого слова. По этой причине они стараются автоматизировать всё что можно и что нельзя. Одним из главных инструментов тотальной админоавтоматизации является ужасно прекрасный (или прекрасно ужасный) bash. Огромная куча поэтично сложенных bash-скриптов постоянно трудится без обеда, что бы админ мог изучить что-то новое или просто почитать Хабр :) Но бывает так, что случается беда и столкнувшийся с ней скрипт обязан призвать админа для спасения организации. Призывом админа проще, конечно же, заниматься посредством e-mail. Только не всегда есть желание ставить и настраивать какой-нибудь postfix на каждой машине, которая должна оповещать админа о проблемах. Иногда просто хочется одной командой послать письмо, использовав уже настроенный smtp организации. Сделать это можно при помощи программки msmtp. Я применяю этот подход только для использования smtp, находящегося внутри локальной сети организации, т.к. он не очень правильный с точки зрения безопасности, но в качестве примера покажу, как можно отправлять письма используя гугловский smtp.
Пример:
#!/bin/bash
printf "Subject:%b\nFrom:%b\nTo:%b\n%b\n" \
"From good admin" "someuser@gmail.com" "ded@moroz.ru" \
"Hello Ded Moroz! I worked hard all year, and so I want to get a red bike for the New Year!"|\
msmtp -t --host=smtp.gmail.com \
--port=587 \
--user=someuser \
--passwordeval="echo some_incredible_password" \
--from=someuser@gmail.com \
--tls=on \
--tls-certcheck=off \
--auth=on
Наверное, тут практически всё ясно и без слов, но немного поясню. Команда printf формирует само письмо, состоящее из заголовков Subject, From, To и тела письма, после чего вывод перенаправляется в команду msmtp, которая и отправляет письмо.
Параметры msmtp:
-t - заставляет программу msmtp брать адреса назначения из заголовков To, Cc и Bcc
--host - smtp-сервер, который надо использовать для отправки
--port - порт smtp-сервера
--user - пользователь
--passwordeval - команда, которая выводит пароль на стандартный вывод
--from - отправитель письма
--tls - включает/выключает TLS/SSL шифрование
--tls-certcheck - включает/выключает проверку сертификата
--auth - включает/выключает аутентификацию
Заголовки Subject, From и To можно и не создавать, просто в таком случае письмо будет без темы и поля To, а в качестве From будет установлено значение параметра --from. Но так делать некрасиво :)
Параметр -t тоже можно не использовать, а вместо него в качестве последних параметров через пробел указать адреса, на которые нужно отправить письмо.
Если не указать параметр
--passwordeval, то при запуске команды нужно будет ввести пароль руками.
Исходя из вышесказанного, можно переделать процедуру отправки письма как-нибудь так:
#!/bin/bash
printf "%b\n" \
"Hello Ded Moroz! I worked hard all year, and so I want to get a red bike for the New Year!"|\
msmtp --host=smtp.gmail.com \
--port=587 \
--user=someuser \
--from=someuser@gmail.com \
--tls=on \
--tls-certcheck=off \
--auth=on \
ded@moroz.ru \
santa@klaus.com
Как я уже сказал, это небезопасный приём, потому что пароль в первом варианте хранится в открытом виде в скрипте и в обоих вариантах не происходит проверки сертификата. При большом желании можно со всем этим заморочиться и сделать немного получше.