Перейти к содержимому

Linux как отправить письмо из консоли

  • автор:

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

Обновлено

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

Термины по теме: SMTP, Linux, unix shell, Ubuntu, CentOS.

Подготовка

Для начала устанавливаем утилиту для отправки почты. В противном случае мы увидим ошибку 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. Отправка письма с вложением

Для разных типов дистрибутива 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 файла — для этого просто добавляем к команде еще одну опцию прикрепления файла.

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

Для отправки письма нескольким получателям, просто перечисляем их через запятую:
echo «Test text» | mail -s «Test title» master@dmosk.ru,shmaster@dmosk.ru
* в данном примере мы отправил письмо на ящики master@dmosk.ru и shmaster@dmosk.ru.

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

Отправить копию на адрес 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

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

В 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

5. Отправка через другой 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: Дмитрий ‘ — master@dmosk.ru

* данной командой mutt отправит письмо от postmaster@dmosk.ru. 3. Отправка через другой сервер. Для начала, открываем файл с конфигурацией Mutt:

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: Дмитрий ‘ — master@dmosk.ru

Linux: Отправка почты с консоли

После новогодних праздников скопилось много фотографий, частью из которых я решил поделиться с другом. Передавать файлы решил по электрической почте.
Фотки были предварительно подготовленны. После чего первая часть была отправлена через веб интерфейс gmail (на компе нет почтовых клиентов). Сразу захотелось оптимизировать сей процесс… По сути необходимо отправить несколько писем, заполнив несколько одинаковых полей и прикрепив кучу разных файлов.
Погуглив немного был найден небольшой скрипт, который полностью подходил под мои задачи. В портах gentoo присутствует, по этому ставим с портов:

emerge -av net-mail/sendEmail

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

sendEmail -f from_mail@gmail.com -t to_mail@mail.ru -o message-charset=utf-8 -u «Photos. » \
-m «Тут идет небольшое тело письма. » -s smtp.gmail.com -xu from_mail@gmail.com -xp PASSWORD \
-l log_file.txt -a photo_1.jpeg photo_2.jpeg

-f from_mail@gmail.com — с какого мыла отправляем почту
-t to_mail@mail.ru — кому шлем письма
-o — дополнительные опции, например, кодировка сообщения.
-u «Photos. » — тема мыла.
-s smtp.gmail.com — сервер отправки почты
-xu from_mail -xp PASSWORD — логин пароль вашей почты
-l log_file.txt — куда пишем логи.
-a — прикрепляемые файлы

Отправка писем? Отправьте их из терминала Linux

Ваша работа требует ежедневной рассылки большого количества электронных писем? И вы часто задаетесь вопросом, можно ли и как отправлять сообщения электронной почты с терминала Linux. В этой статье будет рассказано о 6 различных способах отправки электронных писем с помощью терминала Linux. Давайте пройдемся по ним.

Команда «sendmail»

Используйте команду sendmail для одновременной отправки электронных писем одному или нескольким людям. Sendmail — один из самых популярных SMTP-серверов в Linux. Вы можете легко отправлять электронные письма прямо из командной строки с помощью команды sendmail. Для маршрутизации информации команда sendmail использует сеть, настроенную в вашей системе.

Давайте выполним следующие команды, чтобы создать файл с содержанием электронной почты.

cat /tmp/email.txt Subject: Terminal Email Send Email Content line 1 Email Content line 2

Subject — строка в качестве темы электронного письма.

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

Команда «mail»

Как и Sendmail, вы можете использовать команду mail для отправки писем с терминала. Для этой цели используйте команду, указанную ниже.

Здесь -s определяет тему электронного письма.

Чтобы отправить вложение в электронном письме, введите строку, указанную ниже:

Здесь -a используется для включения вложений. Если ваш дистрибутив основан на Debian, используйте -A, потому что он использует пакет mailutils.

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

mail -s "Test Email" [email protected],[email protected] < /dev/null

Команда «mailx»

GNU Mailutils — это комбинация нескольких пакетов утилит. Все Mailutils могут работать с почтовыми ящиками, начиная с почтовых ящиков UNIX, maildir и заканчивая удаленными почтовыми ящиками. Доступ к этим почтовым ящикам осуществляется по протоколам IMAP4, POP3 и SMTP. Mailutils предназначен для разработчиков, обычных пользователей Linux и системных администраторов.

Для установки используйте следующую команду.

