Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

Bash/Shell Script เพื่อส่งอีเมลใน Linux – Howto, Example

บทความนี้จะแสดงให้คุณเห็นหลายวิธีในการส่งอีเมลจากบรรทัดคำสั่ง/เชลล์ของ Linux รวมถึงจากสคริปต์ Bash/Shell

ทำไมคุณถึงต้องการส่งอีเมลจากบรรทัดคำสั่ง อาจไม่สื่อสารกัน คนส่วนใหญ่ใช้โปรแกรมรับส่งเมลที่มีอินเทอร์เฟซผู้ใช้ที่ดีในการส่งข้อความถึงกันในแต่ละวัน แต่คุณอาจต้องการให้คอมพิวเตอร์ส่งอีเมลแจ้งเตือนเมื่องานเสร็จสิ้นหรือเมื่อมีเหตุการณ์เกิดขึ้น

การแจ้งเตือนทางอีเมลดังกล่าวมักใช้เพื่อแจ้งเตือนเมื่อพื้นที่ดิสก์เหลือน้อย หรือแจ้งให้ผู้อื่นทราบหากเกิดข้อผิดพลาด ไฟดับ คุณยังสามารถเขียนการแจ้งเตือนเพื่อให้ข้อมูลสรุปรายวันของการสมัครผู้ใช้ใหม่ในแอปล่าสุดของคุณ ต่อไปนี้คือเครื่องมือหลายอย่างที่จะช่วยให้คุณทำสิ่งนี้ได้ พร้อมตัวอย่าง

หมายเหตุเกี่ยวกับการส่งจดหมาย

ตัวอย่างในบทความนี้จะถือว่าคุณใช้เซิร์ฟเวอร์ SMTP ภายนอกเพื่อส่งจดหมาย นี่อาจเป็นบริการส่งอีเมลโดยเฉพาะ เช่น Amazon SES หรือ MailGun หรือคุณอาจส่งอีเมลจากผู้ให้บริการอีเมลออนไลน์ของคุณ (Gmail, Outlook.com) โดยใช้รายละเอียด SMTP ที่มีให้

บทความนี้ไม่ครอบคลุมถึงการตั้งค่าและการส่งจดหมายโดยตรงจากโฮสต์ SMTP ของคุณเองด้วยเหตุผลง่ายๆ ข้อหนึ่ง – ข้อความของคุณมักจะถูกบล็อกหากมาจากที่อยู่ IP ที่อยู่อาศัย และคุณจะมีปัญหาในการแก้ไขปัญหาว่าอีเมลแจ้งเตือนหรือไม่ กำลังทำงานอย่างถูกต้องและถูกบล็อก หรือเพียงแค่ไม่ทำงาน

การเลือกโปรแกรมที่เหมาะสม

ซอฟต์แวร์จำนวนมากสามารถส่งอีเมลได้จำนวนมาก ฉันจะไม่พยายามครอบคลุมทั้งหมด – คุณกำลังมองหาบางสิ่งที่ได้ผล ดังนั้น…

MSMTP เป็นเครื่องมือที่เหมาะสำหรับงานนี้ ฉันจะเน้นที่บทความนี้เกี่ยวกับวิธีใช้โปรแกรมนั้น

ก่อนหน้านี้ SSMTP เป็นตัวเลือกที่ฉันชอบ แต่การพัฒนาแพ็คเกจนั้นหยุดลง – MSMTP เป็นทางเลือกที่ดี

ตัวเลือกอื่นๆ ได้แก่ ส่งอีเมลอีเมล, และ โง่ คำสั่ง ทั้งหมดจะทำงาน แต่ MSMTP นั้นใช้งานง่ายและกำหนดค่า และสามารถรักษาการกำหนดค่าอิสระที่จะไม่รบกวนเมลของระบบ

การใช้ MSMTP เพื่อส่งอีเมล

MSMTP เป็นโปรแกรมที่ส่งอีเมล (และ เท่านั้น ) ส่งอีเมล – ทำให้เหมาะสำหรับการส่งอีเมลจากสคริปต์ทุบตี

เมื่อคุณติดตั้ง MSMTP แล้ว คุณสามารถดูคู่มือผู้ใช้ได้โดยเรียกใช้:

man msmtp

ติดตั้ง MSMTP

ในระบบที่ใช้ Debian/Ubuntu ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้ง MSMTP ที่จำเป็น แพ็คเกจและ ca-certificates แพ็คเกจหากยังไม่ได้ติดตั้ง:

sudo apt update
sudo apt install msmtp ca-certificates

sudo คำสั่งใช้เพื่อเรียกใช้คำสั่งที่มีสิทธิ์ระดับรูท/ผู้ดูแลระบบตลอดทั้งบทความนี้

กำหนดค่า MSMTP

MSMTP รองรับการกำหนดค่าต่อผู้ใช้หรือการกำหนดค่าระบบส่วนกลาง – เราจะตั้งค่านี้ด้วยการกำหนดค่าส่วนกลางเพื่อให้บริการทั้งหมดสามารถใช้ MSMTP เพื่อส่งอีเมลได้

MSMTP มาพร้อมกับไฟล์การกำหนดค่าตัวอย่างที่เราสามารถใช้เป็นเทมเพลต - เราจำเป็นต้องทำสำเนาในโฟลเดอร์ /etc/ เพื่อใช้งาน:

