Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ซอฟต์แวร์ >> อีเมล

วิธีส่งอีเมลอัตโนมัติด้วย Python

ในขณะที่ไคลเอนต์อีเมลเชิงพาณิชย์เสนอความสะดวกของ GUI ที่ใช้งานง่าย พวกเขามักขาดความยืดหยุ่นและความสามารถในการปรับแต่งที่นักพัฒนาหรือผู้สร้างเนื้อหาหลายคนต้องการสำหรับความต้องการอีเมลของพวกเขา

ไม่ว่าจะเป็นการส่งอีเมลขอบคุณให้ผู้สมัครสมาชิกใหม่บนช่องโซเชียลมีเดีย หรือเพิ่มฟังก์ชันอีเมลให้โครงการล่าสุดของคุณ ความสามารถในการส่งข้อความอัตโนมัติโดยใช้ SMTP ใน Python เป็นสิ่งที่จะมาถึงประโยชน์แน่นอน

อ่านต่อเพื่อดูว่าคุณสามารถทำให้สคริปต์ Python ส่งอีเมลทำงานบนเครื่องของคุณได้อย่างไรวันนี้

SMTP คืออะไร?

อย่างง่ายๆ SMTP หรือ Simple Mail Transfer Protocol คือโปรโตคอลการสื่อสารสำหรับเซิร์ฟเวอร์จดหมายเพื่อส่งอีเมลผ่านอินเทอร์เน็ต

มันเป็นส่วนสำคัญของชั้นแอปพลิเคชันของ TCP/IP suite ซึ่งเป็นชุดโปรโตคอลที่ใช้สำหรับการสื่อสารผ่านอินเทอร์เน็ตหรือเครือข่ายคล้ายๆ กัน ในเครือข่ายที่มีการใช้ SMTP กระบวนการที่เรียกว่า store and forward ช่วยย้ายจดหมายข้ามเครือข่าย

ที่แต่ละปลายทาง ซอฟต์แวร์ที่เรียกว่า Mail Transfer Agent (MTA) ใช้ store and forward เพื่ออำนวยความสะดวกการสื่อสารระหว่างเซิร์ฟเวอร์ SMTP ที่เข้าร่วม บทบาทหลักของ SMTP จึงคือการกำหนดว่าจดหมายเคลื่อนที่จากจุดหนึ่งไปยังอีกจุดหนึ่งในเครือข่ายอย่างไรและที่ไหน

เริ่มต้นใช้งาน

คุณต้องมีบัญชีอีเมลเพื่อใช้ส่งอีเมลด้วยโปรแกรมนี้ เนื่องจากเราจะใช้บริการ SMTP ของไคลเอนต์อีเมลเพื่อส่งอีเมล สำหรับบทช่วยสอนนี้ เราจะใช้ Gmail

คุณยังสามารถใช้เซิร์ฟเวอร์ SMTP แบบ local สำหรับการดีบั๊กเพื่อส่งอีเมลทดสอบ แต่ตอนนี้เราจะใช้บัญชีอีเมลเพื่อส่งอีเมลเพราะมันเข้าใจง่ายกว่า

เป็นไปได้ที่จะใช้บัญชี Gmail ที่มีอยู่แล้ว แต่เมื่อคุณเล่นกับโปรแกรม มันอาจเต็มไปด้วยอีเมลทดสอบเร็วๆ นี้ นี่คือเหตุผลที่เราแนะนำให้สร้างบัญชี 'throwaway' เพื่อวัตถุประสงค์การทดสอบ

ตอนนี้ เปิดใช้งานตัวเลือกให้แอปที่ปลอดภัยน้อยกว่าเข้าถึงบัญชี Gmail ของคุณได้ นี่เป็นอีกเหตุผลที่ควรใช้ throwaway email เนื่องจากไม่แนะนำให้เล่นกับการตั้งค่าความเป็นส่วนตัวของอีเมลหลัก

เขียนอีเมลใน Python

Python 3 มาพร้อมกับโมดูลที่ชื่อ smtplib (สั้นสำหรับ smtp library) ซึ่งสามารถใช้ทำงานกับเซิร์ฟเวอร์ SMTP ได้

เหมือนโมดูล Python อื่นๆ ขั้นตอนแรกคือ import smtplib

