一、SMTP協議簡介
SMTP是簡單郵件傳輸協議(Simple Mail Transfer Protocol)的縮寫,它是一種用於電子郵件傳輸的標準協議。SMTP伺服器用於將郵件從發件人傳遞到收件人的伺服器。郵件客戶端通過SMTP伺服器發送電子郵件,而收件人通過POP3或IMAP伺服器接收郵件。
SMTP伺服器使用TCP協議的25號埠。當需要發送電子郵件時,郵件客戶端通過SMTP開始會話,使用SMTP命令來進行身份驗證和郵件的發送。
Python的smtplib模塊是一個專門用於郵件發送的模塊,可以在Python中實現SMTP協議的功能。
二、SMTP郵件發送流程
SMTP郵件發送流程包括以下幾個步驟:
- 連接SMTP伺服器
- 發送HELO命令
- 發送AUTH命令進行身份驗證(可選)
- 發送MAIL FROM命令指定發件人
- 發送RCPT TO命令指定收件人
- 發送DATA命令開始郵件正文傳輸
- 傳輸郵件正文
- 發送QUIT命令關閉連接
其中,第3步使用AUTH PLAIN命令進行身份驗證,需要使用Base64編碼的用戶名和密碼。
三、Python SMTP郵件發送示例代碼
import smtplib from email.mime.text import MIMEText from email.header import Header # 發件人郵箱 sender = 'example@163.com' # 收件人郵箱 receiver = 'example@qq.com' # SMTP伺服器地址 smtp_server = 'smtp.163.com' # 發件人郵箱的用戶名和密碼 username = 'example@163.com' password = 'password' # 郵件正文 message = MIMEText('Hello, world!', 'plain', 'utf-8') message['From'] = Header('example@163.com', 'utf-8') message['To'] = Header('example@qq.com', 'utf-8') message['Subject'] = Header('Python SMTP郵件發送示例', 'utf-8') # 連接SMTP伺服器 smtp_obj = smtplib.SMTP(smtp_server, 25) # 發送HELO命令 smtp_obj.ehlo() # 開始TLS加密(可選) smtp_obj.starttls() # 發送AUTH命令進行身份驗證 smtp_obj.login(username, password) # 發送MAIL FROM命令指定發件人 smtp_obj.sendmail(sender, [receiver], message.as_string()) # 發送QUIT命令關閉連接 smtp_obj.quit()
四、使用SSL加密連接SMTP伺服器
SMTP伺服器也支持使用SSL加密的連接,以保護郵箱賬號信息和郵件內容的安全。在Python中,可以使用smtplib.SMTP_SSL()方法來創建SSL加密的SMTP連接。
以下是使用SSL加密的SMTP郵件發送示例代碼:
import smtplib from email.mime.text import MIMEText from email.header import Header # 發件人郵箱 sender = 'example@163.com' # 收件人郵箱 receiver = 'example@qq.com' # SMTP SSL伺服器地址 smtp_server = 'smtp.163.com' # 發件人郵箱的用戶名和密碼 username = 'example@163.com' password = 'password' # 郵件正文 message = MIMEText('Hello, world!', 'plain', 'utf-8') message['From'] = Header('example@163.com', 'utf-8') message['To'] = Header('example@qq.com', 'utf-8') message['Subject'] = Header('Python SMTP郵件發送示例', 'utf-8') # 連接SMTP SSL伺服器 smtp_obj = smtplib.SMTP_SSL(smtp_server, 465) # 發送HELO命令 smtp_obj.ehlo() # 發送AUTH命令進行身份驗證 smtp_obj.login(username, password) # 發送MAIL FROM命令指定發件人 smtp_obj.sendmail(sender, [receiver], message.as_string()) # 發送QUIT命令關閉連接 smtp_obj.quit()
五、總結
本文介紹了SMTP協議的基本原理和Python中使用smtplib模塊進行郵件發送的方法,包括普通SMTP連接和使用SSL加密的連接。通過代碼示例,讀者可以更加深入地理解SMTP協議,快速上手Python的郵件發送功能。
原創文章,作者:SWVDV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/315715.html