- Отправка почты из командной строки Linux
- Подготовка
- Синтаксис
- Примеры использования командной строки для email-отправки
- 1. Отправка письма с вложением
- 2. Несколько получателей
- 3. Отправка с копией
- 4. Указать отправителя
- 5. Отправка через другой SMTP сервер
- Примеры использования Mutt
- Отправка почты из командной строки (консоли) Linux
- Отправка почты c помощью mail в bash скрипте
- Не совсем понял в чём вопрос
- Спасибо!
- Отправка письма
- Вопрос
- По факту
Отправка почты из командной строки Linux
Подготовка
Для начала устанавливаем утилиту для отправки почты. В противном случае мы увидим ошибку mail: command not found.
В Debian / Ubuntu:
apt-get 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.
Если при отправке возникли проблемы, можно проверить логи следующей командой:
Примеры использования командной строки для email-отправки
1. Отправка письма с вложением
Для разных типов дистрибутива Linux команды могут отличаться.
а) для CentOS / Red Hat:
echo ‘Attachment’ | mail -s ‘Subject attachment message’ -a /var/log/maillog master@dmosk.ru
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. Сначала поставим ее.
а) если используем CentOS / Red Hat:
yum install mutt
б) если используем Ubuntu / Debian:
apt-get 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: Дмитрий
* данной командой mutt отправит письмо от postmaster@dmosk.ru.
3. Отправка через другой сервер.
Для начала, открываем файл с конфигурацией Mutt:
* в данном примере мы отправим всю нашу почту через узел smtp.mail.ru, порт 25.
Также можно добавить при необходимости:
set smtp_user = user
set smtp_pass = password
set ssl_verify_host = no
set ssl_verify_dates = no
set ssl_starttls = no
set ssl_force_tls = no
- smtp_user — имя учетной записи, под которой нужно авторизоваться на SMTP.
- smtp_pass — пароль для аутентификации.
- ssl_verify_host — нужно ли проверять валидность сертификата.
- ssl_verify_dates — нужно ли проверять дату действия сертификата.
- ssl_starttls — нужно ли использовать STARTTLS.
- ssl_force_tls — нужно ли принудительное использование TLS.
Теперь можно отправлять письмо:
echo «Mail From» | mutt -s «subject» -e ‘my_hdr From: Дмитрий
Источник
Отправка почты из командной строки (консоли) Linux
В данной статье мы рассмотрим основные утилиты для отправки электронных писем по SMTP из консоли Linux – mail/mailx/mutt. Данная инструкция применима ко всем современным дистрибутивам Linux.
Для отправки почты из командной строки Linux вам нужно установить Mail User Agent, которые умеет подключаться к smtp серверам для отправки и получения почты.
В первую очередь рассмотрим утилиту mail (mailx). Для ее установки, выполните:
- Для Debian/Ubuntu: # sudo apt-get install mailutils
- Для CentOS/Redhat установите пакет с помощью yum (dnf) # dnf install mailx
Mailx содержит в себе несколько утилит для работы с почтой, мы же подробно остановимся на mail.
# yum install sendmail –y
Основные опции при отправке писем:
- -s — Subject:
Чтобы отправить простое сообщение из консоли Linux, воспользуйтесь командой:
# echo «Это тестовое письмо» | mail -s «Проверка отправки почты» admin@build-centos.ru
Проверьте, что письмо доставлено в ящик.
Если вам нужно посмотреть подробные логи отправки писем по SMTP, их можно посмотреть в файле:
Без указания дополнительных опций письмо отправляется с дефолтного почтового ящика и скорее всего будет помечено как спам в большинстве популярных почтовых сервисах.
Чтобы указать другого отправителя письма (mail from), используйте ключ -r:
# echo «Это тестовое письмо 2» | mail -s «Проверка отправки почты 2» -r admin@build-centos.ru test@build-centos.ru
Если нужно отправить письмо нескольким получателям, перечислите их через запятую:
# echo «Это тестовое письмо 3» | mail -s «Проверка отправки почты 3» -r admin@build-centos.ru test@build-centos.ru, test-2@build-centos.ru
Как видите, письмо было отправлено двум получателям. А с помощью ключа -c вы можете отправить копию письма на указанный ящик:
# echo «Это тестовое письмо 4» | mail -s «Проверка отправки почты 4» -r admin@build-centos.ru -c test@build-centos.ru
Если вам нужно прикрепить к письму файл, укажите путь к файлу в параметре –a.
# echo «Файл во вложении» | mail -s «Проверка вложения» -a /root/test.txt -r admin@build-centos.ru test@build-centos.ru
В указанных почтовый ящик должно прийти письмо с вложением. Если нужно отпрравить два или более файлов, добавьте каждый файл через собственный атрибут –a:
# echo «Вложены 2 файла » | mail -s «Вложение нескольких файлов » -a /root/test.txt -a /root/message.log -r admin@build-centos.ru test@build-centos.ru
Вы можете отправить письмо через конкретный SMTP сервер. Его имя и порт подключения указываются в параметре -S smtp= :
# echo «Messages smtp server» | mail -s «Test smtp server» -S smtp=»build-centos.ru:25″ -r admin@build-centos.ru admin@build-centos.ru
Если удаленный SMTP сервер требует авторизации перед отправкой, вы можете указать имя пользователя и пароль с помощью параметров -S smtp-auth-user и -S smtp-auth-password.
# echo «Test auth mailbox» | mail -v -s «Test auth» -S smtp=»build-centos.ru:25″ -S smtp-auth=login -S smtp-auth-user=»admin@build-centos.ru» -S smtp-auth-password=»password» -S from=admin@build-centos.ru admin@build-centos.ru
При запуске этой команды перед вами появятся список SMTP команд для подключения, авторизации и отправки почты.
Если для отправки нужно использовать TLS шифрование и игнорировать проверку подлинности сертификата сервера, добавьте параметры:
-S smtp-use-starttls
-S ssl-verify=ignore
/.mailrc. Например, добавьте в этот файл такие строки:
Теперь для отправки письма через релей Gmail с аутентификацией достаточно выполнить команду:
$ echo «Test mail » | mail -v -s «Testing gmail auth» admin@build-centos.ru
Вы можете использовать команду отправки почты для в своих bash скриптом. Например, создайте следующий скрипт, которые будет отправлять вам информацию по свободному месту на дисках:
Добавьте этот скрипт в планировщик cron и вы будете регулярно получать письма с информацией о свободном месте на вашем сервере.
Еще одна популярная утилита для отправки почты в 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» admin@build-centos.ru
Таким образом, вы можете легко отправлять письма из командной строки, встраивать отправку email оповещений в свои bash скрипты или ватчдоги (удобно для контроля их выполнения).
Источник
Отправка почты c помощью mail в bash скрипте
OS: Raspbian Платформа: Raspberry Pi 2 Имеется следующий скрипт:
Не совсем понял в чём вопрос
Возможно к разметке, разметку поправил, теперь должно быть чуть более понятно) вопрос изложен в последних 2 строках поста)
занятная конструкция, однако.
У тебя перенаправление из файла неправильное, надо | убрать. Таких мест в коде два.
Спасибо!
Не заметил, теперь когда вертикальная черта отсутствует код выполняется корректно. Спасибо! А не могли бы вы подсказать ещё кое что? Я работаю под пользователем pi и когда я отправляю письмо адресатом значится, pi@raspberrypi можно это как-то поправить? Чтобы отображался реальный e-mail адрес, на Яндексе, а не pi@raspberrypi? Или так и должно быть, и можно это не править?
Большинство почтовых серверов увидят, чтоо какая-то мелкая хрень выдаёт себя за Яндекс и не примут такое письмо. Но можно выставить reply-to
У таких писем должна быть приписка: отправлено роботом, читать не умеет.
Не должно быть таких приписок. За каждым роботом должен стоять человек с красным флагом и отвечать за него.
Не должно быть таких приписок. За каждым роботом должен стоять человек
Работа данного робота в данном случае и заключается в отправке владельцу/дежурному админу оповещений. Отвечать на эти письма — полная глупость, как впрочем и ваш комментарий.
pi@raspberrypi можно это как-то поправить?
echo 1|mail -s test i@example.com — -sendmail-options -f’ ‘
Но это от версии mail зависит.
Отправка письма
Дело в том что если я всё правильно понимаю, письмо уходит не силами mail, а силами ssmtp, который контачится с smtp.yandex.ru с вполне валидными логином и пассом вида e-mail.yandex.ru,и потом уже при отправке, переправляет e-mail@yandex.ru на pi@raspberrypi,и выдаёт себя за raspberrypi ВМЕСТО Yandex. Что насколько я знаю далеко не best practice. А как пофиксить или понять в чём проблема, в силу недостатка знаний не знаю.
Отвечать на эти письма — полная глупость, как впрочем и ваш комментарий.
Если сервер не твой личный, и ты не настроил там исключений, то произвольный почтовый сервер может просто послать лесом такое твоё сообщение. Потому, что smtp callback.
В силу того, что bin/sendmail фактически стандарт, то mta, отличные от настоящего Sendmail, имеют врапер, который, по большей части, эмулирует поведение Sendmail в командной строке. По крайней мере Postfix. Наверное, ssmtp тоже должен иметь.
Если сервер не твой личный [а] произвольный почтовый сервер
То тогда вообще лучше таким способом не оповещать. 🙂
Вопрос
А могу я где-то в конфигах ssmtp указать в принудительном порядке указать чтобы в поле from: был указан не pi@raspberrypi, а моё_мыло@yandex.ru которое и является логином для отправки сего письма?
В силу того, что bin/sendmail фактически стандарт, то mta
А может для начала проверить, вдруг есть опция -r у mail(x) ?
По факту
Насколько я понимаю ничего «противозаконного» это оповещение не делает, оно логинится на ящик Яндекса, и отправляет письмо от имени Яндекса. Но самовольная смена поля From: настораживает
Зачем ? У mail, кторый mailx, её нет, но есть -sendmail-options (или -r сделали недавно ?). -r есть у mail, кторый из GNU mailutils (и там много что ещё есть, кстати).
и отправляет письмо от имени Яндекса.
Для избежания подземного сука надо, чтобы в envelope from либо был живой e-mail, либо <>. В последнем случае могут тоже не принять, но это уже принимающая сторона будет ССЗБ.
Но самовольная смена поля From: настораживает
Это не произвольное. Это локальный пользователь от локального имени хоста. А туда куда вы логинитесь — это «кому», а не от «кого». Если это одно и тоже, то это не почта, а извращение.
Зачем ? У mail, кторый mailx, её нет, но есть -sendmail-options (или -r сделали недавно ?). -r есть у mail, кторый из GNU mailutils (и там много что ещё есть, кстати).
Источник