บทความนี้จะแสดงหลายวิธีในการส่งอีเมลจากบรรทัดคำสั่ง/Shell ของ Linux – รวมถึงจากสคริปต์ Bash/Shell
ทำไมถึงต้องการส่งอีเมลจากบรรทัดคำสั่ง? อาจไม่ใช่เพื่อการสื่อสาร – คนส่วนใหญ่ใช้ไคลเอนต์อีเมลที่มี UI สวยงาม เพื่อส่งข้อความกันในวันๆ – แตคุณอาจต้องการให้คอมพิวเตอร์ส่งอีเมลแจ้งเตือนเมื่องานเสร็จ หรือเมื่อมีเหตุการณ์เกิดขึ้น
การแจ้งเตือนทางอีเมลมักใช้แจ้งเตือนพื้นที่ดิสก์ต่ำ หรือแจ้งผู้เกี่ยวข้องหากเกิดข้อผิดพลาด เสียไฟ – คุณแม้แต่เขียนการแจ้งเตือนให้สรุปการสมัครผู้ใช้ใหม่รายวันของแอปพลิเคชันล่าสุดของคุณได้ นี่คือเครื่องมือหลายตัวที่จะช่วยให้คุณทำได้ – พร้อมตัวอย่าง
ข้อควรระวังเกี่ยวกับการส่งอีเมล
ตัวอย่างในบทความนี้จะสมมติว่าคุณใช้เซิร์ฟเวอร์ SMTP ภายนอกเพื่อส่งเมล อาจเป็นบริการส่งอีเมลเฉพาะทางอย่าง Amazon SES หรือ MailGun หรือคุณอาจส่งอีเมลจากผู้ให้บริการอีเมลออนไลน์ (Gmail, Outlook.com) โดยใช้รายละเอียด SMTP ที่พวกเขาจัดเตรียม
บทความนี้ไม่ครอบคลุมการตั้งค่าและส่งเมลโดยตรงจากโฮสต์ SMTP ของคุณเอง เพราะเหตุผลง่ายๆ – ข้อความของคุณมีแนวโน้มจะถูกบล็อกหากมาจากที่อยู่ IP แบบที่อยู่อาศัย และคุณจะมีความยากลำบากในการแก้ไขปัญหาว่าการแจ้งเตือนอีเมลทำงานและถูกบล็อก หรือแค่ไม่ทำงาน
การเลือกโปรแกรมที่เหมาะสม
มีแพ็กเกจซอฟต์แวร์มากมายที่สามารถส่งอีเมลได้ – จำนวนมาก ผมไม่จะพยายามครอบคลุมทั้งหมด – คุณอยู่ที่นี่เพื่อหาบางอย่างที่ทำงานได้ง่ายๆ ดังนั้น…
MSMTP เป็นเครื่องมือที่เหมาะสมสำหรับงานนี้ ดังนั้นผมจะเน้นบทความนี้ไปที่วิธีใช้โปรแกรมนั้น
ก่อนหน้านี้ SSMTP เป็นตัวเลือกที่ผมชอบ แต่การพัฒนาแพ็กเกจนั้นหยุดลงแล้ว – MSMTP เป็นตัวแทนที่ดี
ตัวเลือกอื่นๆ รวมถึงคำสั่ง sendmail, mail, และ mutt ทั้งหมดจะทำงานได้ แต่ MSMTP ใช้งานง่าย กำหนดค่าง่าย และสามารถรักษาการกำหนดค่าแบบอิสระที่ไม่รบกวนระบบเมล
การใช้ MSMTP ส่งอีเมล
MSMTP เป็นโปรแกรมที่ส่งอีเมล (และ เพียงแค่) ส่งอีเมล – ทำให้เหมาะสำหรับส่งอีเมลจากสคริปต์ Bash
เมื่อคุณติดตั้ง MSMTP แล้ว คุณสามารถดูคู่มือผู้ใช้ได้โดยรัน:
man msmtp
ติดตั้ง MSMTP
บนระบบ Debian/Ubuntu-based ให้รันคำสั่งต่อไปนี้เพื่อติดตั้งแพ็กเกจ MSMTP ที่จำเป็น และแพ็กเกจ ca-certificates หากยังไม่ได้ติดตั้ง:
sudo apt update sudo apt install msmtp ca-certificates
คำสั่ง sudo ถูกใช้เพื่อรันคำสั่งด้วยสิทธิ์ root/administrative ทั่วทั้งบทความนี้
กำหนดค่า MSMTP
MSMTP รองรับการกำหนดค่าต่อผู้ใช้ หรือการกำหนดค่าระบบส่วนกลาง (global) – เราจะตั้งค่าแบบ global เพื่อให้ทุกบริการสามารถใช้ MSMTP ส่งอีเมลได้
MSMTP มาพร้อมไฟล์การกำหนดค่าตัวอย่างที่เราสามารถใช้เป็นเทมเพลต – เราจำเป็นต้องคัดลอกมันไปที่โฟลเดอร์ /etc/ เพื่อใช้:
sudo cp /usr/share/doc/msmtp/examples/msmtprc-system.example /etc/msmtprc
แก้ไขไฟล์การกำหนดค่าโดยใช้ text editor nano:
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 admin@wsxdn.com user username1 password password1 # Gmail 2 account gmail1 host smtp.gmail.com port 587 from admin@wsxdn.com user username2 password password2 # Set a default account account default : gmail1
บันทึกไฟล์ – MSMTP พร้อมใช้งาน
ส่งอีเมล
เมื่อตั้งค่า MSMTP เรียบร้อย คุณพร้อมแล้ว ไม่ต้องการซอฟต์แวร์เพิ่มเติมสำหรับส่งอีเมลจาก MSMTP – คุณสามารถใช้คำสั่ง printf เพื่อสร้างอีเมลและ pipe ไปยังคำสั่ง msmtp:
printf "Subject: Testing\nHello there!." | msmtp -a gmail2 admin@wsxdn.com
"Subject: Testing\nHello there!." – นี่คืออีเมลที่จะถูกส่ง Subject ถูกกำหนดโดยใช้ Subject: ตามด้วยข้อความ subject \n กำหนด New Line ซึ่งตามด้วยข้อความ body ของอีเมล \n newlines เพิ่มเติมสามารถเพิ่มได้ตามต้องการ เพื่อสร้างข้อความ plain text พร้อมการจัดรูปแบบ
ตัวเลือก -a ใช้เพื่อตั้งค่าบัญชีอีเมลที่จะส่งอีเมล – หากไม่ตั้งค่า จะใช้ default
ส่งอีเมลพร้อมไฟล์แนบด้วย Mutt
การส่งอีเมลพร้อมไฟล์แนบซับซ้อนกว่า – ต้องการซอฟต์แวร์เพิ่มเติมเพื่อทำให้ง่ายขึ้น mutt เป็นไคลเอนต์อีเมลที่เพิ่มฟังก์ชันนี้ด้วยความยุ่งยากน้อยที่สุดสำหรับใช้ในสคริปต์
ติดตั้งโดยรัน:
sudo apt install mutt
mutt อาจติดตั้ง Postfix mail transfer agent เป็น dependency – มันจะถามการกำหนดค่าเมล คุณสามารถเลือก No configuration ได้อย่างปลอดภัย – เราไม่ต้องการให้ postfix ถูกกำหนดค่า ตามที่กล่าวไว้ก่อนหน้านี้ เราไม่ต้องการส่งเมลโดยตรงจากระบบนี้ เพราะมันน่าจะไม่ถึงปลายทางเนื่องจากตัวกรองสแปม
เหมือน MSMTP mutt มีการกำหนดค่าต่อผู้ใช้และ global เราจะใช้ global configuration เพื่อให้ผู้ใช้/บริการทุกคนส่งเมลพร้อมไฟล์แนบได้ สร้างและแก้ไขไฟล์โดยใช้ text editor nano โดยรัน:
nano /etc/muttrc
ใส่การกำหนดค่าด้านล่าง (แทนค่าด้วยของคุณเองจากการกำหนดค่าเมล):
set sendmail="/usr/bin/msmtp" set use_from=yes set realname="Your Name" set admin@wsxdn.com set envelope_from=yes
mutt ตอนนี้ถูกกำหนดค่าแล้ว และสามารถใช้ส่งอีเมลพร้อมไฟล์แนบได้:
mutt -a attachment.txt -s "My Subject" -- admin@wsxdn.com < "Email message body"
การกำหนดค่าต่อผู้ใช้ vs. Global Configuration
ข้างต้น ได้กำหนด global configurations หากคุณต้องการให้การกำหนดค่าใช้ได้เฉพาะผู้ใช้บางคน – เพื่อให้แต่ละผู้ใช้ส่งได้เฉพาะจากบัญชีของตัวเอง ตัวอย่างเช่น – ให้วางการกำหนดค่าในไฟล์ต่อไปนี้ใน home directory ของผู้ใช้แทน:
~/.msmtprc ~/.muttrc