import smtplib

การเริ่มต้นออบเจ็กต์ SMTP

ตอนนี้คุณสามารถใช้ smtplib สร้างออบเจ็กต์ SMTP ซึ่งจะให้คุณฟังก์ชันส่วนใหญ่ของไคลเอนต์อีเมลแบบดั้งเดิม อย่างไรก็ตาม ฟังก์ชันของออบเจ็กต์ SMTP สามารถใช้ได้เฉพาะผ่าน instance methods ดังนั้นขั้นตอนต่อไปโดยธรรมชาติก็คือการประกาศ instance ของออบเจ็กต์

mySMTP = smtplib.SMTP("smtp.google.com") 

สิ่งนี้กำหนดค่าออบเจ็กต์ SMTP ให้ส่งอีเมลออกไปโดยใช้เซิร์ฟเวอร์ SMTP ของ Google

หลังจากนี้ เราระบุอีเมลผู้ส่งและผู้รับ นี่คือที่ที่บัญชี Gmail ที่คุณสร้างไว้ก่อนหน้านี้มีประโยชน์

emailSender = “senderMail@sender.com”
myThroaway = "myEmail@gmail.com"
emailRecipients = [myThroaway]

สิ่งหนึ่งที่ต้องจดจำคือ รายการผู้รับจริงๆ แล้วเป็นอาร์เรย์ ซึ่งหมายความว่ามันถูกออกแบบมาเพื่อเก็บค่า non-atomic ดังนั้นคุณสามารถระบุ mailing list ทั้งหมดในฟิลด์นี้ได้!

การเขียนข้อความ

ส่วนที่ตรงไปตรงมาที่สุดของกระบวนการ ที่นี่คุณต้องใส่ค่าที่คุณปกติจะเพิ่มเมื่อเขียนอีเมลใหม่ รวมถึง:

  • รายละเอียดผู้ส่ง
  • รายละเอียดผู้รับ
  • เรื่อง
  • เนื้อหาข้อความ

ฟิลด์เหล่านี้ถูกรวมเข้าด้วยกันภายในเครื่องหมายอัญประกาศสามตัว และแบ่งแยกดังนี้:

newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""

การส่งอีเมล

สุดท้ายเราสามารถใช้คำสั่ง sendmail เพื่อส่งจดหมายจากเซิร์ฟเวอร์ SMTP ของคุณไปยังเซิร์ฟเวอร์ของผู้รับ

mySMTP.sendmail(emailSender, emailRecipients, newEmail)

ตอนนี้เหลือขั้นตอนสุดท้ายหนึ่งขั้นตอน: จัดระเบียบโค้ดใหม่เพื่อป้องกันการแครชของโปรแกรมที่คาดการณ์ไว้

การแก้ไขปัญหาโปรแกรมอีเมล Python ของคุณ

บางครั้ง เซิร์ฟเวอร์ SMTP ของคุณอาจล้มเหลวในการสร้างการเชื่อมต่อกับของผู้รับ หรืออาจมีปัญหากับการส่งอีเมลจากพอร์ต SMTP หนึ่งไปอีกพอร์ต ในกรณีเช่นนั้น โปรแกรมของคุณอาจแครชโดยไม่คาดคิด

เพื่อคำนึงถึงความเป็นไปได้เช่นนี้ คุณสามารถใช้บล็อก try-except และวางคำสั่งที่อาจเกิดข้อผิดพลาดไว้ในบล็อก try โปรแกรมทั้งหมดของคุณ พร้อมกับบล็อก try-except ควรมีลักษณะประมาณนี้:

import smtplib
emailSender = “senderMail@sender.com”
myThroaway = ‘my_email@gmail.com’
emailRecipients = [myThroaway]
newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""
try:
smtpObj = smtplib.SMTP(‘smtp.gmail.com’)
mySMTP.sendmail(emailSender, emailRecipients, newEmail)
print (“Email sent successfully!”)
except SMTPException:
print ("Error: There was an error in sending your email.")

การรักษาความปลอดภัยอีเมลของคุณ

หากคุณตั้งใจจะใช้ Python ในสถานการณ์จริงเพื่อส่งอีเมล สำคัญที่จะต้องแน่ใจว่าการสื่อสารปลอดภัยทั้งสองด้าน