sudo apt install mailutils

Пакет mailutils в основном состоит из двух команд, mail и mailx, и обе они работают одинаково.

Выше представлен синтаксис mail / mailx. Он включает в себя адрес, на который нужно отправить сообщение, тему сообщения и текст сообщения. Использование команды echo и отправка вывода в команду mail позволяет избежать запросов mailx о вводе копии и тела текстового сообщения.

Команда «swaks»

Команда swaks — это гибкий, ориентированный на транзакции инструмент SMTP с поддержкой сценариев. Расширения SMTP и функции, обрабатываемые этой командой, включают аутентификацию, TLS, конвейерную обработку и другие версии протоколов SMTP. Эта команда Linux также поддерживает различные методы передачи.

Чтобы установить этот инструмент, введите:

sudo apt install swaks

Вам необходимо подключиться к учетной записи SMTP: пользователь -au, сервер -s, адрес -t и пароль -ap. Вам также понадобится «флаг» -tls, если вы подключаетесь к порту 587. Итак, команда должна быть:

swaks --to [email protected] -s smtp.gmail.com:587 -tls -au -ap

Команда «ssmtp»

Вы можете отправлять электронные письма с помощью SMTP-сервера из терминала Linux с помощью ssmtp.

Используйте указанные ниже строки для отправки электронных писем с помощью ssmtp.

ssmtp [email protected] Subject: Test SSMTP Email Email send test using SSMTP via SMTP server. ^d

Здесь мы отправляем электронное письмо пользователю [email protected]. Вам нужно добавить тему с ключевым словом «Subject». Затем вы наберете сообщение, которое хотите передать получателю электронной почты. В конце сообщения нажмите Ctrl + D (^ d) для отправки электронного письма.

Команда «mutt»

Команда mutt помогает отправлять и читать электронные письма с вашего терминала Linux, используя локальные почтовые ящики пользователей. Кроме того, вы можете читать электронные письма с помощью серверов POP / IMAP. Mutt похож на команду Mail. Для отправки электронных писем используйте следующий синтаксис.

Вы можете отправить электронное письмо с вложенным файлом с помощью команды mutt. Для этого используйте команду следующим образом:

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

Чтобы изменить поле From: в теле письма, используйте ключ -r:

$ echo "Message Body" | mail -s "Message Subject" -r "source@domain.com" receiver@example.com

Это может несколько улучшить спам-рейтинг с точки зрения принимающих серверов. Например, вы хотите с какого-то внутреннего сервера отправлять уведомления на свой ящик в gmail, но gmail может отклонить письмо (да и не только gmail, ясное дело). Пример: есть шлюз с внешним ip 1.2.3.4 и внутренним ip 192.168.24.1. Внутренний сервер имеет только внутренний ip (lan или dmz). При отправке письма командой mail письмо будет отправлено через внешний шлюз (1.2.3.4), и его ip прекрасно поймет внешний почтовик.

Что "увидит" gmail? Что пришло письмо с ip 1.2.3.4, а отправитель, скажем, root@localhost.local (ну или как у вас hostname). Ясное дело, это не публичный адрес и его срочно надо в спам! Что делать нам? Не поднимать же полноценный почтовый сервер (а почему бы и нет ;))

Вполне может быть, что у вашего внешнего ip уже есть какое-либо имя, выданнео провайдером (например, s4-3-2-1.provider.com). Узнать это можно командой "ping -a 1.2.3.4". Или вы можете на любом вашем хостинге создать A-запись для ip 1.2.3.4 с именем что-то типа srv1234.yourdomain.com и это имя вписать в ключ -r:

$ echo "Message Body" | mail -s "Message Subject" -r "techadmin@srv1234.yourdomain.com" receiver@example.com

$ echo "Message Body" | mail -s "Message Subject" -r "techadmin@s4-3-2-1.provider.com" receiver@example.com

где techadmin@ - произвольно взятое имя почтового ящика.

Внешний почтовый сервер терпимее отнесется к письму, в поле From: которого стоит название хоста, с которого и пришло письмо.

Отправка тела письма из файла

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

$ mail -s "Message Subject" receiver@example.com < /var/txt/mailbody.txt

Другие опции

Отправить скрытую копию письма:
-b address

Отправить копию письма:
-c address

И там, и там список получателей разделяется запятыми.

Авторизуйтесь для добавления комментариев!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *