1. 程式人生 > >Python 進階—使用SMTP 傳送郵件

Python 進階—使用SMTP 傳送郵件

本文針對QQ郵箱的郵件傳送,163郵箱與之類似

1. 首先應在郵箱中開啟SMTP 服務並獲得授權碼:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在開啟了SMTP 服務之後我們會獲得授權碼(授權碼可有多個,均可正常使用):
在這裡插入圖片描述
在這裡插入圖片描述

2. 使用Python3 傳送簡單郵件

Python對SMTP 支援有smtplibemail 兩個模組,email 負責構造郵件,smtplib 負責傳送郵件

import smtplib
from email.header import Header          # 用來設定郵件頭和郵件主題
from email.mime.text import MIMEText     # 傳送正文只包含簡單文字的郵件,引入MIMEText即可
def send_email(sender_email, reciver_email, authorization_code, smtp_server, email_title, email_body): message = MIMEText(email_body, 'plain', 'utf-8') # 郵件正文,'plain'表示純文字,'utf-8'保證多語言相容性 message['From'] = sender_email # 郵件上顯示的發件人 message['To'] = reciver_email # 郵件上顯示的收件人
message['Subject'] = Header(email_title, 'utf-8') # 郵件主題 try: smtp = smtplib.SMTP() # 建立一個連線 smtp.connect(smtp_server) # 連線傳送郵件的伺服器 smtp.login(sender_email, authorization_code) # 登入伺服器 smtp.sendmail(sender_email, reciver_email,
message.as_string()) # 填入郵件的相關資訊併發送 print("郵件傳送成功!!!") smtp.quit() except smtplib.SMTPException: print("郵件傳送失敗!!!") title = 'Test' body = 'This is a test' send_email('[email protected]', '[email protected]', 'ickdbbikbbXXXXXX', 'smtp.qq.com', title, body)

程式碼引數說明:

引數 說明
sender_email 發件人郵箱
reciver_email 收件人郵箱
authorization_code 授權碼
smtp_server SMTP 伺服器地址
email_title 郵件主題
email_body 郵件正文

郵件傳送結果:在這裡插入圖片描述

若將程式碼第13 行修改為smtp = smtplib.SMTP_SSL() 可實現SSL 加密,雖然我並不覺得有什麼不同…

順便補充一下:

網易STMP 伺服器和埠 QQ STMP 伺服器和埠
smtp.163.com smtp.qq.com
465 465

3. 程式小升級

import smtplib
from email.header import Header          # 用來設定郵件頭和郵件主題
from email.mime.text import MIMEText     # 傳送正文只包含簡單文字的郵件,引入MIMEText即可

def send_email(sender_email, reciver_list_email, authorization_code, smtp_server, email_title, email_body):

	message = MIMEText(email_body, 'plain', 'utf-8')   # 郵件正文,'plain'表示純文字,'utf-8'保證多語言相容性
	message['From'] = sender_email                     # 郵件上顯示的發件人
	message['To'] = reciver_email                      # 郵件上顯示的收件人
	message['Subject'] = Header(email_title, 'utf-8')  # 郵件主題
	 
	try:
	    smtp = smtplib.SMTP()                           # 建立一個連線
	    smtp.connect(smtp_server)                       # 連線傳送郵件的伺服器
	    smtp.login(sender_email, authorization_code)    # 登入伺服器
	    smtp.sendmail(sender_email, reciver_list_email, message.as_string())  # 填入郵件的相關資訊併發送
	    print("郵件傳送成功!!!")
	    smtp.quit()
	except smtplib.SMTPException:
	    print("郵件傳送失敗!!!")

title = 'Test'
body = 'This is a test'
send_email('[email protected]', ['[email protected]', '[email protected]'], 'ickdbbikbbXXXXXX', 'smtp.qq.com', title, body)

收件人郵箱由單個變為列表,將收件人由單個變為多個。