อีกหนึ่่งเทคนิคที่น่าสนใจสำหรับมือใหม่ หัดเขียน Python แล้วอยากเอาไปงานจริง ๆ การเอาไปช่วยทำโปรแกรมในการส่งอีเมลอัตโนมัติ ที่เปลี่ยนจากงานเดิม ๆ ซ้ำ ๆ เอา Python มาทำให้มันง่ายขึ้น กับวิธีการส่งจากตัวอย่างง่าย ๆ ด้วย Gmail นั่นเอง ก่อนอื่นการจะใช้ Gmail ในการส่งเราจะต้องรู้จักกับ Gmail SMTP ก่อน โดย Gmail SMTP (Simple Mail Transfer Protocol) มันคือ โปรโตคอลหรือวิธีการที่ Google ใช้เพื่อให้ผู้ใช้สามารถส่งอีเมลผ่านบัญชี Gmail จากโปรแกรมหรือแอปพลิเคชันภายนอก เช่น Python, Microsoft Outlook, และโปรแกรมส่งอีเมลอื่น ๆ โดยไม่ต้องเข้าถึง Gmail ผ่านเว็บเบราว์เซอร์โดยตรง แล้วส่วนที่จะใช้ Python ในการส่งเราก็จะต้องรู้จักกกับ smtplib โดยมันคือ ตัวช่วยที่มากับ Python ที่เราติดตั้งอยู่แล้ว เราสามารถใช้ Lib ตัวนี้เชื่อมต่อกับเซิร์ฟเวอร์ SMTP (Simple Mail Transfer Protocol) เพื่อส่งอีเมลโดยตรงจากโปรแกรม Python โดยไม่ต้องใช้เว็บเบราว์เซอร์ ได้เลย และแน่นอนคือมันรองรับ Gmail SMTP ด้วย
สิ่งที่ต้องเตรียมก่อนเริ่ม
- บัญชี Gmail เราจะต้องมี account ของ Gmail ก่อนเพื่อจะส่งอีเมลได้
- การเปิดใช้งานการเข้าถึง SMTP ของบัญชี Gmail (เดี๋ยวทำตาม step ด้านล่างได้เลย)
- Python ที่ติดตั้งพร้อม smtplib (ซึ่งมากับ Python อยู่แล้ว)
ขั้นตอนการตั้งค่าบัญชี Gmail สำหรับการใช้งาน SMTP
- เปิดการใช้งาน 2-Step Verification โดยไปที่หน้า https://myaccount.google.com/security และเปิดการยืนยันแบบสองขั้นตอน (2-Step Verification)
- สร้าง App Password โดยเมื่อเปิดการยืนยันสองขั้นตอนแล้ว ให้สร้างรหัสผ่านสำหรับแอปพลิเคชันโดยเฉพาะ (App Password) เพื่อใช้ในการเข้าถึง SMTP
- โดยรหัสนี้จะถูกใช้แทนรหัสผ่านปกติของ Gmail ใน Python
โค้ดการใช้งาน Gmail SMTP กับ Python
หลังจากนั้นเราก็สามารถนำค่า gmail_user และ app_password มาใช้กับโค้ด Python ได้ตาม ตัวอย่างด้านล่างนี้ โดยข้อมูลที่เอามาตอนเขียนจริงต้องเก็บให้ปลอดภัยกว่านี้ อย่าแปะไว้ในโค้ดนะ เช่น เอาไปเก็บไว้ในไฟล์ .env แยกต่างหากและใช้ไลบรารีอย่าง python-dotenv เพื่อดึงค่ามา แต่ในตัวอย่างนี้เพื่อความสะดวก แอดจะเขียน gmail_user และ app_password ไว้ในโค้ดโดยตรง เพื่อให้เข้าใจส่วนการตั้งค่าของผู้ส่งให้เข้าใจง่าย ๆ
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# ข้อมูลการตั้งค่าของผู้ส่ง
gmail_user = 'your-email@gmail.com' # ใส่ที่อยู่อีเมลของคุณ
app_password = 'your-app-password' # ใส่ App Password ที่สร้างไว้
# ข้อมูลของผู้รับและเนื้อหาอีเมล
to = 'recipient-email@example.com' # ใส่อีเมลผู้รับ
subject = 'ทดสอบการส่งอีเมลด้วย Python' # ใส่หัวเรื่อง
body = 'สวัสดีครับ นี่เป็นอีเมลทดสอบที่ส่งด้วย Python!' # ใส่เนื้อหาของอีเมล
# การสร้างอีเมล
msg = MIMEMultipart()
msg['From'] = gmail_user
msg['To'] = to
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))
try:
# การเชื่อมต่อกับ SMTP ของ Gmail
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls() # เปิดการเข้ารหัส TLS
server.login(gmail_user, app_password) # เข้าสู่ระบบด้วยอีเมลและรหัสผ่านแอป
text = msg.as_string()
# ส่งอีเมล
server.sendmail(gmail_user, to, text)
print("อีเมลถูกส่งสำเร็จ!")
except Exception as e:
print(f"เกิดข้อผิดพลาด: {e}")
finally:
# ปิดการเชื่อมต่อ
server.quit()
Pythonอย่างในโค้ดจะเริ่มจากการกำหนดข้อมูลของผู้ส่งและผู้รับ ตั้งค่าให้เรียบร้อย จากนั้นใช้ IMEMultipart และ MIMEText เพื่อสร้างโครงสร้างและเนื้อหาของอีเมล โดยมีหัวข้อ (subject) และข้อความ (body) ที่จะส่งไปยังผู้รับ หลังจากเตรียมข้อมูลเรียบร้อย ระบบจะเชื่อมต่อกับเซิร์ฟเวอร์ Gmail SMTP (smtp.gmail.com) บนพอร์ต 587 ซึ่งรองรับการเข้ารหัสแบบ TLS เพื่อความปลอดภัย จากนั้นใช้คำสั่ง server.sendmail() ในการส่งอีเมลไปยังผู้รับที่กำหนดไว้ เมื่อส่งอีเมลสำเร็จ จะปิดการเชื่อมต่อด้วย server.quit() เพื่อสิ้นสุดการทำงาน
แค่นี้เราก็จะโปรแกรมที่ส่งอีเมลอัตโนมัติได้แล้ว ! ซึ่งที่เหลือใครอยากปรับ Logic ยังไง? เพิ่ม flow ส่วนไหนก็สามารถลุยต่อได้เลย แอดหวังว่าบทความแบบไว ๆ นี้จะช่วยจุดประกายไอเดีย และช่วยให้เพื่อน ๆ ทำงาน ลดงานได้มากขึ้นนะครับ 🧡