ฉันต้องการส่งอีเมลจากสคริปต์ Linux Shell คำสั่งมาตรฐานสำหรับทำสิ่งนี้คืออะไรและฉันต้องตั้งค่าชื่อเซิร์ฟเวอร์พิเศษหรือไม่?
ฉันต้องการส่งอีเมลจากสคริปต์ Linux Shell คำสั่งมาตรฐานสำหรับทำสิ่งนี้คืออะไรและฉันต้องตั้งค่าชื่อเซิร์ฟเวอร์พิเศษหรือไม่?
คำตอบ:
หากเซิร์ฟเวอร์ได้รับการกำหนดค่าอย่างดีเช่นมี 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 ใหม่
จากนั้นมันค่อนข้างตรงไปตรงมากำหนดค่าไฟล์เพียง 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)
อีกทางเลือกหนึ่งสำหรับในสคริปต์ทุบตี:
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 ที่มีประสิทธิภาพมากขึ้นเช่นที่ ISP ของคุณ) หากคุณไม่ได้มี MTA ท้องถิ่น (แม้ว่ามันเป็นบิตผิดปกติสำหรับ UNIX เหมือนระบบที่จะละเว้นเดียว), คุณสามารถใช้บางส่วนเอ็มทีเรียบง่ายเช่น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 "THIS IS SUBJECT" -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 สามารถใช้ file editer เช่น nano, cat .....
> Ubuntu, Fedora, CentOS, Debian, OpenSUSE, Arch Linux:
เพิ่มสิ่งนี้
โดยที่ผู้ใช้แทนที่ด้วยชื่อเมลและรหัสผ่านของคุณคือรหัสผ่าน Gmail ของคุณ
[smtp.gmail.com]:587 user@gmail.com:password
บันทึกและปิดไฟล์และทำให้เข้าถึงได้โดย root เท่านั้น: เนื่องจากเป็นเนื้อหาที่ละเอียดอ่อนซึ่งมีรหัสผ่านของ ur
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
ฟรีBSD
postmap /usr/local/etc/postfix/sasl_passwd
4.1) รีสตาร์ท postfix
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 ของคุณหรือไม่
จากนั้นรีสตาร์ท postfix ถ้าคุณแก้ไขอะไรในนั้น
สำหรับเชลล์สคริปต์ให้สร้างไฟล์. 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'