วิธีส่งอีเมลด้วย Python
Python เป็นภาษาที่มีคุณสมบัติมากมาย สามารถใช้สำหรับการวิเคราะห์ข้อมูล การพัฒนาเว็บ และอื่นๆ อีกมากมาย นั่นไม่ใช่ทั้งหมด Python มีฟีเจอร์แฝง: คุณสามารถใช้มันส่งอีเมลได้ นี่หมายความว่าคุณสามารถส่งอีเมลรีเซ็ตรหัสผ่าน อีเมลลืมรหัสผ่าน การแจ้งเตือนผู้ใช้ และอีเมลอื่นๆ ที่คุณต้องการส่ง จากโปรแกรม Python
ในคู่มือนี้ เราจะอภิบายวิธีส่งอีเมลด้วย Python เราจะเดินผ่านไลบรารี email และ smtplib ว่าทำงานอย่างไร และเขียนโปรแกรมตัวอย่างเพื่อส่งอีเมล
โดยไม่ล่าช้า มาเริ่มกันเลย!
การส่งอีเมลด้วย Python
เมื่อคุณส่งอีเมลจากโปรแกรมคอมพิวเตอร์ โปรแกรมของคุณจะส่งข้อความโดยใช้โปรโตคอลที่เรียกว่า Simple Mail Transfer Protocol (SMTP) โปรโตคอลนี้ถูกใช้โดยบริการอีเมลและไคลเอนต์ทั่วโลกเพื่อส่งข้อความ
เพื่อส่งอีเมลจากโปรแกรมคอมพิวเตอร์ คุณจะต้องมีเซิร์ฟเวอร์ SMTP คุณสามารถตั้งค่าเองได้ แต่คุณไม่จำเป็นต้องทำเสมอไป บริการอย่าง Gmail และ Outlook 提供บริการ SMTP ดังนั้นคุณสามารถใช้บัญชีอีเมลที่มีอยู่เพื่อส่งอีเมล
สำหรับคู่มือนี้ เราจะสมมติว่าคุณส่งอีเมลจากเซิร์ฟเวอร์ SMTP ของ Gmail คุณสามารถดูข้อมูลเพิ่มเติมเกี่ยวกับเซิร์ฟเวอร์ SMTP ของพวกเขาในเอกสารอย่างเป็นทางการของ Gmail หากต้องการทราบว่าผู้ให้บริการอีเมลของคุณรองรับ SMTP หรือไม่ ให้ค้นหาออนไลน์หา '[ชื่อผู้ให้บริการของคุณ] SMTP credentials'
เรามี 3 ขั้นตอนที่ต้องทำตามเพื่อส่งอีเมล:
- กำหนดค่าการเชื่อมต่อ SMTP
- สร้างออบเจ็กต์ข้อความ
- ส่งข้อความผ่าน SMTP
การกำหนดค่าการเชื่อมต่อ SMTP
เพื่อเริ่มต้น มาตั้งค่าการเชื่อมต่อ SMTP ของเรา เราสามารถทำได้โดยใช้ไลบรารีชื่อ smtplib ซึ่งให้โค้ดทั้งหมดที่เราต้องการเพื่อจัดการการเชื่อมต่อ ขอบคุณไลบรารีนี้ ใช้เพียงไม่กี่บรรทัดของโค้ดก็ส่งอีเมลได้
เริ่มต้นด้วยการนำเข้าไลบรารี smtplib เข้าโค้ดของคุณ:
import smtplib
ตอนนี้เราต้องตั้งค่าตัวแปรที่เก็บข้อมูลประจำตัวสำหรับเซิร์ฟเวอร์ SMTP ของเรา การเก็บค่าเหล่านี้ในตัวแปรจะช่วยให้โค้ดของเราอ่านง่ายขึ้น นี่คือตัวแปรที่เราจะใช้:
sender = 'test@careerkarma.com' password = '123456' server = 'smtp.gmail.com' port = 465
โค้ดนี้มีการกำหนดค่าทั้งหมดที่เราต้องการเพื่อสร้างการเชื่อมต่อ SMTP ตอนนี้ที่เราตั้งค่าแล้ว เราสามารถล็อกอินเข้าสู่เซิร์ฟเวอร์ SMTP ของเราได้:
server = smtplib.SMTP_SSL(server, port) server.login(sender, password)
โค้ดของเราสร้างการเชื่อมต่อ SSL ไปยังเซิร์ฟเวอร์ SMTP ของเรา นี่หมายความว่าเราใช้ Secure Socket Layer (SSL) เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ของเรา SSL มีความปลอดภัยมากกว่าการเชื่อมต่อแบบดั้งเดิม และเป็นมาตรฐานบนเซิร์ฟเวอร์ SMTP
การเชื่อมต่อ SMTP ของเราตอนนี้พร้อมแล้ว!
สร้างออบเจ็กต์ข้อความ
โค้ดของเรายังไม่ทำอะไรมาก: มันแน่นอนว่าไม่ได้ส่งอีเมล นั่นเพราะเรายังไม่ได้สร้างออบเจ็กต์ข้อความ มาทำกันโดยใช้ไลบรารี email แม้คุณจะใช้ smtplib สร้างออบเจ็กต์ข้อความได้ ไลบรารี email ก็กระชับกว่า
มาเริ่มต้นด้วยการนำเข้าแพ็กเกจ email ที่จำเป็น:
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText
ด้วยไลบรารีเหล่านี้นำเข้าแล้ว เราสามารถสร้างออบเจ็กต์ข้อความของเราได้:
message = MIMEMultipart() body = 'This is an email sent from Python!' message['From'] = sender message['To'] = 'test@careerkarma.com' message['Subject'] = 'This is a test email' message.attach(MIMEText(body, 'plain'))
เราเริ่มต้นด้วยการ инициализация ออบเจ็กต์ชื่อ 'message' ออบเจ็กต์นี้อ้างอิงคลาส MIMEMultipart จากไลบรารี email เราจึงระบุเนื้อหาของอีเมลและผู้ส่ง ผู้รับ และหัวข้อ
บรรทัดสุดท้ายของโค้ดแนบเนื้อหาของข้อความของเราเข้ากับอีเมล
ส่งข้อความ
ตอนนี้สิ่งที่เหลือคือส่งข้อความของเรา:
server.send_message(message)
เมื่อเรารันโค้ดทั้งหมดร่วมกัน อีเมลจะถูกส่ง! อีเมลที่มีหัวข้อ 'This is a test email' จะถูกส่งจาก test@careerkarma.com ไปยัง test@careerkarma.com
การอ่านเทมเพลตจากไฟล์
เนื้อหาอีเมลของเรายาวแค่บรรทัดเดียว นี่หมายความว่ามีประโยชน์กว่าที่จะเขียนเนื้อหาอีเมลภายใน Python โดยตรง อีเมลส่วนใหญ่ยาวกว่านี้ จึงดีกว่าที่จะสร้างเทมเพลตที่เก็บข้อความสำหรับอีเมลเฉพาะ
เราจะเริ่มด้วยการสร้างไฟล์ชื่อ email.txt และวางเนื้อหาต่อไปนี้:
Hello ${NAME},
This is a test email!
Thanks,
Career Karma
เทมเพลตนี้มีตัวแปรชื่อ "NAME" ซึ่งอยู่ภายในวงเล็บปีกกา ({}) และนำหน้าด้วยเครื่องหมายดอลลาร์ ($) ตัวแปรนี้จะถูกแทนที่ด้วยชื่อผู้รับในภายหลังในโค้ดของเรา
ตอนนี้เราจะต้องอ่านเทมเพลตนี้เข้าโค้ดของเรา เราสามารถทำได้โดยการสร้างคลาสชื่อ read_email ที่ใช้เมธอด open() เพื่ออ่านไฟล์ของเรา
เราจะนำเข้า Template object จากไลบรารี string เราจะใช้ object นี้สร้างออบเจ็กต์ที่อ่านได้โดยอีเมลของเรา วางบรรทัดโค้ดต่อไปนี้ที่ด้านบนของโปรแกรม Python ของคุณ:
from string import Template
ใต้คำสั่ง import ทั้งหมด วางโค้ดนี้:
def read_email():
with open('email.txt', 'r') as file:
contents = file.read()
return Template(contents)
ฟังก์ชันนี้จะอ่านไฟล์ชื่อ "email.txt" เข้าตัวแปร "contents" ค่าของมันจะถูกแปลงเป็น Template object โดยใช้เมธอด Template จากไลบรารี "string" คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการอ่านไฟล์ในบทช่วยสอน Python read file ของเรา
เปลี่ยนบรรทัดโค้ดต่อไปนี้ในโปรแกรมของคุณ:
body = 'This is an email sent from Python!'
ให้ใช้โค้ดนี้แทน:
email_content = read_email() body = email_content.substitute(NAME="Test")
โค้ดนี้เรียกฟังก์ชัน read_email() ในโค้ดของเราเพื่ออ่านเนื้อหาของไฟล์ "email.txt" จากนั้นค่าของ NAME ภายในเทมเพลตอีเมลของเราถูกแทนที่ด้วยค่า "Test" รวมกันโค้ดของเราจะมีลักษณะนี้:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from string import Template
def read_email():
with open('email.txt', 'r') as file:
contents = file.read()
return Template(contents)
sender = 'test@careerkarma.com'
password = '123456'
server = 'smtp.gmail.com'
port = 465
server = smtplib.SMTP_SSL(server, port)
server.login(sender, password)
message = MIMEMultipart()
email_content = read_email()
body = email_content.substitute(NAME="Test")
message['From'] = sender
message['To'] = 'test@careerkarma.com'
message['Subject'] = 'This is a test email'
message.attach(MIMEText(body, 'plain'))
server.send_message(message)
เมื่อคุณรันโปรแกรมนี้ โดยแทนที่ข้อมูลประจำตัวเซิร์ฟเวอร์ SMTP ของคุณ อีเมลจะถูกส่ง คุณเพิ่งเขียนโปรแกรมส่งอีเมลเสร็จแล้ว
สรุป
การส่งอีเมลใน Python ไม่ได้ต้องยาก ถ้าไม่ใช้เทมเพลต การส่งอีเมลใช้เพียงไม่กี่บรรทัดของโค้ด โมดูล email และ smtplib ทำหน้าที่หนักส่วนใหญ่ ด้วย ذلك คุณสามารถใช้โมดูล email อย่างกว้างขวางเพื่อสร้างเทมเพลตสำหรับอีเมลของคุณที่สามารถแทนที่ค่าได้
คุณพร้อมสำหรับความท้าทายไหม? เปลี่ยนโปรแกรมจากข้างต้นเพื่อรองรับการส่งอีเมลให้หลายผู้รับ Hint: คุณจะต้องการใช้ลูป for เพื่อส่งอีเมลเหล่านี้
ตอนนี้คุณพร้อมที่จะเริ่มส่งอีเมลใน Python อย่างมืออาชีพแล้ว!