一、SMTP 發郵件簡介
簡單郵件傳輸協議(Simple Mail Transfer Protocol,SMTP)是互聯網標準協議之一,用於電子郵件的傳輸。該協議定義了電子郵件的傳輸方式以及客戶端與服務器之間的通信規範。
在 Python 中使用 SMTP 協議向他人發起郵件的方式步驟大體如下:
1.連接 SMTP 服務器
2.發送 HELO 命令,告訴 SMTP 服務器你要發送郵件
3.如果服務器支持 TLS,則啟動 TLS
4.驗證登錄賬戶密碼(服務器常常需要先驗證登錄賬戶密碼用戶身份)
5.設置發件人、收件人、主題和正文
6.發送郵件
7.關閉 SMTP 連接
二、選擇郵件客戶端
Python 內置了 smtplib 模塊,可以通過 Python 自帶的方式實現發送郵件。
代碼示例:
import smtplib from email.mime.text import MIMEText from email.header import Header # 設置服務器所需信息 # 163郵箱服務器地址 mail_host = 'smtp.163.com' # 163用戶名 mail_user = 'xxx@163.com' # 密碼(部分郵箱為授權碼) mail_pass = 'xxxxxx' # 郵件發送方郵箱地址 sender = 'xxx@163.com' # 郵件接受方郵箱地址 receivers = ['xxx@qq.com'] # 設置email信息 # 郵件內容設置 message = MIMEText('Python 郵件發送測試...', 'plain', 'utf-8') # 郵件主題 message['Subject'] = Header('Python SMTP 發郵件測試', 'utf-8') # 發送方信息 message['From'] = Header('發件人名字', 'utf-8') # 接受方信息 message['To'] = Header('測試', 'utf-8') # 連接並登錄服務器 smtpObj = smtplib.SMTP() # 連接到服務器 smtpObj.connect(mail_host, 25) # 打印出和SMTP服務器交互的所有信息 smtpObj.set_debuglevel(1) # 登錄到服務器 smtpObj.login(mail_user,mail_pass) # 發送郵件 smtpObj.sendmail( sender, receivers, message.as_string()) # 退出 smtpObj.quit()
三、設置郵件正文格式
在發送郵件的過程中,郵件正文的格式選擇很重要,目前主流的郵件正文格式有:
- 純文本格式
- HTML 格式
- 富文本格式(HTML 代碼套了一些標籤)
在 Python 中,通過 MIMEText 模塊實現上述代碼示例中的郵件正文內容設置,其中 plain、html、rich 等均為 MIME 類型。
代碼示例:
# 純文本格式 message = MIMEText('Python 郵件發送測試...', 'plain', 'utf-8') # HTML格式 message = MIMEText('Python 郵件發送測試...
', 'html', 'utf-8') # 富文本格式HTML帶圖片 message = MIMEText('Hello
' + '' + '', 'html', 'utf-8') # 指定圖片為當前目錄 with open('./test.png', 'rb') as f: # 設置附件的 MIME 和文件名 mime = MIMEImage(f.read()) mime.add_header('Content-ID', '') mime["Content-Disposition"] = 'attachment; filename="test.png"' message.attach(mime)
四、登錄驗證
在使用 Python 發送郵件之前,需要先登錄驗證發件人賬戶密碼,具體方式如下:
代碼示例:
smtpObj.login(mail_user,mail_pass)
五、發件人和收件人
在 Python 發送郵件時,需要設置發件人和收件人信息,注意發件人和收件人信息都需要帶上郵箱地址。
代碼示例:
# 發送方信息 message['From'] = Header('發件人名字', 'utf-8') # 接受方信息 message['To'] = Header('測試', 'utf-8')
六、發起郵件
在 Python 發送郵件操作完成後,調用 SMTP 對象的 sendmail 方法,發送郵件到指定的郵件地址。在傳遞收件人和發件人信息時,需要將其包裹在列表中,如果有多個接收人,則在列表中添加多個郵件地址。
代碼示例:
# 發送郵件 smtpObj.sendmail( sender, receivers, message.as_string())
七、關閉 SMTP 連接
Python 發送郵件完成後,需關閉 SMTP連接,釋放連接資源。
代碼示例:
smtpObj.quit()
八、完整的代碼示例
此處為 Python 發送簡單郵件的完整代碼示例:
import smtplib from email.mime.text import MIMEText from email.header import Header # 設置服務器所需信息 # 163郵箱服務器地址 mail_host = 'smtp.163.com' # 163用戶名 mail_user = 'xxx@163.com' # 密碼(部分郵箱為授權碼) mail_pass = 'xxxxxx' # 郵件發送方郵箱地址 sender = 'xxx@163.com' # 郵件接受方郵箱地址 receivers = ['xxx@qq.com'] # 設置email信息 # 郵件內容設置 message = MIMEText('Python 郵件發送測試...', 'plain', 'utf-8') # 郵件主題 message['Subject'] = Header('Python SMTP 發郵件測試', 'utf-8') # 發送方信息 message['From'] = Header('發件人名字', 'utf-8') # 接受方信息 message['To'] = Header('測試', 'utf-8') # 連接並登錄服務器 smtpObj = smtplib.SMTP() # 連接到服務器 smtpObj.connect(mail_host, 25) # 打印出和SMTP服務器交互的所有信息 smtpObj.set_debuglevel(1) # 登錄到服務器 smtpObj.login(mail_user,mail_pass) # 發送郵件 smtpObj.sendmail( sender, receivers, message.as_string()) # 退出 smtpObj.quit()
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/304974.html