Python 進階—使用SMTP 傳送郵件
阿新 • • 發佈:2018-11-16
本文針對QQ郵箱的郵件傳送,163郵箱與之類似
1. 首先應在郵箱中開啟SMTP 服務並獲得授權碼:
在開啟了SMTP 服務之後我們會獲得授權碼(授權碼可有多個,均可正常使用):
2. 使用Python3 傳送簡單郵件
Python對SMTP 支援有smtplib
和email
兩個模組,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)
收件人郵箱由單個變為列表,將收件人由單個變為多個。