Библиотека сайта 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 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 .....
Итак, можно подвести итоги. На самом деле получение и отправление писем из командной строки не представляет особой сложности, если вы знаете, что делаете.