Отправляем почту из консоли с помощью mutt, mail, ssmtp

Разное общее

# Settings

Отправка через утилиту не означает что почта настроена через нее, к примеру, Mutt может использовать настройки ssmtp для отправки почты из файла /etc/ssmtp/ssmtp.conf.

Конфиг для почты обычно лежит где-то тут (см. в man mutt, man ssmtp):

# Пользовательский
~/.muttrc
~/.mailrc

# Системный
/etc/mutt/Muttrc
/etc/ssmtp/ssmtp.conf
/etc/mail.rc
/etc/mail/sendmail.cf
/etc/postfix/main.cf

Обычно отправителя, получателя, subhect можно указывать как через предварительно заполненный файл, так и через опции для утилиты.

$ cat test
To: petr@redkin.net
From: <login>@corbina.net
Subject: Test Subj
$ ssmtp -s petr@redkin.net <test

$ mutt -s "daily report" petr@redkin.net

# Text

Всем утилитам можно отправлять как через echo, так и через файл.

echo "test text" | mutt -s "test subj" petr@redkin.net
mutt -s "test subj" test@test.ru </home/test/test

# Attachment

Отправка attachment возможна через

  • mutt/mpack из коробки с использованием MIME кодирования
  • mail из коробки
  • ssmtp с использованием uuencode

# Fake From

Почтовый сервер может не проверять поля from (можно даже отослать с president@somecountry.com).

~ $ cat ~/.muttrc
set realname="Vova" # имя отправителя
set from="president@somecountry.com"  # e-mail отправителя
Mutt

Uuencode считается deprecated способ и нежелателен для использования. На практике у меня почтовый клиент Outlook для телефона не распознавал нормально вложения при кодировании их uuencode.

Mutt крут

  • Ему не нужен uuencode для вложений, он использует актуальный MIME.
  • Есть крутые штуки. Например, используя опции -c/-b можно отправлять копии. По опции -c обычные, по -b – скрытые. Из man:
-b address - Specify a blind-carbon-copy (BCC) recipient
-c address - Specify a carbon-copy (CC) recipient

Простой пример отправки текста с subject на определенную почту через Mutt:

echo "test text" | mutt -s "test subj" petr@redkin.net

Добавляем вложение:

echo "test text" | mutt -s "test subj" petr@redkin.net -a file

Текст через файл + вложение + тема (-s) + основной получатель + копия (-c) + два скрытых получателя (-b)

mutt -s "test mail subj" test@test.ru -c test1@test.ru -b test2@test.ru -b test3@test.ru -a /home/test/test.xls </home/test/test
Mail

#attachment Вывод скрипта как Body, attach через опцию. Attach можно прикрепить несколько используя опцию -a (-a <attach> -a <attach2>).

ruby script.rb | mail -a attach.csv -s "Subject" mail@mail.ru
ssmtp

Использовал ssmtp для отправки почты с серверов, как для Ubuntu, так и для CentOS.

Ставим:

sudo yum install ssmtp

Добавляем свои настройки в файл /etc/ssmtp/ssmtp.conf:

root=<login>@post.ru
AuthUser=<login>
AuthPass=<pass>
mailhub=smtp.post.ru
rewriteDomain=corbina.ru

В случае если username отличается от твоей учетки на почте (например, запускает user login_new, а почта login), нужно добавить alias файле /etc/ssmtp/revaliases. В противном случае почта в поле FROM будет иметь адрес не отправителя, а “username”@domain, что может послужить помещением письма в спам/отбросом письма.

<login_new>:<login>@corbina.ru:smtp.corbina.ru

Базовая отправка:

echo "Hi!" | ssmtp petr@redkin.net

Отправка со всеми полями (from/to/subject). Заполняем файл, а потом “скармливаем” его smtp:

$ cat test
To: petr@redkin.net
From: <login>@corbina.net
Subject: Test Subj

ssmtp -s petr@redkin.net <test

Для дебага используем опцию -v:

ssmtp -v -s petr@redkin.net <test
...

#attachment Отправка вложений ssmtp + uuencode:

(cat msg; uuencode result.csv result.csv) | ssmtp petr@redkin.net

Leave a Reply