Отправка почты из сценария оболочки Linux - PullRequest
107 голосов
/ 01 марта 2011

Я хочу отправить письмо из скрипта Linux Shell.Какова стандартная команда для этого и нужно ли мне устанавливать какие-либо специальные имена серверов?

Ответы [ 10 ]

112 голосов
/ 01 марта 2011

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

Например, чтобы отправить содержимое файла, вы можете сделать это:

$ cat /path/to/file | mail -s "your subject" your@email.com

man mail для более подробной информации.

84 голосов
/ 19 ноября 2012

Если вам нужен чистый и простой подход в bash и вы не хотите использовать cat, echo и т. Д., Самый простой способ будет выглядеть так:

mail -s "subject here" email@address.com <<< "message"

<<< используется для перенаправления стандартного ввода.Это было частью bash долгое время.

24 голосов
/ 02 марта 2011

Если exim и ssmtp работают, вы можете столкнуться с проблемами. Поэтому, если вы просто хотите запустить простой MTA, просто чтобы иметь простой SMTP-клиент для отправки уведомлений по электронной почте для настойчивости, вы должны сначала удалить предварительно установленный MTA, например exim или postfix и переустановите ssmtp.

Тогда это довольно просто, настроить только 2 файла (revaliases и ssmtp.conf) - см. Ssmtp doc - и использование в вашем скрипте bash или bourne выглядит так:

#!/bin/sh  
SUBJECT=$1  
RECEIVER=$2  
TEXT=$3  

SERVER_NAME=$HOSTNAME  
SENDER=$(whoami)  
USER="noreply"

[[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"  
[[ -z $2 ]] && RECEIVER="another_configured_email_address"   
[[ -z $3 ]] && TEXT="no text content"  

MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"  
echo -e $MAIL_TXT | sendmail -t  
exit $?  

Очевидно, что не забудьте открыть выход брандмауэра для порта smtp (25).

8 голосов
/ 10 ноября 2015

Другая опция для скрипта bash:

mailbody="Testmail via bash script"
echo "From: info@myserver.test" > /tmp/mailtest
echo "To: john@mywebsite.test" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
  • Файл /tmp/mailtest перезаписывается при каждом использовании этого скрипта.
  • Местоположение sendmail может отличаться в зависимости от системы.
  • При использовании этого в скрипте cron вы должны использовать абсолютный путь для команды sendmail.
7 голосов
/ 01 марта 2011

Как правило, вы хотите использовать команду mail для отправки вашего сообщения с использованием локального MTA (который либо доставит его с помощью SMTP в пункт назначения, либо просто перенаправит его на более мощный SMTP-сервер, например, у вашего интернет-провайдера).Если у вас нет локального MTA (хотя для UNIX-подобной системы это немного непривычно), вы можете использовать минималистичный MTA, например ssmtp .

* 1006.* довольно прост в настройке.По сути, вам просто нужно указать, где находится SMTP-сервер вашего провайдера:

# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=mail

Другой вариант - использовать один из множества сценариев, которые просто подключаются к SMTP-серверу напрямую и пытаются опубликовать там сообщение, напримерas Smtp-Auth-Email-Script , smtp-cli , SendEmail и т. д.

4 голосов
/ 11 октября 2012

Признавая, что вы хотите использовать какой-нибудь SMTP-сервер, вы можете сделать:

export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

Изменить somehost, someport и someaccount@somedomain на фактические значения, которые вы будете использовать.В этом примере не выполняется шифрование и аутентификация.

2 голосов
/ 21 февраля 2018

В linux утилиту mail можно использовать для отправки вложений с опцией "-a".Просмотрите справочные страницы, чтобы прочитать об этой опции.Например, следующий код отправит вложение:

mail -s "ЭТО СУБЪЕКТ" -a attachment.txt name@domain.com <<< "Привет, приятель, найди сообщения об ошибках."1006 *</p>

2 голосов
/ 12 июля 2016

Тебе даже не нужен MTA.Протокол SMTP достаточно прост, чтобы напрямую записать его на ваш SMTP-сервер.Вы даже можете общаться через SSL / TLS, если у вас установлен пакет OpenSSL.Проверьте это сообщение: https://33hops.com/send-email-from-bash-shell.html

Выше приведен пример того, как отправлять текстовые / html электронные письма, которые будут работать из коробки.Если вы хотите добавить вложения, все может стать немного сложнее, вам нужно будет base64 кодировать двоичные файлы и встраивать их между границами.Это хорошее место для начала расследования: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP

1 голос
/ 01 апреля 2019

вы можете использовать команду 'email' или 'emailx'.

(1) $ vim /etc/mail.rc # или # vim /etc/nail.rc

set from = xxx@xxx.com #
set smtp = smtp.exmail.gmail.com #gmail's smtp server 
set smtp-auth-user = xxx@xxx.com #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login

Поскольку, если оно не отправлено с авторизованного аккаунта, электронная почта попадет в список нежелательной почты.

(2) $ echo "Пожалуйста, не забудьте удалить неиспользуемые темы!" | mail - "ненужные темы" - a.txt developer@xxx.com # отправить группе пользователей 'developer@xxxx.com'

1 голос
/ 01 марта 2011

Команда mail делает это (кто бы мог догадаться ;-). Откройте вашу оболочку и введите man mail, чтобы получить страницу руководства для команды mail со всеми доступными параметрами.

...