Automate Send Email ด้วย Python

หมวดสำหรับแบ่งบันความ รู้ต่างๆ จะมีหมวดย่อยๆ ในหมวดนี้ เช่น php, SQL, XML, CSS

Moderator: mindphp, ผู้ดูแลกระดาน

Bundith
PHP Hero Member
PHP Hero Member
โพสต์: 131
ลงทะเบียนเมื่อ: 06/05/2025 9:23 am

Automate Send Email ด้วย Python

โพสต์ที่ยังไม่ได้อ่าน โดย Bundith »

การส่งอีเมลเป็นกระบวนการที่เกิดขึ้นอย่างต่อเนื่องในหลายบริบทของชีวิตประจำวันและการทำงาน ไม่ว่าจะเป็นการส่งรายงานประจำวันให้หัวหน้า การแจ้งเตือนลูกค้าเกี่ยวกับการชำระเงิน หรือการยืนยันการสั่งซื้อสินค้า การส่งอีเมลอัตโนมัติ (Automate Email) ด้วย Python จึงเป็นเครื่องมือที่ช่วยลดเวลาการทำงานที่ต้องทำซ้ำ ๆ และเพิ่มประสิทธิภาพการดำเนินงานอย่างมาก ในบทความนี้เราจะอธิบายวิธีใช้งาน Python เพื่อทำ Automation การส่งอีเมล โดยใช้โมดูลมาตรฐาน เช่น smtplib และ email รวมถึงแนะนำการใช้งานร่วมกับ SMTP Server เช่น Gmail พร้อมยกตัวอย่างกรณีใช้งานจริง ประโยชน์ที่ได้รับ และคำแนะนำในการนำไปประยุกต์ใช้
Share Knowledge-1.png
Share Knowledge-1.png (162.36 KiB) Viewed 143 times
1. ความเข้าใจเบื้องต้นเกี่ยวกับการส่งอีเมลด้วย Python
Python มีไลบรารีในตัวที่สามารถส่งอีเมลผ่าน SMTP (Simple Mail Transfer Protocol) ได้ ซึ่งไลบรารีหลักที่ใช้ได้แก่:
  • smtplib : สำหรับเชื่อมต่อกับ SMTP Server และส่งอีเมล
  • email : สำหรับสร้างโครงสร้างของอีเมล เช่น subject, body, attachment ฯลฯ
2. ตัวอย่างโค้ดการส่งอีเมลด้วย Python

โค้ด: เลือกทั้งหมด

import smtplib
from email.message import EmailMessage

# สร้างอีเมล
msg = EmailMessage()
msg['Subject'] = 'แจ้งเตือนรายวัน'
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
msg.set_content('สวัสดีครับ นี่คือรายงานประจำวันที่คุณต้องตรวจสอบ')

# เชื่อมต่อ SMTP Server
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
    smtp.login('[email protected]', 'your_app_password')
    smtp.send_message(msg)
หมายเหตุ:
  • ต้องเปิดการใช้งาน "App Password" สำหรับ Gmail
  • ต้องเปิดการเข้าถึงจากแอปที่ไม่น่าเชื่อถือในบัญชี Google (ถ้าไม่ได้ใช้ OAuth2)
3. การแนบไฟล์กับอีเมล

โค้ด: เลือกทั้งหมด

from email.mime.base import MIMEBase
from email import encoders

filename = 'report.pdf'

with open(filename, 'rb') as f:
    file_data = f.read()
    mime = MIMEBase('application', 'octet-stream')
    mime.set_payload(file_data)
    encoders.encode_base64(mime)
    mime.add_header('Content-Disposition', 'attachment', filename=filename)
    msg.add_attachment(mime)
4. การส่งอีเมลหลายฉบับในลูปอัตโนมัติ

โค้ด: เลือกทั้งหมด

recipients = ['[email protected]', '[email protected]']
for recipient in recipients:
    msg['To'] = recipient
    smtp.send_message(msg)
หรือการใช้ Data จากไฟล์ Excel/CSV เพื่อสร้างรายชื่อผู้รับและเนื้อหาอีเมลที่กำหนดเอง:

โค้ด: เลือกทั้งหมด

import pandas as pd

df = pd.read_csv('emails.csv')
for index, row in df.iterrows():
    msg['To'] = row['email']
    msg.set_content(f"เรียนคุณ {row['name']}\n\nนี่คือข้อมูลของคุณ...")
    smtp.send_message(msg)
