Python SMTP傳送QQ郵件
阿新 • • 發佈:2019-01-04
1、QQ郵箱開通SMTP許可權,並獲取授權碼
QQ郵箱---->設定---->賬戶---->開啟服務---->IMAP/SMTP服務---->獲取授權碼
傳送方和接收方都必須開通
2、傳送純文字郵件:
import smtplib from email.mime.text import MIMEText from email.header import Header # 配置 mail_host = 'smtp.qq.com' # 伺服器 mail_port = 587 # 埠 mail_sender = '******@qq.com' # 傳送者郵箱mail_psw = '******' # 口令,不是郵箱密碼 mail_receivers = ['******@qq.com'] # 接收者郵箱 # 內容 msg_content = '郵件測試內容' msg_subject = 'SMTP郵件測試' msg_from = '傳送者' msg_to = '接受者' msg = MIMEText(msg_content, 'plain', 'utf-8') # 純文字內容 msg['Subject'] = Header(msg_subject, 'utf-8') # 主題 msg['From'] = Header(msg_from,'utf-8') # 傳送者名稱 msg['To'] = Header(msg_to, 'utf-8') # 接收者名稱 # 傳送 try: stmpObj = smtplib.SMTP(mail_host, mail_port) # 配置伺服器和埠 stmpObj.starttls() # 先加密,部分郵箱服務商要求加密傳輸,避免被竊聽 stmpObj.login(mail_sender, mail_psw) # 登入 stmpObj.sendmail(mail_sender, mail_receivers, msg.as_string()) # 傳送郵件
stmpObjprint('傳送成功')except smtplib.SMTPException as e: print('Error:', e).quit()
# 構造MIMEText物件時,第一個引數就是郵件正文,第二個引數是MIME的subtype,傳入'plain',最終的MIME就是'text/plain',最後一定要用utf-8編碼保證多語言相容性。
# as_string()把MIMEText物件變成str
執行結果:
3、傳送HTML格式郵件
msg_content = ''' <p>郵件測試內容</p> <p><a href='http://www.baidu.com'>百度連結</a></p> ''' msg = MIMEText(msg_content, 'html', 'utf-8') # 帶HTML文字
執行結果:
4、同時支援HTML和Plain格式
msg = MIMEMultipart('alternative') msg['Subject'] = Header(msg_subject, 'utf-8') # 主題 msg['From'] = Header(msg_from, 'utf-8') # 傳送者名稱 msg['To'] = Header(msg_to, 'utf-8') # 接收者名稱 msg.attach(MIMEText(str('Python測試內容'),'plain','utf-8')) msg.attach(MIMEText('<p><a href="http://www.baidu.com"></a></p>','html','utf-8'))
5、傳送帶附件的郵件
# 如果Email中要加上附件怎麼辦?帶附件的郵件可以看做包含若干部分的郵件: # 文字和各個附件本身,所以,可以構造一個MIMEMultipart物件代表郵件本身, # 然後往裡面加上一個MIMEText作為郵件正文,再繼續往裡面加上表示附件的MIMEBase物件即可:
# 郵件物件 msg = MIMEMultipart() msg['Subject'] = Header(msg_subject, 'utf-8') # 主題 msg['From'] = Header(msg_from, 'utf-8') # 傳送者名稱 msg['To'] = Header(msg_to, 'utf-8') # 接收者名稱 # 郵件正文MIMEText msg.attach(MIMEText(msg_content, 'plain', 'utf-8')) # 郵件附件--圖片 attachment = MIMEBase('image','png',filename = 'bd_logo1.png') attachment.add_header('Content-Disposition','attachment',filename = 'bd_logo1.png') attachment.add_header('Content-ID','<logo>') attachment.add_header('X-Attachment-Id','logo') fp = open('bd_logo1.png','rb') attachment.set_payload(fp.read()) # 載入附件內容 encoders.encode_base64(attachment) # 用base64編碼 msg.attach(attachment)
# 要把圖片嵌入到郵件正文中,我們只需按照發送附件的方式,先把郵件作為附件新增進去, # 然後,在HTML中通過引用src="cid:0"就可以把附件作為圖片嵌入了。 # 如果有多個圖片,給它們依次編號,然後引用不同的cid:x即可。
6、繼承關係
# 構造一個郵件物件就是一個Messag物件,如果構造一個MIMEText物件,就表示一個文字郵件物件, # 如果構造一個MIMEImage物件,就表示一個作為附件的圖片,要把多個物件組合起來, # 就用MIMEMultipart物件,而MIMEBase可以表示任何物件。它們的繼承關係如下:
Message +- MIMEBase +- MIMEMultipart +- MIMENonMultipart +- MIMEMessage +- MIMEText +- MIMEImage
參考連結: