Tôi muốn gửi email từ tập lệnh Linux Shell. Lệnh tiêu chuẩn để thực hiện việc này là gì và tôi có cần thiết lập bất kỳ tên máy chủ đặc biệt nào không?
Tôi muốn gửi email từ tập lệnh Linux Shell. Lệnh tiêu chuẩn để thực hiện việc này là gì và tôi có cần thiết lập bất kỳ tên máy chủ đặc biệt nào không?
Câu trả lời:
Nếu máy chủ được cấu hình tốt, chẳng hạn như nó có MTA đang hoạt động, bạn chỉ có thể sử dụng lệnh mail.
Ví dụ: để gửi nội dung của một tệp, bạn có thể làm như sau:
$ cat /path/to/file | mail -s "your subject" your@email.com
man mail
để biết thêm chi tiết.
sudo apt-get install mailutils
và chọn Internet site: Thư được gửi và nhận trực tiếp bằng SMTP. .
Nếu bạn muốn có một phương pháp sạch và đơn giản trong bash, và bạn không muốn sử dụng cat
, echo
vv, cách đơn giản nhất sẽ là:
mail -s "subject here" email@address.com <<< "message"
<<<
được sử dụng để chuyển hướng đầu vào tiêu chuẩn. Nó đã là một phần của bash trong một thời gian dài.
cat << END
...END | mail -s "subject" test@example.com
Nếu cả exim và ssmtp đều đang chạy, bạn có thể gặp rắc rối. Vì vậy, nếu bạn chỉ muốn chạy một MTA đơn giản, chỉ để có một ứng dụng khách smtp đơn giản để gửi thông báo qua email về sự đòi hỏi, bạn phải xóa MTA được cài đặt sẵn cuối cùng như exim hoặc postfix trước và cài đặt lại ssmtp.
Sau đó, nó khá đơn giản, chỉ định cấu hình 2 tệp (revaliases và ssmtp.conf) - Xem ssmtp doc - và cách sử dụng trong tập lệnh bash hoặc bourne của bạn như sau:
#!/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 $?
Rõ ràng là đừng quên mở đầu ra tường lửa của bạn vào cổng smtp (25).
Một tùy chọn khác cho tập lệnh 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
được ghi đè mỗi khi tập lệnh này được sử dụng.Nói chung, bạn muốn sử dụng mail
lệnh để gửi tin nhắn của mình bằng MTA cục bộ (sẽ gửi tin nhắn bằng SMTP đến đích hoặc chỉ chuyển tiếp nó đến một số máy chủ SMTP mạnh hơn, chẳng hạn như tại ISP của bạn). Nếu bạn không có MTA cục bộ (mặc dù hơi bất thường khi hệ thống giống UNIX bỏ qua một MTA), bạn có thể sử dụng một số MTA tối giản như ssmtp .
ssmtp
khá dễ dàng để cấu hình. Về cơ bản, bạn sẽ chỉ cần chỉ định máy chủ SMTP của nhà cung cấp của bạn ở đâu:
# 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
Một tùy chọn khác là sử dụng một trong vô số tập lệnh chỉ kết nối trực tiếp với máy chủ SMTP và cố gắng đăng thư ở đó, chẳng hạn như Smtp-Auth-Email-Script , smtp-cli , SendEmail , v.v.
Thừa nhận rằng bạn muốn sử dụng một số máy chủ smtp, bạn có thể làm:
export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
Thay đổi somehost
, someport
và someaccount@somedomain
những giá trị thực tế mà bạn sẽ sử dụng. Không có mã hóa và không có xác thực nào được thực hiện trong ví dụ này.
mailx
không được cài đặt?
Các mail
lệnh nào đó (ai mà có thể đoán ;-). Mở trình bao của bạn và nhập man mail
để lấy trang hướng dẫn sử dụng mail
lệnh cho tất cả các tùy chọn có sẵn.
Bạn thậm chí không cần MTA. Giao thức SMTP đủ đơn giản để ghi trực tiếp nó vào máy chủ SMTP của bạn. Bạn thậm chí có thể giao tiếp qua SSL / TLS nếu bạn đã cài đặt gói OpenSSL. Kiểm tra bài đăng này: https://33hops.com/send-email-from-bash-shell.html
Trên đây là một ví dụ về cách gửi e-mail văn bản / html sẽ hoạt động hiệu quả. Nếu bạn muốn thêm tệp đính kèm, mọi thứ có thể phức tạp hơn một chút, bạn sẽ cần mã hóa base64 các tệp nhị phân và nhúng chúng vào giữa các ranh giới. Đây là một nơi tốt để bắt đầu điều tra: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
Trên linux, tiện ích mail có thể được sử dụng để gửi tệp đính kèm với tùy chọn "-a". Đi qua các trang nam để đọc về tùy chọn. Ví dụ: mã sau sẽ gửi một tệp đính kèm:
mail -s "ĐÂY LÀ CHỦ ĐỀ" -a file đính kèm.txt name@domain.com <<< "Chào bạn, Vui lòng tìm báo cáo lỗi."
SỬ DỤNG POSTFIX
1: cài đặt phần mềm
Debian và 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
BSD miễn phí:
portsnap fetch extract update
cd /usr/ports/mail/postfix
make config
trong phần cấu hình, hãy chọn hỗ trợ SASL
make install clean
pkg install mailx
2. Định cấu hình Gmail
/ etc / postfix. Tạo hoặc chỉnh sửa tệp mật khẩu:
vim /etc/postfix/sasl_passwd
Tôi đang sử dụng vim bạn có thể sử dụng bất kỳ trình chỉnh sửa tệp nào như nano, cat .....
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
thêm điều này
trong đó người dùng thay thế bằng tên thư và mật khẩu của bạn là mật khẩu gmail của bạn
[smtp.gmail.com]:587 user@gmail.com:password
Lưu và đóng tệp và Chỉ làm cho tệp có thể truy cập được bằng root: vì nội dung nhạy cảm có chứa mật khẩu của bạn
chmod 600 /usr/local/etc/postfix/sasl_passwd
> FreeBSD:
thư mục / usr / local / etc / postfix.
vim /usr/local/etc/postfix/sasl_passwd
Thêm dòng:
[smtp.gmail.com]:587 user@gmail.com:password
Lưu và Làm cho nó chỉ có thể truy cập bằng root:
chmod 600 /usr/local/etc/postfix/sasl_passwd
3. Cấu hình Postfix
tệp cấu hình main.cf
6 tham số chúng ta phải đặt trong Postfix
Ubuntu, Arch Linux, Debian:
biên tập
vim /etc/postfix/main.cf
sửa đổi các giá trị sau:
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 mà trong cấu hình sẽ được đặt thành trống , để đảm bảo rằng không có tùy chọn bảo mật không tương thích với Gmail nào được sử dụng.
lưu và đóng
như cho
OpenSUSE:
vim /etc/postfix/main.cf
sửa đổi
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
nó cũng yêu cầu cấu hình của tệp master.cf
sửa đổi:
vim /etc/postfix/master.cf
bằng cách bỏ ghi chú dòng này (loại bỏ #)
#tlsmgr unix - - n 1000? 1 tlsmg
lưu và đóng
Fedora, CentOS:
vim /etc/postfix/main.cf
sửa đổi
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
BSD miễn phí:
vim /usr/local/etc/postfix/main.cf
sửa đổi:
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
lưu và đóng cái này
4. Xử lý tệp mật khẩu:
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
postmap /etc/postfix/sasl_passwd
cho FreeBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) Khởi động lại postfix
Ubuntu, Fedora, CentOS, OpenSUSE, Arch Linux, Debian:
systemctl restart postfix.service
cho FreeBSD:
service postfix onestart
nano /etc/rc.conf
thêm vào
postfix_enable=YES
lưu rồi chạy để bắt đầu
service postfix start
5. Bật "Ứng dụng kém an toàn" trong Gmail bằng cách sử dụng trợ giúp của liên kết bên dưới
https://support.google.com/accounts/answer/6010255
6. Gửi Email Kiểm tra
mail -s "subject" recever@domain.com
nhấn nút Enter
thêm nội dung thư theo ý muốn của bạn nhấn enter rồi nhấn ctrl + d để kết thúc thích hợp
nếu nó không hoạt động, hãy kiểm tra lại tất cả các bước và kiểm tra xem bạn có bật " ứng dụng kém an toàn" trong gmail của mình không
sau đó khởi động lại postfix nếu bạn sửa đổi bất cứ điều gì trong đó
cho shell script tạo tệp .sh và thêm lệnh 6 bước theo yêu cầu của bạn
ví dụ chỉ cho một mẫu
#!/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
Tập lệnh sẽ gửi email khi mức sử dụng đĩa vượt quá tỷ lệ phần trăm được chỉ định bởi biến thể THRESHOLD (ở đây là 80%).
bạn có thể sử dụng lệnh 'email' hoặc 'emailx'.
(1) $ vim /etc/mail.rc # hoặc # 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 "Vui lòng nhớ xóa các chủ đề không sử dụng trên!" | mail -s "chủ đề lãng phí" -a a.txt developer@xxx.com # gửi tới người dùng nhóm 'developer@xxxx.com'