- Отправка почты из командной строки Linux
- Подготовка
- Синтаксис
- Примеры использования командной строки для email-отправки
- 1. Отправка письма с вложением
- 2. Несколько получателей
- 3. Отправка с копией
- 4. Указать отправителя
- 5. Отправка через другой SMTP сервер
- Mutt
- Примеры использования Mutt
- Отправка почты из командной строки (консоли) Linux
- Использование SMTP команд для отправки почты по Telnet
- Подключение по telnet
- Отправка сообщения SMTP командами
- Подключение по шифрованному каналу
- Аутентификация
- Получаем base64
- LOGIN
- PLAIN
Отправка почты из командной строки Linux
Обновлено: 05.05.2022 Опубликовано: 31.03.2017
Подготовка
Для начала устанавливаем утилиту для отправки почты. В противном случае мы увидим ошибку mail: command not found. В Debian / Ubuntu:
Синтаксис
* в данном примере будет отправлено письмо на электронный адрес master@dmosk.ru с темой Test title и телом письма — Test text. Если при отправке возникли проблемы, можно проверить логи следующей командой:
Примеры использования командной строки для email-отправки
1. Отправка письма с вложением
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 файла — для этого просто добавляем к команде еще одну опцию прикрепления файла.
2. Несколько получателей
* в данном примере мы отправил письмо на ящики master@dmosk.ru и shmaster@dmosk.ru.
3. Отправка с копией
4. Указать отправителя
5. Отправка через другой SMTP сервер
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
Однако, если сторонний почтовый сервер работает по шифрованному каналу и требует аутентификацию, необходимо ввести следующее:
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:
Примеры использования Mutt
echo «Mail From» | mutt -s «subject» -e ‘my_hdr From: Дмитрий
* данной командой mutt отправит письмо от postmaster@dmosk.ru. 3. Отправка через другой сервер. Для начала, открываем файл с конфигурацией Mutt:
* в данном примере мы отправим всю нашу почту через узел 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: Дмитрий ‘ — master@dmosk.ru
Отправка почты из командной строки (консоли) Linux
21.04.2021
VyacheslavK
CentOS, Linux, Ubuntu
комментария 4
В данной статье мы рассмотрим основные утилиты для отправки электронных писем по SMTP из консоли Linux – mail/mailx/mutt. Данная инструкция применима ко всем современным дистрибутивам Linux.
Для отправки почты из командной строки Linux вам нужно установить Mail User Agent, которые умеет подключаться к smtp серверам для отправки и получения почты.
В первую очередь рассмотрим утилиту mail (mailx). Для ее установки, выполните:
Mailx содержит в себе несколько утилит для работы с почтой, мы же подробно остановимся на mail.
Обратите внимание, что на вашем хосте обязательно должен быть установлен какой-нибудь почтовый сервер. Например, postfix или sendmail:
Основные опции при отправке писем:
Чтобы отправить простое сообщение из консоли Linux, воспользуйтесь командой:
# echo «Это тестовое письмо» | mail -s «Проверка отправки почты» [email protected]
Проверьте, что письмо доставлено в ящик.
Если вам нужно посмотреть подробные логи отправки писем по SMTP, их можно посмотреть в файле:
Без указания дополнительных опций письмо отправляется с дефолтного почтового ящика и скорее всего будет помечено как спам в большинстве популярных почтовых сервисах.
Чтобы указать другого отправителя письма (mail from), используйте ключ -r:
# echo «Это тестовое письмо 2» | mail -s «Проверка отправки почты 2» -r [email protected] [email protected]
Если нужно отправить письмо нескольким получателям, перечислите их через запятую:
# echo «Это тестовое письмо 3» | mail -s «Проверка отправки почты 3» -r ad[email protected] [email protected], [email protected]
Как видите, письмо было отправлено двум получателям. А с помощью ключа -c вы можете отправить копию письма на указанный ящик:
# echo «Это тестовое письмо 4» | mail -s «Проверка отправки почты 4» -r [email protected] -c [email protected]
Если вам нужно прикрепить к письму файл, укажите путь к файлу в параметре –a.
# echo «Файл во вложении» | mail -s «Проверка вложения» -a /root/test.txt -r [email protected] [email protected]
В указанных почтовый ящик должно прийти письмо с вложением. Если нужно отпрравить два или более файлов, добавьте каждый файл через собственный атрибут –a:
# echo «Вложены 2 файла » | mail -s «Вложение нескольких файлов » -a /root/test.txt -a /root/message.log -r [email protected] [email protected]
Вы можете отправить письмо через конкретный SMTP сервер. Его имя и порт подключения указываются в параметре -S smtp= :
# echo «Messages smtp server» | mail -s «Test smtp server» -S smtp=»build-centos.ru:25″ -r [email protected] [email protected]
Если удаленный SMTP сервер требует авторизации перед отправкой, вы можете указать имя пользователя и пароль с помощью параметров -S smtp-auth-user и -S smtp-auth-password.
При запуске этой команды перед вами появятся список SMTP команд для подключения, авторизации и отправки почты.
Если для отправки нужно использовать TLS шифрование и игнорировать проверку подлинности сертификата сервера, добавьте параметры:
-S smtp-use-starttls
-S ssl-verify=ignore
Чтобы не задавать все параметры в командной строке, вы можете указать их в файле ~/.mailrc. Например, добавьте в этот файл такие строки:
set smtp-use-starttls set ssl-verify=ignore set smtp=smtp://smtp.gmail.com:587 set smtp-auth=login set smtp-auth-u[email protected] set smtp-auth-password=sdf#23ddsH3sq9- set from= [email protected]
Теперь для отправки письма через релей Gmail с аутентификацией достаточно выполнить команду:
$ echo «Test mail » | mail -v -s «Testing gmail auth» [email protected]
Вы можете использовать команду отправки почты для в своих bash скриптом. Например, создайте следующий скрипт, которые будет отправлять вам информацию по свободному месту на дисках:
Добавьте этот скрипт в планировщик cron и вы будете регулярно получать письма с информацией о свободном месте на вашем сервере.
0 0 * * * /home/root/freespace.sh
Еще одна популярная утилита для отправки почты в Linux это mutt:
# sudo apt-get install mutt — для Debian/Ubuntu
# yum install mutt -y — для CentOS/Redhat
Синтаксис mutt такой же, как и у mail/ mailx:
# echo «Text messages mutt» | mutt -s «Test mutt» [email protected]
Если вам нужно просто проверить работу удаленного SMTP сервера, вы можете отправить письмо вручную через telnet.
Таким образом, вы можете легко отправлять письма из командной строки, встраивать отправку email оповещений в свои bash скрипты или ватчдоги (удобно для контроля их выполнения).
Предыдущая статья Следующая статья
Использование SMTP команд для отправки почты по Telnet
Обновлено: 22.02.2022 Опубликовано: 30.10.2017
При помощи данных команд удобно тестировать работу почтовых серверов.
Подключение по telnet
Проще всего подключиться к почтовому серверу из командной строки Linux:
Мы должны увидеть ответ сервера с кодом 220 (готовность к работе), например:
220 relay.dmosk.ru ESMTP Postfix
Отправка сообщения SMTP командами
В ответ получаем встречное приветствие с кодом 250, например, 250 relay.dmosk.ru.
Вводим адрес, от которого будем отправлять сообщение:
В ответ должны получить 250 2.1.0 Ok.
На какой адрес отправляем сообщение:
Получаем ответ 250 2.1.5 Ok.
Получим 354 End data with . — это означает, что можно вводить текст сообщения:
Чтобы закончить, с новой строки ставим точку и нажимаем Enter:
В ответ должны увидеть что-то подобное: 250 2.0.0 Ok: queued as A340FC4B70C, где последний код — идентификатор сообщения, присвоенный сервером.
220 relay.dmosk.ru ESMTP Postfix
502 5.5.2 Error: command not recognized
helo domain.local
250 relay.dmosk.ru
mail from:master@dmosk.ru
250 2.1.0 Ok
rcpt to:test@dmosk.ru
250 2.1.5 Ok
data
354 End data with .
subject:test subject
test text
.
250 2.0.0 Ok: queued as A5E60C4B70C
Подключение по шифрованному каналу
Если нам нужно подключиться к серверу по защищенному каналу SSL/TLS, то используем для подключения команду openssl. Мы можем подключиться к портам 587 (STARTTLS) или 465 (SMTP over SSL).
а) Для подключения по порту 587:
openssl s_client -starttls smtp -connect smtp.yandex.ru:587
б) Для подключения по порту 465:
openssl s_client -connect smtp.yandex.ru:465
Далее проходим аутентификацию и можно делать отправку вышеописанными командами.
Аутентификация
Если почтовый сервер требует аутентификацию, необходимо сначала авторизоваться в системе.
Для этого вместо или после приветствия вводим:
* EHLO — расширенное приветствие, которое позволит получить возможности почтового сервера.
В ответ мы получаем, примерно, следующее:
250-relay.dmosk.ru Hello [192.168.0.15]
250-SIZE 10485760
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-X-ANONYMOUSTLS
250-AUTH LOGIN PLAINT
250-X-EXPS GSSAPI NTLM
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250-XEXCH50
250-XRDST
250 XSHADOW
* в списке мы можем увидеть разные методы аутентификации (перечислены после AUTH).
Получаем base64
Данные авторизации передаются в закодированном виде с использованием стандарта Base64.
Чтобы закодировать свои логин и пароль, можно воспользоваться одним из перечисленных способов ниже.
2. Powershell:
perl -MMIME::Base64 -e «print encode_base64(‘текст’);»
LOGIN
При данном методе мы по очереди передаем закодированные логин и пароль.
После этого отправляем логин в base64, например dmosk:
Если аутентификация прошла успешно, увидим:
235 2.0.0 Authentication successful
PLAIN
Данный метод аутентификации отличается от вышеописанного тем, что логин с паролем передаются одной строкой. Base64 для них получаем следующей командой, например, в unix-shell:
echo -ne «\0username\0password» | base64
* где username и password — логин и пароль для аутентификации; \0 — нулевой байт.
Видим приглашение на ввод аутентификационных данных:
Вводим нашу последовательность: