Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ไคลเอนต์โปรโตคอล SMTP ใน Python (smtplib)

ไลบรารีมาตรฐานของ Python มีโมดูล 'smtplib' ซึ่งกำหนดอ็อบเจ็กต์เซสชันไคลเอนต์ SMTP ที่สามารถใช้ส่งอีเมลผ่านโปรแกรม Python ได้

เซิร์ฟเวอร์จดหมายเป็นแอปพลิเคชันที่จัดการและส่งอีเมลผ่านอินเทอร์เน็ต เซิร์ฟเวอร์จดหมายขาออกใช้งาน SMTP (Simple Mail Transfer Protocol) ซึ่งเป็นมาตรฐานอินเทอร์เน็ตสำหรับการส่งอีเมล

เซิร์ฟเวอร์จดหมายขาเข้า มี 2 แบบหลัก POP3 (Post Office Protocol) และ IMAP (Internet Message Access Protocol)

ฟังก์ชัน smtplib.SMTP()

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

host สตริงที่เป็นชื่อโฮสต์ระยะไกลที่จะเชื่อมต่อ
port หมายเลขที่ระบุพอร์ตที่จะเชื่อมต่อ โดยค่าเริ่มต้นใช้ smtplib.SMTP_PORT
local_hostname ใช้เป็น FQDN ของโฮสต์ท้องถิ่นในคำสั่ง HELO/EHLO
source_address อ็อบเจ็กต์ 2-tuple (host, port) ที่โซเก็ตจะผูก

มีเมธอดต่อไปนี้ที่รองรับการดำเนินการ SMTP:

connect() - เมธอดนี้สร้างการเชื่อมต่อกับโฮสต์บนพอร์ตที่กำหนด

login() - ฟังก์ชันนี้รับอาร์กิวเมนต์ username และ password เพื่อล็อกอินเข้าสู่เซิร์ฟเวอร์ SMTP

quit() - ฟังก์ชันนี้ยุติเซสชัน SMTP

data() - อาร์กิวเมนต์ 'message' ของฟังก์ชันนี้จะถูกส่งไปยังเซิร์ฟเวอร์

docmd() - ฟังก์ชันนี้ส่งคำสั่งและคืนค่ารหัสตอบกลับ

ehlo() - ฟังก์ชันนี้ระบุตัวตนของเซิร์ฟเวอร์

starttls() - ฟังก์ชันนี้เริ่มโหมด TLS

getreply() - ฟังก์ชันนี้รับการตอบกลับจากเซิร์ฟเวอร์ในรูปแบบรหัสตอบกลับ

putcmd() - ฟังก์ชันนี้ส่งคำสั่งไปยังเซิร์ฟเวอร์

send_message() - ฟังก์ชันนี้แปลงข้อความเป็นสตริงไบต์และส่งต่อไปยังการส่งเมล

sendmail() - คำสั่งนี้ดำเนินการธุรกรรมเมลทั้งหมด

อาร์กิวเมนต์คือ:

from_addr ที่อยู่ที่ส่งเมลนี้
to_addrs รายการที่อยู่ที่จะส่งเมลนี้ไป
msg ข้อความที่จะส่ง

โค้ดด้านล่างใช้เซิร์ฟเวอร์ SMTP ของ Gmail เพื่อส่งอีเมล อ็อบเจ็กต์ SMTP ใช้เซิร์ฟเวอร์ SMTP ของ Gmail ที่พอร์ต 587 คำสั่ง ehlo() ระบุตัวตนของเซิร์ฟเวอร์ เรายังเปิดใช้งาน Transport Layer Security สำหรับข้อความจดหมายขาออก

ต่อมา เรียกคำสั่ง login() โดยส่งข้อมูลประจำตัวเป็นอาร์กิวเมนต์ สุดท้าย ข้อความจดหมายถูกประกอบโดยต่อส่วนหัว (header) ในรูปแบบที่กำหนด และส่งโดยใช้เมธอด sendmail() อ็อบเจ็กต์ SMTP ถูกปิดหลังจากนั้น

import smtplib

content = "Hello World"
mail = smtplib.SMTP('smtp.gmail.com', 587)
mail.ehlo()
mail.starttls()
sender = 'pythonanytime@gmail.com'
recipient = 'mlathkar@gmail.com'
mail.login('pythonanytime@gmail.com', 'm15v5l61')
header = 'To:' + recipient + '\n' + 'From:' + sender + '\n' + 'subject:testmail\n'
content = header + content
mail.sendmail(sender, recipient, content)
mail.close()

ก่อนรันสคริปต์ข้างต้น ตรวจสอบว่าบัญชี Gmail ของผู้ส่งได้รับอนุญาตให้เข้าถึง 'less secure apps':

https://myaccount.google.com/lesssecureapps

ตั้งค่าปุ่ม toggle ที่แสดงให้เป็น ON

ไคลเอนต์โปรโตคอล SMTP ใน Python (smtplib)

รันสคริปต์ข้างต้นหลังจากตั้งค่าดังกล่าว ข้อความควรจะถูกส่งไปยังกล่องจดหมายของผู้รับ