การใช้เซิร์ฟเวอร์ SMTP ธรรมดากับพอร์ตเริ่มต้นไม่ได้ให้เลเยอร์การเข้ารหัสใดๆ กับการสื่อสาร หมายความว่าหากบุคคลที่สามฟังอยู่ในเครือข่ายของคุณ มันสามารถเข้าถึงข้อมูลประจำตัวการล็อกอินและข้อมูลในอีเมลของคุณได้

วิธีหนึ่งในการแก้ปัญหานี้คือการใช้โปรโตคอล TLS (Transport Layer Security) เพื่อเข้ารหัสการสื่อสารของคุณ นี่คือโปรโตคอลเดียวกันที่ไคลเอนต์อีเมลหลักอย่าง Gmail และ Outlook ใช้เพื่อให้แน่ใจว่าอีเมลของคุณไม่ตกมือคนอื่น

วิธีส่งอีเมลอัตโนมัติด้วย Python

เพื่อทำเช่นนี้ เราต้องทำการเปลี่ยนแปลงเล็กน้อยในโปรแกรมที่เราสร้างไว้ก่อนหน้านี้

ขั้นตอนแรก當然คือ import ไลบรารี ssl พร้อมกับ smtplib ไลบรารี ssl ให้คุณความสามารถในการสร้าง SSL context ที่ปลอดภัยและสื่อสารผ่านเครือข่ายที่เข้ารหัสโดยการเชื่อมต่อกับพอร์ตเฉพาะที่ทั้งสองปลายทาง

SSL context ที่ปลอดภัยไม่ใช่อะไรมากกว่าการรวบรวมของ ciphers, protocol versions, trusted certificates, TLS options และ TLS extensions

ตามมา เราสามารถระบุพอร์ต TLS และเพิ่มฟังก์ชัน ssl ไลบรารี เพื่อสร้าง emailer ที่ปลอดภัย

โค้ดพร้อมการเปลี่ยนแปลงทั้งหมด มีลักษณะประมาณนี้:

import smtplib, ssl
smtpServer = "smtp.gmail.com"
port = 587
myEmail = "my_email@gmail.com"
password = "my_password"
#email and password can also be user input fields
context = ssl.create_default_context()
newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""
try:
server = smtplib.SMTP(smtpServer,port)
server.starttls(context=context)
server.login(newEmail, password)
except Exception as e:
print("the email could not be sent.")
finally:
server.quit()

เหมือนเดิม คุณควรสร้างและใช้ instance SMTP ในบล็อก try-except เพื่อป้องกันการแครชของโปรแกรมที่เกิดขึ้นอย่างกะทันหัน

สิ่งที่คุณสามารถทำได้กับสคริปต์ Python นี้

ตอนนี้คุณได้เรียนรู้ทักษะที่เก๋และมีประโยชน์อย่างน่าประหลาดใจในการทำอีเมลอัตโนมัติด้วยโค้ด คุณสามารถนำไปประยุกต์ใช้กับแพลตฟอร์มใดๆ ที่ต้องการส่งอีเมลไปยัง mailing list ที่หลากหลาย

ตั้งแต่ใช้บนเว็บไซต์ส่วนตัวเพื่อส่งอีเมลยืนยันอัตโนมัติ ไปจนถึงใช้ส่งการ์ดคริสต์มาสหรือเชิญชวนให้ครอบครัวและเพื่อน การใช้งานของสคริปต์ Python ขนาดเล็กนี้ จำกัดเพียงแค่ความคิดสร้างสรรค์ของคุณเอง

นอกจากนี้ นี่เป็นเพียงหนึ่งในหลายสิ่งที่เก๋ๆ ที่คุณสามารถทำได้กับ Python ด้วยการสนับสนุนนักพัฒนาทุกที่และ syntax ที่เรียนรู้ง่าย การเรียนทักษะ Python ไม่เคยง่ายมาก่อน

เพื่อต่อเนื่องในการสร้างสิ่งที่เก๋ๆ ด้วยโค้ด ดูคู่มือของเราเกี่ยวกับวิธีสร้าง Telegram bot ของคุณเองด้วย Python 3!