Наши партнеры

UnixForum




создать сайт Москва | комплексная автоматизация 1с

Библиотека сайта rus-linux.net

Прием и отправка почты из командной строки

Оригинал: Linux mail command examples - send mails from command line
Автор: Silver Moon
Дата публикации: 27 августа 2013 года
Перевод: А. Кривошей
Дата перевода: декабрь 2013 г.

Обычно для приемки и отправки почты используются веб-сервисы типа gmail и yahoo, или графические почтовые клиенты. Однако в linux мы можем также отправлять или получать почту в командной строке. Это полезно в таких ситуациях, как отправка почты из скриптов, или в случаях, когда графическая оболочка недоступна.
В этом руководстве описывается, как использовать команду mail для приема и отправки почты.

Отправка почты

В зависимости от дистрибутива, который вы используете, может понадобиться установить дополнительные пакеты, такие как mailutils, чтобы команда mail нормально работала.

Пользователи Debian/Ubuntu могут воспользоваться командой apt-get:

# apt-get install mailutils

Пользователи Fedora / CentOS / Red Hat Enterprise Linux (RHEL) могут сделать это с помощью yum:

# yum install mailutils

Теперь команда mail должна быть готова к работе.

Выполните приведенную ниже команду, заменив "user@yourmaildomain.com" на свой адрес электронной почты. Опция s задает тему письма.

$ mail -s "Hello World" user@yourmaildomain.com

Теперь вы можете вводить текст письма. Когда закончите, нажмите "control-D" в начале новой строки.

# mail -s "This is the subject" m00n.silv3r@gmail.com
Cc: 
Hi Silver
How are you doing
Hope its going fine.
Bye

Вы отправили первое письмо из командной строки. Содержимое письма можно вставить из файла.
В некоторых дистрибутивах командная оболочка сначала запросит в интерактивном режиме ввод других полей, таких как "Cc" (Carbon copy). Просто нажимайте "Enter", чтобы пропустить этот этап. Когда вы введете адрес или адреса электронной почты, необходимо нажать "Enter", чтобы перейти на новую строку, к телу письма.
После нажатия Ctrl+D вы возвращаетесь в командную строку без каких либо дополнительных оповещений. Однако ваше письмо было отправлено.
Интересно, что если вы ничего не введете в теле письма и нажмете Ctrl+D, команда mail отреагирует на это:

# mail -s "This is the subject" m00n.silv3r@gmail.com
Cc: 
Null message body; hope that's ok

Если тело письма хранится у нас в отдельном файле, мы можем напрямую использовать его для отправки письма. Это полезно при вызове команды mail из скриптов, или других программ, написанных, например, на perl или php.

$ mail -s "Hello World" user@yourmaildomain.com < /home/user/mailcontent.txt

Или быстрая отправка письма одной строкой:

# echo "This is the message body" | mail -s "This is the subject" m00n.silv3r@gmail.com

Другие полезные параметры команды mail:

-s subject (тема письма)
-c email-address (CC - отправка копии письма по адресам email-address)
-b email-address (BCC - отправка скрытой копии письма по адресам email-address)

Ниже пример использования этих опций:

$ mail -s "Hello World" user@yourmaildomain.com -c usertocc@yourmaildomain.com -b usertobcc@yourmaildomain.com

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

$ mail -s "Hello World" user1@yourmaildomain.com,user2@yourmaildomain.com

Указать адрес отправителя тоже несложно, но здесь есть своя хитрость. После отправляемого письма необходимо добавить перед своим адресом следующую последовательность символов:

(двойное тире) (пробел) (одинарное тире) (без пробела) f

Ниже пример:

$ mail -s "Hello World" user@yourmaildomain.com -- -f from_user@yourmaildomain.com

Однако приведенная выше последовательность может работать в centos, но не в debian или ubuntu. В этих системах используется альтернативный синтаксис:

# echo "This is the message body" | mail -s "This is the subject" m00n.silv3r@gmail.com -aFrom:blog@binarytides.com

Опция a в целом добавляет дополнительные заголовки. Чтобы задать с ее помощью отправителя, используется следующий синтаксис:

# echo "This is the message body" | mail -s "This is the subject" m00n.silv3r@gmail.com -aFrom:Blogger\<blog@binarytides.com\>

