Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

ส่งอีเมลจาก Linux Bash/Shell: คู่มือทีละขั้นตอนและตัวอย่าง

บทความนี้จะแสดงหลายวิธีในการส่งอีเมลจากบรรทัดคำสั่ง/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