Задача: нужно отправлять сообщения из скриптов с небольшого сервера на Ubuntu, но без использования локального почтового сервера. Он просто не был установлен (да и не факт, что нужен был). Было принято решение, что стоит использовать внешний почтовый сервер. Например, Gmail.

Установка необходимых пакетов

Итак, устанавливаем пакеты msmtp и heirloom-mailx:

1
 apt-get install msmtp heirloom-mailx

Настройка

Создадим файл с необходимыми настройками, чтобы каждый раз не задавать кучу параметров в строке скрипта. Пропишем в /home/USER/.mailrc следующий текст:

1
2
3
4
5
6
7
8
9
 account gmail {
 set record=+Sent
 set smtp-use-starttls
 set smtp=smtp://smtp.gmail.com:587
 set smtp-auth=login
 set smtp-auth-user=ВАША_ПОЧТА@gmail.com
 set smtp-auth-password=ВАШ_ПАРОЛЬ
 set from="ВАШЕ ИМЯ <ВАША ПОЧТА>"
 }

set record=+Sent нужно, чтобы ваши письма были в папке “Отправленные”, иначе их там не будет, что не всегда хорошо.

Проверка

Итак, задаём следующую команду:

1
 echo "Любой текст на ваше усмотрение, который мы отправим на почту" | mailx -v -A gmail -s "ТЕМА" нужная_вам@почта

Вы увидите кучу данных типа:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 Resolving host [[Протоколы#SMTP|smtp]].gmail.com . . . done.
 Connecting to 173.194.71.109:587 . . . connected.
 220 mx.google.com ESMTP i4
 >>> EHLO router
 250-mx.google.com at your service, [78.31.0.1]
 250-SIZE 35882577
 250-8BITMIME
 250-STARTTLS
 250 ENHANCEDSTATUSCODES
 >>> STARTTLS
 220 2.0.0 Ready to start TLS
 Comparing common name: "[[Протоколы#SMTP|smtp]].gmail.com"
 >>> EHLO router
 .........
 >>> DATA
 354  Go ahead i4
 >>> .
 250 2.0.0 OK 1343572883 i4
 >>> QUIT
 221 2.0.0 closing connection i4

Письмо ушло, всё ок!

Отправка с прикреплённым файлом

1
 mailx -v -A gmail -s "ТЕМА" -a file нужная_вам@почта

Отправка зашифрованной почта с вложением с помощью mailx

Итак, у нас есть некоторый файл /tmp/file, который нужно отправить в зашифрованном виде определенному абоненту через вышеуказанный способ. Вам нужно, чтобы:

  • открытый ключ был импортирован вам

  • вы установили уровень доверия (иначе каждый раз система будет спрашивать y/N, а при автоматической отправке с помощью CRON это не возможно)

Отдаём следующую команду:

1
 gpg -ae -r ПОЧТА_АБОНЕНТА < /tmp/file | mailx -s "ТЕМА ПИСЬМА" -A gmail ПОЧТА_АБОНЕНТА

Если всё прошло и не возникло никаких проблем, то замечательно. Если же возникли какие-либо вопросы: ключ не импортирован или доверие ему не выставлено