Отправка почты из оболочки Linux script

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

Ответ 1

Если сервер настроен правильно, например, он имеет MTA, он может использовать команду mail.

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

$ cat /path/to/file | mail -s "your subject" [email protected]

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

Ответ 2

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

mail -s "subject here" [email protected] <<< "message"

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

Ответ 3

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

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

#!/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).

Ответ 4

Другой вариант для bash script:

mailbody="Testmail via bash script"
echo "From: [email protected]" >> /tmp/mailtest
echo "To: [email protected]" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
  • Файл /tmp/mailtest перезаписывается каждый раз, когда используется этот script.
  • Местоположение sendmail может отличаться для каждой системы.
  • При использовании этого параметра в cron script вам необходимо использовать абсолютный путь для команды sendmail.

Ответ 5

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

ssmtp довольно легко настроить. В принципе, вам просто нужно указать, где находится 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

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

Ответ 6

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

export SUBJECT=some_subject
export smtp=somehost:someport
export [email protected]
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

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

Ответ 7

Вам даже не нужен 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

Ответ 8

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

mail -s "ЭТО ПОДТВЕРДИТ" -a attachment.txt [email protected] <<< "Привет, дружище, см. отчеты об ошибках".

Ответ 9

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