Обратите внимание, что бы экранируем угловые скобки, так как они могут иметь свое назначение для командной оболочки.

Отправка писем с вложениями

Команда mail используется до сих пор, так как это простой и быстрый способ отправки писем, однако она, к сожалению, не поддерживает отправку вложений. Теперь мы сделаем следующий шаг и откроем для себя MUTT. Это очень мощный консольный почтовый клиент, и он умеет намного больше, чем просто отправка писем с вложениями, но в данном случае нас интересует именно эта возможность.

Если mutt по умолчанию у вас не установлен, вы можете сделать это с помощью apt-get или yum от имени root (или используя sudo):

Для пользователей Debian / Ubuntu:

# apt-get install mutt

Для пользователей Fedora / CentOS или Red Hat Enterprise Linux (RHEL):

# yum install mutt

Теперь вы можете отправлять письма с вложениями из командной строки.

Отправка простого письма:

# echo "This is the message body" | mutt -s "hello" m00n.silv3r@gmail.com

Отправка письма с вложением:

$ mutt -s "Hello World" -a /home/user/file_to_attach.tar.gz user@yourmaildomain.com < home/user/mailcontent.txt

Все просто.

Отправка писем из скриптов bash/shell

Теперь давайте копнем глубже и попробуем отправить письмо из скрипта оболочки. Ниже простой скрипт, отправляющий информацию по использованию диска.

#!/bin/bash
du -sh | mail -s "disk usage report" user@yourmaildomain.com

Откройте новый файл, вставьте в него приведенные выше строки, сохраните и запустите. Вы получите письмо, содержащее вывод команды "du -sh".
И последняя хитрость в письмах из командной сроки - добавление вложений к письмам, отправляемым из скриптов. Предположим, вам необходимо сделать резервную копию директории с конфигурационными файлами, заархивировать ее и отправить в качестве вложения с помощью mutt:

#!/bin/bash
tar -zcf /home/user/backup.tar.gz /home/user/files_to_backup
echo "Archived configuration files" | mutt -a /home/user/backup.tar.gz -s "backup data" user@yourmaildomain.com

Команда echo в начале третьей строки добавляет текст "Archived configuration files" в тело письма.

Чтение писем

До сих пор мы рассматривали отправку писем из командной строки. На самом деле также легко можно читать письма из командной строки:

$ mail

Вы вероятно заметили, что для отправки и получения писем мы используем одну и ту же команду. Однако для чтения писем не нужно добавлять никаких опций.
Ниже простой вывод:

$ mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/hcg": 2 messages 2 new
>N  1 hcg@hcghost.localdomain  Thu Aug  1 16:53  81/3034  "Hello World"
N  2 hcg@hcghost.localdomain  Thu Aug  1 16:54  82/3061  "disk usage report"
&

Первая строка вывода - это версия программы mail. Вторая строка говорит о том, что имеется два сообщения, оба непрочитанные, и почта хранится в файле /var/spool/mail/hcg.
У всех пользователей linux файл с почтой находится в директории /var/spool/mail/. При получении нового письма оно добавляется в конец этого файла. После информации о файле выводится список писем.
Настоятельно рекомендуется не редактировать этот файл без использования mail или аналогичной программы. Читать или производить поиск писем лучше всего с помощью grep.
Чтобы прочитать первое письмо, просто введите 1 и нажмите enter. При чтении письма, если вам необходимо вернуться к списку писем, просто нажмите "q". Символ > показывает, какое из писем в настоящее время является текущим.

Команда Maildir-utils

"mu" - это набор утилит командной строки для Linux/Unix, который позволяет производить быстрый поиск писем.

Пользователи Debian/Ubuntu могут установить его с помощью apt-get:

# apt-get install maildir-utils

Пользователи Fedora / CentOS / Red Hat Enterprise Linux (RHEL) могут использовать yum:

# yum install maildir-utils

Ниже пара простых команд из этого пакета:

$ mu find from:william subject:report

для поиска писем от william с темой report.

Чтобы проверить текущие настройки почты, используется опция info.

# mu-tool info
VERSION=2.99.97
SYSCONFDIR=/etc
MAILSPOOLDIR=/var/mail/
SCHEME=mbox
LOG_FACILITY=mail
.....

Итак, можно подвести итоги. На самом деле получение и отправление писем из командной строки не представляет особой сложности, если вы знаете, что делаете.