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

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: SMTP, Linux, unix shell, Ubuntu, CentOS.

Как правило, для работы с почтой используются приложения, имеющие доступ к серверу по IMAP/POP3/SMTP. Но иногда, удобно выполнить диагностику или отправить оповещение при работе скрипта из командной строки. Рассмотрим несколько способов и примеров.

Подготовка

Для начала устанавливаем утилиту для отправки почты. В противном случае мы увидим ошибку mail: command not found.

В Debian / Ubuntu:

apt update

apt install mailutils

В CentOS / Red Hat:

yum install mailx

Синтаксис

Можно отправить сообщение следующей командой:

echo "Test text" | mail -s "Test title" master@dmosk.ru

* в данном примере будет отправлено письмо на электронный адрес master@dmosk.ru с темой Test title и телом письма — Test text.

Если при отправке возникли проблемы, можно проверить логи следующей командой:

tail /var/log/maillog

Примеры использования командной строки для email-отправки

Покажем несколько сценариев отправки почты.

1. Отправка простого сообщения

Независимо от операционной системы, сообщение отправляется командой:

echo 'The text of the message' | mail -s 'The subject of the message' master@dmosk.ru

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

Для разных типов дистрибутива Linux команды могут отличаться.

а) для CentOS / Red Hat:

echo 'Attachment' | mail -s 'Subject attachment message' -a /var/log/maillog master@dmosk.ru

б) для Ubuntu:

echo 'Attachment' | mail -s 'Subject attachment message' -a /var/log/maillog -a /var/log/maillog2 master@dmosk.ru

... или:

echo 'Attachment' | mail -s 'Subject attachment message' -A /var/log/maillog -A /var/log/maillog2 master@dmosk.ru

* где /var/log/maillog и /var/log/maillog2 — файлы, которые будут прикреплены к письму. Обратите внимание, что обе команды отличаются по регистру опции a и A — все зависит от версии и сборки Linux (в каких-то нужно использовать маленькую, в каких-то — большую). Также обратите внимание, что в примере для Ubuntu мы отправим 2 файла — для этого просто добавляем к команде еще одну опцию прикрепления файла.

3. Несколько получателей

Для отправки письма нескольким получателям, просто перечисляем их через запятую:

echo "Test text" | mail -s "Test title" master@dmosk.ru,shmaster@dmosk.ru

* в данном примере мы отправил письмо на ящики master@dmosk.ru и shmaster@dmosk.ru.

4. Отправка с копией

Отправить копию на адрес master2@dmosk.ru:

echo "Test copy" | mail -s "Test copy title" master@dmosk.ru -c master2@dmosk.ru

Отправить скрытую копию на адрес master3@dmosk.ru:

echo "Test hidden copy" | mail -s "Test hidden copy title" master@dmosk.ru -b master3@dmosk.ru

5. Указать отправителя

В CentOS / Red Hat:

echo "Test text" | mail -s "Test title" -r postmaster@dmosk.ru master@dmosk.ru

В Debian / Ubuntu:

echo "Test text" | mail -s "Test title" master@dmosk.ru -aFrom:postmaster@dmosk.ru

6. Отправка через внешний SMTP сервер

а) Для Ubuntu / Debian:

echo "Test text" | mail -s "Test title" -a "Smtp: smtp.mail.ru:25" -a "From: postmaster@dmosk.ru" -a "Return-path: postmaster@dmosk.ru" master@dmosk.ru

б) Для CentOS / Red Hat:

echo "Test text" | mail -s "Test title" -S smtp="smtp.mail.ru:25" master@dmosk.ru

Однако, если сторонний почтовый сервер работает по шифрованному каналу и требует аутентификацию, необходимо ввести следующее:

echo "Test text" | mail -v -s "Test title" -S smtp="smtp.dmosk.ru:587" -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="master@dmosk.ru" -S smtp-auth-password="password" -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb -S from=postmaster@dmosk.ru master@dmosk.ru

* где:

  • smtp.dmosk.ru — сервер smtp; 
  • 587 — порт для подключения к серверу отправки; 
  • smtp-use-starttls указывает на использование шифрования через TLS; 
  • smtp-auth=login задает аутентификацию с использованием логина и пароля; 
  • smtp-auth-user и smtp-auth-password — соответственно логин и пароль; 
  • ssl-verify=ignore отключает проверку подлинности сертификата безопасности; 
  • nss-config-dir указывает на каталог с базами nss; 
  • from задает поле FROM

Mutt

При возникновении проблем, можно воспользоваться программой mutt. Сначала поставим ее.

а) если используем CentOS / Red Hat:

yum install mutt

б) если используем Ubuntu / Debian:

apt update

apt install mutt

Теперь можно пользоваться. Синтаксис:

echo "Текст сообщения" | mutt -s "Тема" [дополнительные опции] -- <кому отправить>

Примеры использования Mutt

1. Отправить вложение:

echo "Attachment" | mutt -s "subject" -a /var/log/maillog -- master@dmosk.ru

* где /var/log/maillog — файл, который будет прикреплен к письму.

2. Указать отправителя:

echo "Mail From" | mutt -s "subject" -e 'my_hdr From: Дмитрий <postmaster@dmosk.ru>' -- master@dmosk.ru

* данной командой mutt отправит письмо от postmaster@dmosk.ru.

3. Отправка через другой сервер.

Для начала, открываем файл с конфигурацией Mutt:

vi ~/.muttrc

Добавим:

set smtp_url="smtp://smtp.mail.ru:25"

* в данном примере мы отправим всю нашу почту через узел smtp.mail.ru, порт 25.

Или при необходимости авторизации на почтовом сервере:

set smtp_url="smtp://smtp_user@smtp.mail.ru:465"
set smtp_pass = password
set ssl_verify_host = no
set ssl_verify_dates = no
set ssl_starttls = no
set ssl_force_tls = yes

* где:

  • smtp_user — имя учетной записи, под которой нужно авторизоваться на SMTP.
  • smtp_pass — пароль для аутентификации.
  • ssl_verify_host — нужно ли проверять валидность сертификата.
  • ssl_verify_dates — нужно ли проверять дату действия сертификата.
  • ssl_starttls — нужно ли использовать STARTTLS (обычно, при подключении по порту 587).
  • ssl_force_tls — нужно ли использование SSL/TLS (обычно, при подключении по порту 465).

Теперь можно отправлять письмо:

echo "Mail From" | mutt -s "subject" -e 'my_hdr From: Дмитрий <postmaster@dmosk.ru>' -- master@dmosk.ru

# CentOS # Linux # Ubuntu # UNIX # Почта # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет