Послать email из командной строки

На свете полно отличных программ с визуальным интерфейсом для посылки электронной почты. Это и Evolution и Thunderbird и масса других. И все-таки, иногда возникает необходимость послать почту из командной строки или скрипта.

Зачем это нужно?

Это нужно во многих случаях. Например в таких:

  • Посылка сообщения из скрипта.
  • Тестирование настроек почты.
  • Да мало ли где еще.

Суперкраткое введение в терминологию и конфигурации.

Это введение для начинающих UNIX/Linux-оидов. Те, кто все это знают, могут не заморачиваться. Но, как показывает опыт, знают далеко не все.

Терминология:

  • MUA - Mail User Agent. Программа, которая может составить почтовое сообщение и передать его для пересылки MTA. А также позволяет читать сообщения в Почтовом ящике или забирать сообщения из удаленного Почтового ящика.
  • MTA - Программа, которая умеет принимать и пересылать почтовые сообщения, а также сохранять сообщения в почтовом ящике.
  • POP3 - протокол доступа к Почтовым ящикам.
  • IMAP - более продвинутый протокол доступа к Почтовым ящикам.
  • SMTP - протокол передачи почтовых сообщений.
  • Сервер SMTP примерно то же самое, что и MTA.
  • Сервер POP/IMAP Сервер, предоставляющий доступ к Почтовым ящикам через сеть.
  • Почтовый ящик Место, где хранятся принятые почтовые сообщения. Обычно это файл, но может быть и директорий или база данных.
  • sendmail Знаменитый традиционный MTA Сегодня часто используется в качестве альяса для вызова MTA на локальном компьютере.

Как это все работает.

Отправка сообщения:

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

Чтение сообщения:

  • MUA читает сообщения из Почтового ящика и пользователь может работать с этими сообщениями.
  • Или другой вариант. MUA получает сообщения из Почтового ящика с удаленного компьютера и доставляет в локальный ящик или работает с сообщениями прямо на удаленном компьютере.

Конфигурация компьютера "только MUA". Как правило это рабочая станция.

Это самая простая конфигурация. На рабочей станции находится только MUA и локальные Почтовые ящики.

Для получения почты MUA обращается на удаленный компьютер к Серверу POP/IMAP.

Для отправки почты MUA отдает сообщения на MTA, находящийся на удаленном компьютере, который пересылает ее по назначению.

Конфигурация компьютера "MUA+MTA". Это может быть или рабочая станция или сервер.

В этом случае все также, как и в предыдущем, с небольшими отличиями:

  • MTA Находится на том же самом компьютере, поэтому для отправки сообщения передаются ему.
  • Доступ к Почтовым ящикам осуществляется не по протоколам IMAP или POP, а прямо к локальному Почтовому ящику, например файлу.

Отправка сообщений из командной строки. Конфигурация "MUA+MTA".

Сначала рассмотрим конфигурацию компьютера "MUA+MTA". В этом случае нам нужен только MUA, который умеет передавать сообщения для MTA из командной строки. О доставке позаботится MTA.

Отправка программой mail

Программа mail, это традиционный MUA Может работать как в интерактивном режиме, так и в составе скрипта. При работе в составе скрипта, тело сообщения подается на стандартный вход, остальная информация вводится в параметрах командной строки. mail передаст сообщение локальному MTA.

Для Ubuntu, программа mail находится в пакете mailutils

Пишем скриптик, что-то вроде такого:

1 #! /bin/bash
2 
3 TO="adresat@gmail.com"
4 TXT="Test message"
5 MSG=$TXT
6 SUB=$TXT
7 
8 echo $MSG | mail -s $SUB $TO

Все отлично работает.

Отправка программой mutt

Все отлично с mail, только она не умеет отправлять сообщения с приложениями. А иногда нужно. в этом случае можно применить программу mutt

Это гораздо более продвинутый MUA, чем mail, но командную строку он тоже умеет.

Для mutt наш скрипт приобретает следующий вид:

1 #! /bin/bash
2 
3 TO="adresat@gmail.com"
4 FILE="file_name"
5 TXT="Test message"
6 MSG=$TXT
7 SUB=$TXT
8 
9 echo $MSG | mutt -s $SUB -a $FILE -- $TO

Отправка сообщений из командной строки. Конфигурация "только MUA".

В предыдущих конфигурациях отправить письмо нам помогал установленный и настроенный MTA. Но не всегда ситуация такова. Иногда MTA нет, или он не настроен, или нам нужно послать как нибудь по другому, чем делает это MTA нашего хоста.

Хорошо бы иметь одну программку, которая сочетала бы в себе свойства и MUA и MTA. То есть, умела бы и составить сообщение и сама доставить туда, куда мы ей скажем.

В таких случаях я пользуюсь программой sendemail (Для Ubuntu пакет sendemail).

В ней все достаточно очевидно, поэтому я только приведу пример скрипта, использующего ее:

 1 #! /bin/bash
 2 
 3 SERVER="examplesmtprelay.com:25"
 4 FROM="localuser@hostname.com"
 5 TO="recipient@host.com"
 6 TXT="Test message"
 7 MSG=$TXT
 8 SUB=$TXT
 9 
10 sendEmail -f $FROM -t $TO -u $SUB -m $MSG -s $SERVER 
11 
12 exit 0

Аттачменты sendemail умеет тоже.

Дальнейшая информация как всегда, в манах.

Надеюсь, материал кому-нибудь пригодится.

Опубликовано: June 18, 2011

Комментарии:


Имя: mr.X

!!! БЛЯ, Огромное нечеловеческое спасибо чел!!! Инфа вернула глазам естественный цвет.



Имя: Денис Трофимов

Все отлично с mail, только она (не) умеет отправлять сообщения с приложениями.
cat BODY_FILE | mail -s "SUBJECT" pupkin@pupkin.ru



Имя: iop'op'

iouio



Комментировать:

Имя:

Комментарий: