การส่งอีเมลด้วย Python และ SMTP สำหรับมือใหม่: อัตโนมัติ + แนบไฟล์ + Schedule

แชร์ความรู้ภาษา Python ไพทอน การเขียนโปรแกรมภาษาไพทอน

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

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

การส่งอีเมลด้วย Python และ SMTP สำหรับมือใหม่: อัตโนมัติ + แนบไฟล์ + Schedule

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

การส่งอีเมลเป็นกระบวนการที่เกิดขึ้นอย่างต่อเนื่องในหลายบริบทของชีวิตประจำวันและการทำงาน ไม่ว่าจะเป็นการส่งรายงานประจำวันให้หัวหน้า การแจ้งเตือนลูกค้าเกี่ยวกับการชำระเงิน หรือการยืนยันการสั่งซื้อสินค้า การส่งอีเมลอัตโนมัติ (Automate Email) ด้วย Python จึงเป็นเครื่องมือที่ช่วยลดเวลาการทำงานที่ต้องทำซ้ำ ๆ และเพิ่มประสิทธิภาพการดำเนินงานอย่างมาก ในบทความนี้เราจะอธิบายวิธีใช้งาน Python เพื่อทำ Automation การส่งอีเมล โดยใช้โมดูลมาตรฐาน เช่น smtplib และ email รวมถึงแนะนำการใช้งานร่วมกับ SMTP Server เช่น Gmail พร้อมยกตัวอย่างกรณีใช้งานจริง ประโยชน์ที่ได้รับ และคำแนะนำในการนำไปประยุกต์ใช้
Email sending.png
Email sending.png (162.36 KiB) Viewed 784 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
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

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

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