5. ประโยชน์ของการใช้ Python ส่งอีเมลอัตโนมัติ
หากคุณต้องการให้โปรแกรมส่งอีเมลของคุณทำงานตามเวลาที่กำหนด เช่น ทุกวันเวลา 8:00 น. คุณสามารถใช้ cron บนระบบปฏิบัติการ Linux ได้
  • สร้างไฟล์ Python เช่น send_email.py
  • เปิด crontab ด้วยคำสั่ง:

โค้ด: เลือกทั้งหมด

crontab -e
  • เพิ่มบรรทัดนี้เพื่อตั้งเวลารันสคริปต์ทุกวันตอน 8 โมงเช้า:

โค้ด: เลือกทั้งหมด

0 8 * * * /usr/bin/python3 /home/youruser/scripts/send_email.py >> /home/youruser/scripts/email.log 2>&1
คำอธิบาย:
  • 0 8 * * * = เวลา 08:00 ทุกวัน
  • /usr/bin/python3 = path ไปยัง Python (สามารถใช้ which python3 ตรวจสอบได้)
  • >> ... = บันทึก log เพื่อดูว่า script ทำงานหรือไม่
หากใช้ Windows สามารถใช้ Task Scheduler แทนได้

6. ประโยชน์ของการใช้ Python ส่งอีเมลอัตโนมัติ
  • ลดภาระงานที่ทำซ้ำ: ไม่ต้องเสียเวลากรอกข้อมูลและส่งอีเมลด้วยตนเองทุกวัน
  • ปรับแต่งอีเมลได้ง่าย: สามารถใช้ Template และ Data ส่วนบุคคลในการปรับข้อความ
  • รวมเข้ากับระบบอื่นได้ง่าย: เช่น รายงานจากระบบ ERP, แจ้งเตือนจากระบบ IoT, ระบบการจอง ฯลฯ
  • รองรับการแนบไฟล์: ส่งใบแจ้งหนี้ ใบเสนอราคา หรือเอกสารอื่น ๆ แนบไปกับอีเมล
7. คำแนะนำในการนำไปใช้จริง
  • ใช้ schedule, cron หรือ Workflow Automation เช่น Apache Airflow เพื่อกำหนดเวลาในการส่งอีเมล
  • ใช้ Template HTML สำหรับอีเมลที่ดูดีและเป็นมืออาชีพ
  • ใช้ SMTP Server ที่ปลอดภัย เช่น Gmail, SendGrid หรือ Amazon SES
  • หากต้องการความปลอดภัยสูงควรใช้ OAuth2 แทนการใส่รหัสผ่านตรง ๆ ในโค้ด
  • จัดการ Error และ Log การส่งทุกครั้ง เช่น บันทึกว่าผู้ใดได้รับอีเมลแล้วบ้าง
  • สำหรับอีเมลจำนวนมาก ใช้การส่งแบบ Batch หรือหน่วงเวลา (throttle) เพื่อหลีกเลี่ยงการถูกจัดเป็น Spam
สรุป
การส่งอีเมลอัตโนมัติด้วย Python เป็นเครื่องมือที่มีประโยชน์มาก โดยเฉพาะในยุคที่การทำงานอัตโนมัติเข้ามามีบทบาทในทุกอุตสาหกรรม ไม่ว่าจะเป็นธุรกิจขนาดเล็กหรือองค์กรขนาดใหญ่ เครื่องมืออย่าง Python สามารถช่วยลดเวลาการทำงาน เพิ่มความถูกต้อง และทำให้สามารถปรับแต่งระบบได้อย่างยืดหยุ่น, ลองเริ่มทำอะไรที่ไม่ซับซ้อน แล้วค่อยเปลี่ยนหรือต่อยอดให้ดีขื้นได้ เช่น ผูกกับฐานข้อมูล ระบบ ERP หรือ BI Tools เพื่อสร้างระบบแจ้งเตือนและรายงานอัตโนมัติเต็มรูปแบบ, ขอแนะนำให้ผู้อ่านลองฝึกสร้างโปรแกรมส่งอีเมลอัตโนมัติเล็ก ๆ แล้วค่อย ๆ พัฒนาไปสู่ระบบที่ตอบโจทย์ธุรกิจหรือองค์กรของคุณให้มากที่สุด

อ้างอิง
https://realpython.com/python-send-email
https://www.geeksforgeeks.org/how-to-send-automated-email-messages-in-python
https://docs.python.org/3/library/email.examples.html

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 2