sudo cp /usr/share/doc/msmtp/examples/msmtprc-system.example /etc/msmtprc

แก้ไขไฟล์การกำหนดค่าโดยใช้ นาโน โปรแกรมแก้ไขข้อความ:

sudo nano /etc/msmtprc

ตอนนี้คุณสามารถกรอกรายละเอียดของเซิร์ฟเวอร์ SMTP ที่คุณจะใช้ในการส่งอีเมล คุณสามารถกำหนดบัญชีอีเมลได้หลายบัญชีหากต้องการส่งจากเซิร์ฟเวอร์หรือที่อยู่อื่น

ด้านล่างนี้คือตัวอย่างการกำหนดค่าที่มีที่อยู่ Gmail สองแห่ง:

# Set default values for all following accounts.
defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        ~/.msmtp.log

# Gmail 1
account        gmail1
host           smtp.gmail.com
port           587
from           [email protected]
user           username1
password       password1

# Gmail 2
account        gmail1
host           smtp.gmail.com
port           587
from           [email protected]
user           username2
password       password2


# Set a default account
account default : gmail1

บันทึกไฟล์ – MSMTP พร้อมใช้งาน

ส่งอีเมล

เมื่อตั้งค่า MSMTP แล้ว คุณก็พร้อมที่จะไป ไม่จำเป็นต้องใช้ซอฟต์แวร์เพิ่มเติมในการส่งอีเมลจาก MSMTP – คุณสามารถใช้ printf คำสั่งเพื่อสร้างอีเมลของคุณและส่งไปยังคำสั่ง msmtp:

printf "Subject: Testing\nHello there!." | msmtp -a gmail2 [email protected]

“เรื่อง:กำลังทดสอบ\nสวัสดี!” – นี่คืออีเมลที่จะส่ง หัวเรื่องถูกกำหนดโดยใช้ เรื่อง: ตามด้วยข้อความเรื่อง \n กำหนดบรรทัดใหม่ ซึ่งตามด้วยข้อความเนื้อหาอีเมล เพิ่มเติม \n สามารถเพิ่มบรรทัดใหม่ได้เมื่อจำเป็นเพื่อสร้างข้อความธรรมดาที่มีการจัดรูปแบบ

ที่ -a ตัวเลือกใช้เพื่อตั้งค่าบัญชีอีเมลที่จะส่งอีเมล หากไม่ได้ตั้งค่าไว้ ระบบจะใช้ค่าเริ่มต้น

ส่งอีเมลพร้อมไฟล์แนบโดยใช้ Mutt

การส่งอีเมลพร้อมไฟล์แนบนั้นยากกว่าเล็กน้อย – จำเป็นต้องมีซอฟต์แวร์เพิ่มเติมเพื่อให้ทำได้ง่ายขึ้น โง่ เป็นไคลเอนต์อีเมลที่เพิ่มฟังก์ชันการทำงานนี้ด้วยความยุ่งยากน้อยที่สุดสำหรับใช้ในสคริปต์

ติดตั้งโดยเรียกใช้:

sudo apt install mutt

โง่ อาจติดตั้งตัวแทนการถ่ายโอนจดหมาย Postfix เป็นการพึ่งพา - มันจะขอการกำหนดค่าเมล คุณสามารถเลือกไม่มีการกำหนดค่า .ได้อย่างปลอดภัย – เราไม่จำเป็นต้องกำหนดค่า postfix ดังที่ได้กล่าวไว้ก่อนหน้านี้ในบทความนี้ เราไม่ต้องการส่งอีเมลจากระบบนี้โดยตรง เนื่องจากมีแนวโน้มว่าจะไปไม่ถึงปลายทางเนื่องจากการกรองสแปม

เช่นเดียวกับ MSMTP mutt มีต่อผู้ใช้และการกำหนดค่าทั่วโลก เราจะใช้การกำหนดค่าส่วนกลางเพื่อให้ผู้ใช้/บริการทั้งหมดสามารถส่งอีเมลพร้อมไฟล์แนบได้ สร้างและแก้ไขไฟล์โดยใช้ นาโน โปรแกรมแก้ไขข้อความโดยเรียกใช้:

nano /etc/muttrc

ป้อนการกำหนดค่าด้านล่าง (โดยมีค่าแทนที่ด้วยการกำหนดค่าอีเมลของคุณเอง):

set sendmail="/usr/bin/msmtp"
set use_from=yes
set realname="Your Name"
set [email protected]
set envelope_from=yes

โง่ ได้รับการกำหนดค่าแล้ว และสามารถใช้ส่งอีเมลพร้อมไฟล์แนบได้:

mutt -a attachment.txt -s "My Subject" -- [email protected] < "Email message body"

ต่อผู้ใช้เทียบกับการกำหนดค่าส่วนกลาง

ด้านบน มีการกำหนดคอนฟิกูเรชันส่วนกลาง หากคุณต้องการให้การกำหนดค่ามีผลกับผู้ใช้บางรายเท่านั้น เพื่อให้ผู้ใช้แต่ละรายสามารถส่งจากบัญชีผู้ใช้ของตนเองได้เท่านั้น เช่น ให้วางการกำหนดค่าในไฟล์ต่อไปนี้ในไดเร็กทอรีหลักของผู้ใช้แทน:

~/.msmtprc
~/.muttrc