Я хочу отправить электронное письмо из сценария Linux Shell. Какая стандартная команда используется для этого и нужно ли мне устанавливать какие-либо специальные имена серверов?
Я хочу отправить электронное письмо из сценария Linux Shell. Какая стандартная команда используется для этого и нужно ли мне устанавливать какие-либо специальные имена серверов?
Ответы:
Если сервер правильно настроен, например, у него есть работающий MTA, вы можете просто использовать команду mail.
Например, чтобы отправить содержимое файла, вы можете сделать это:
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail
Больше подробностей.
sudo apt-get install mailutils
и выберите Интернет-сайт: почта отправляется и принимается напрямую через SMTP. ,
Если вам нужен чистый и простой подход в bash, и вы не хотите использовать cat
, echo
и т. Д., Самым простым способом будет:
mail -s "subject here" email@address.com <<< "message"
<<<
используется для перенаправления стандартного ввода. Он долгое время был частью bash.
cat << END
...END | mail -s "subject" test@example.com
Если запущены и 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).
Другой вариант для сценария 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
перезаписывается каждый раз при использовании этого сценария.Как правило, вы хотите использовать 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
Другой вариант заключается в использовании одного из мириадов сценариев , которые просто подключиться к SMTP - серверу напрямую и попытаться отправить сообщение там, например, SMTP-AUTH-Email-Script , SMTP-кли , SendEmail и т.д.
Признав, что вы хотите использовать какой-то smtp-сервер, вы можете:
export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
Измените somehost
, someport
и someaccount@somedomain
на фактические значения, которые вы бы использовали. В этом примере не выполняется ни шифрование, ни аутентификация.
mailx
не устанавливается?
Это mail
делает команда (кто бы мог подумать ;-). Откройте оболочку и введите, man mail
чтобы получить страницу руководства для mail
команды со всеми доступными параметрами.
Вам даже не нужен 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
В Linux для отправки вложения можно использовать почтовую утилиту с опцией «-a». Просмотрите страницы руководства, чтобы прочитать об этой опции. Например, следующий код отправит вложение:
mail -s "ЭТО ТЕМА" -a attachment.txt name@domain.com <<< "Привет, дружище, пожалуйста, найдите отчеты об ошибках."
ИСПОЛЬЗОВАНИЕ POSTFIX
1: установить программное обеспечение
Debian и Ubuntu:
apt-get update && apt-get install postfix mailutils
OpenSUSE:
zypper update && zypper install postfix mailx cyrus-sasl
Fedora:
dnf update && dnf install postfix mailx
CentOS:
yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain
Arch Linux:
pacman -Sy postfix mailutils
FreeBSD:
portsnap fetch extract update
cd /usr/ports/mail/postfix
make config
в конфигурации выберите поддержку SASL
make install clean
pkg install mailx
2. Настройте Gmail.
/ И т.д. / постфикса. Создайте или отредактируйте файл паролей:
vim /etc/postfix/sasl_passwd
Я использую vim, вы можете использовать любой редактор файлов, например, nano, cat ...
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
Добавь это
где пользователь заменяет ваше имя почты, а пароль - ваш пароль Gmail
[smtp.gmail.com]:587 user@gmail.com:password
Сохраните и закройте файл и сделайте его доступным только для root: потому что это конфиденциальный контент, который содержит ваш пароль
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD:
каталог / usr / local / etc / postfix.
vim /usr/local/etc/postfix/sasl_passwd
Добавьте строку:
[smtp.gmail.com]:587 user@gmail.com:password
Сохраните и сделайте доступным только root:
chmod 600 /usr/local/etc/postfix/sasl_passwd
3. Конфигурация Postfix
файл конфигурации main.cf
6 параметров, которые мы должны установить в Postfix
Ubuntu, Arch Linux, Debian:
редактировать
vim /etc/postfix/main.cf
измените следующие значения:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_sasl_security_options, который в конфигурации будет пустым , чтобы гарантировать, что не используются несовместимые с Gmail параметры безопасности .
сохранить и закрыть
как и для
OpenSUSE:
vim /etc/postfix/main.cf
Modify
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/ca-bundle.pem
также требуется настройка файла master.cf
изменить:
vim /etc/postfix/master.cf
как раскомментируя эту строку (удалите #)
#tlsmgr unix - - n 1000? 1 tlsmg
сохранить и закрыть
Fedora, CentOS:
vim /etc/postfix/main.cf
Modify
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
FreeBSD:
vim /usr/local/etc/postfix/main.cf
изменить:
relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/mail/certs/cacert.pem
сохраните и закройте это
4. Обработать файл паролей:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
postmap /etc/postfix/sasl_passwd
для freeBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) Перезапустить постфикс
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
systemctl restart postfix.service
для FreeBSD:
service postfix onestart
nano /etc/rc.conf
Добавить
postfix_enable=YES
сохранить, затем запустить, чтобы начать
service postfix start
5. Включите "менее безопасные приложения" в Gmail, используя ссылку ниже.
https://support.google.com/accounts/answer/6010255
6. Отправьте тестовое электронное письмо.
mail -s "subject" recever@domain.com
нажмите Ввод
добавьте тело письма по вашему желанию, нажмите Enter, затем нажмите ctrl + d для правильного завершения
если он не работает, проверьте все шаги еще раз и проверьте, включено ли " менее безопасное приложение" в вашем Gmail
затем перезапустите постфикс, если вы измените что-либо в этом
для сценария оболочки создайте файл .sh и добавьте команду из 6 шагов в качестве требования
например только для образца
#!/bin/bash
REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=80
if [ "$REALVALUE" -gt "$THRESHOLD" ] ; then
mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $REALVALUE%
EOF
fi
Сценарий отправляет электронное письмо, когда использование диска превышает процент, указанный параметром THRESHOLD (здесь 80%).
вы можете использовать команду «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 -s "ненужные темы" -a a.txt developer@xxx.com # отправить пользователю группы 'developer@xxxx.com'