Python使用SMTP模塊、email模塊發送郵件
smtplib模塊:
主要通過SMTP類與郵件系統進行交互。使用方法如下:
1.實例化一個SMTP對象:
s = smtplib.SMTP(郵件服務地址,端口號)
s = smtplib.SMTP_SSL(郵件服務地址,端口號)
2.登陸郵件,權限驗證:
s.login(用戶名,密碼)
3.發送郵件:
s.sendmail(發件人郵箱,收件人郵箱,發送內容)
4.斷開連接:
s.close()
email模塊:
email模塊:支持發送的郵件內容為純文本、HTML內容、圖片、附件。email模塊中有幾大類來針對不同的郵件內容形式,常用如下:
MIMEText:(MIME媒體類型)內容形式為純文本、HTML頁面。
MIMEImage:內容形式為圖片。
MIMEMultupart:多形式組合,可包含文本和附件。
每一類對應的導入方式:
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
MIMEText:
MIMEText(msg,type,chartset)
msg:文本內容
type:文本類型默認為plain(純文本)
發送HTML格式的時候,修改為html,但同時要求msg的內容也是html的格式。
chartset:文本編碼,中文為“utf-8”
# 構造TEXT格式的消息
msg = MIMEText("hello.text","plain","utf-8")
msg["Subject"] = "xxxxx"
msg["From"] = "xxxx"
msg["To"] = "xxxx"
#發送以上構造的郵件內容要使用as_string將構造的郵件內容轉換為string形式。
s.sendmail("xxx","xxx",msg.as_string)
MIMEImage、MIMEMultipart:
msg = MIMEMultipart()
#實例化一個文本對象
msg_sub = MIMEText("hello.text","plain","utf-8")
#將text消息添加到MIMEMultipart中,作為郵件正文。
msg.attach(msg_sub)
#圖片作為附件
import os
img_datas = open(os.getcwd()+ "/reports/xxxx.png","rb").read()
msg_img = MIMEImage(img_data)
msg_img.add_header(‘Content-Disposition‘,‘attachment‘, filename = "xxxx.png" )
msg_img.add_header(‘Content-ID‘,‘<0>‘)
#將圖片添加到MIMEMultiplart中,作為附件發送。
msg.attach(mag_img)
源代碼如下:
發送文本郵件:
1 import smtplib 2 from email.mime.text import MIMEText 3 4 sender = ‘[email protected]‘ #發送人郵箱 5 passwd = ‘lkugmgywydhfff‘ #發送人郵箱授權碼 6 receivers = ‘[email protected]‘ #收件人郵箱 7 8 subject = ‘python發郵件測試‘ #主題 9 content = ‘這是我使用python smtplib模塊和email模塊自動發送的郵件‘ #正文 10 11 msg = MIMEText(content,‘plain‘,‘utf-8‘) 12 msg[‘Subject‘] = subject 13 msg[‘From‘] = sender 14 msg[‘TO‘] = receivers 15 16 try: 17 s = smtplib.SMTP_SSL(‘smtp.qq.com‘,465) 18 s.login(sender,passwd) 19 s.sendmail(sender,receivers,msg.as_string()) 20 print(‘發送成功‘) 21 22 except Exception: 23 print(‘發送失敗‘)
發送HTML郵件:
1 import smtplib 2 from email.mime.text import MIMEText 3 from email.header import Header 4 5 sender = ‘xxxx@qq.com‘ #發件郵箱 6 passwd = ‘lkugmgywydhfff‘ #發送人郵箱授權碼 7 receivers = ‘[email protected]‘ #收件郵箱 8 9 subject = ‘python發郵Html郵件測試‘ #主題 10 11 content = """ #內容,HTML格式 12 <p>Python 郵件發送測試...</p> 13 <p><a href="http://www.baidu.com">這是一個鏈接</a></p> 14 """ 15 16 msg = MIMEText(content,‘html‘,‘utf-8‘) 17 # msg[‘Subject‘] = subject 18 msg[‘Subject‘] = Header(subject,‘utf-8‘) 19 # msg[‘From‘] = sender 20 msg[‘From‘] = Header(‘大傻子‘,‘utf-8‘) 21 # msg[‘To‘] = receivers 22 msg[‘To‘] = Header(‘二楞子‘,‘utf-8‘) 23 try: 24 s = smtplib.SMTP_SSL(‘smtp.qq.com‘,465) 25 s.login(sender,passwd) 26 s.sendmail(sender,receivers,msg.as_string()) 27 print(‘Send Success‘) 28 29 except: 30 print(‘Send Failure‘)
發送圖片郵件:
1 import smtplib 2 from email.mime.image import MIMEImage 3 from email.mime.text import MIMEText 4 from email.mime.multipart import MIMEMultipart 5 6 sender = ‘[email protected]‘ 7 passwd = ‘lkugmgywydhfff‘ 8 receivers = ‘[email protected]‘ 9 subject = ‘python發郵帶img的郵件測試‘ #主題 10 11 # 創建一個帶附件的實例 12 msg = MIMEMultipart() 13 msg[‘Subject‘] = subject 14 msg[‘From‘] = sender 15 msg[‘To‘] = receivers 16 17 # 創建正文 18 msg.attach(MIMEText(‘使用python smtplib模塊和email模塊自動發送郵件測試‘,‘plain‘,‘utf-8‘)) 19 20 # 創建圖片附件 21 import os 22 img_file = open(os.getcwd()+"/a4.jpg",‘rb‘).read() 23 msg_img = MIMEImage(img_file) 24 msg_img.add_header(‘Content-Disposition‘,‘attachment‘, filename = "a4.jpg") 25 msg_img.add_header(‘Content-ID‘, ‘<0>‘) 26 msg.attach(msg_img) 27 28 try: 29 s = smtplib.SMTP_SSL(‘smtp.qq.com‘,465) 30 s.set_debuglevel(1) #輸出發送郵件詳細過程 31 s.login(sender,passwd) 32 s.sendmail(sender,receivers,msg.as_string()) 33 print(‘Send Succese‘) 34 35 except: 36 print(‘Send Failure‘)
發送帶附件的郵件:
1 import smtplib 2 from email.mime.text import MIMEText 3 from email.mime.multipart import MIMEMultipart 4 from email.header import Header 5 6 sender = ‘[email protected]‘ #發件郵箱 7 passwd = ‘lkugmgywydhfff‘ # 郵箱授權碼 8 receivers = ‘[email protected]‘ #收件郵箱 9 10 subject = ‘python發帶附件的郵件測試‘ #主題 11 # 創建一個帶附件的實例 12 msg = MIMEMultipart() 13 msg[‘Subject‘] = subject 14 msg[‘From‘] = sender 15 msg[‘To‘] = receivers 16 17 #創建正文,將文本文件添加到MIMEMultipart中 18 msg.attach(MIMEText(‘使用python smtplib模塊和email模塊自動發送郵件測試‘,‘plain‘,‘utf-8‘)) 19 20 #構造附件1,傳送當前目錄下 文件 21 att1 = MIMEText(open(‘testdata.xlsx‘,‘rb‘).read(),‘base64‘,‘utf-8‘) # rb以二進制方式讀取 22 # att1["Content-Type"] = ‘application/octet-stream‘ 23 # filename為附件名稱,可以任意寫,寫什麽名字,郵件中顯示什麽名字 24 att1["Content-Disposition"] = ‘attachment; filename = "testdata.xlsx" ‘ 25 #將附件添加到MIMEMultipart中 26 msg.attach(att1) 27 28 #構造附件2 29 att2 = MIMEText(open(‘db.cfg‘,‘rb‘).read(),‘base64‘,‘utf-8‘) 30 # att2["Content-Type"] = ‘application/octet-stream‘ 31 att2["Content-Disposition"] = ‘attachment; filename = "db.cfg" ‘ 32 #將附件添加到MIMEMultipart中 33 msg.attach(att2) 34 35 try: 36 s = smtplib.SMTP_SSL(‘smtp.qq.com‘,465) 37 s.set_debuglevel(1) #輸出發送郵件詳細過程 38 s.login(sender,passwd) 39 s.sendmail(sender,receivers,msg.as_string()) 40 print(‘Send Succese‘) 41 42 except: 43 print(‘Send Failure‘)
Python使用SMTP模塊、email模塊發送郵件