Я хочу отправить электронное письмо из командной оболочки 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
для всех доступных параметров.