Я хочу надіслати електронний лист із сценарію оболонки Linux. Яка стандартна команда для цього і чи потрібно мені встановлювати якісь спеціальні імена сервера?
Я хочу надіслати електронний лист із сценарію оболонки Linux. Яка стандартна команда для цього і чи потрібно мені встановлювати якісь спеціальні імена сервера?
Відповіді:
Якщо сервер добре налаштований, наприклад, він має запущений MTA, ви можете просто скористатися командою пошти.
Наприклад, щоб надіслати вміст файлу, ви можете зробити це:
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail
для отримання детальної інформації.
sudo apt-get install mailutils
і виберіть Інтернет-сайт: Пошта надсилається та приймається безпосередньо за допомогою SMTP. .
Якщо ви хочете , чистий і простий підхід в БАШЕЄВ, і ви не хочете використовувати cat
, echo
і т.д., найпростіший спосіб буде:
mail -s "subject here" email@address.com <<< "message"
<<<
використовується для переадресації стандартного вводу. Це було давно частиною басу.
cat << END
...END | mail -s "subject" test@example.com
Якщо запущені і exim, і ssmtp, ви можете виникнути проблеми. Отже, якщо ви просто хочете запустити простий MTA, просто щоб простий клієнт smtp надсилав сповіщення електронною поштою на стійкість, вам слід очистити зрештою попередньо встановлений MTA, наприклад exim або postfix спочатку і перевстановити ssmtp.
Тоді це досить прямо вперед, конфігуруючи лише два файли (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-cli , 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
/ etc / postfix. Створіть або відредагуйте файл пароля:
vim /etc/postfix/sasl_passwd
я за допомогою vim u може використовувати будь-який редактор файлів, як нано, кіт .....
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
додайте це
де користувач замінить своїм іменем пошти та паролем ваш пароль gmail
[smtp.gmail.com]:587 user@gmail.com:password
Збережіть і закрийте файл і зробіть його доступним лише під корінь: надайте його чутливий вміст, який містить пароль ур
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
Збережіть і зробіть це доступним лише під корінь:
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
модифікувати
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
модифікувати
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
додайте тіло пошти за своїм бажанням, натисніть клавішу Enter, потім натисніть клавішу ctrl + d для належного завершення
якщо це не працює, перевірте всі кроки ще раз і перевірте, чи увімкніть " менш безпечний додаток" у вашій пошті
потім перезапустіть постфікс, якщо ви щось змінюєте в цьому
для скрипту оболонки створіть .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 "Не забудьте видалити невикористані теми ons!" | пошта -s "відходи теми" -a a.txt developer@xxx.com #send груповому користувачеві "developer@xxxx.com"