Python基於QQ郵箱實現SSL傳送
阿新 • • 發佈:2020-04-27
一、QQ郵箱SSL傳送
獲取qq授權碼
ssl傳送方式不是使用郵箱密碼,而是需要授權碼,具體步驟如下:
登入傳送人qq郵箱>>設定>>賬戶>>POP3/STMP服務開啟>>生成授權碼
驗證密保
複製16位授權碼
qq郵箱傳送原始碼
#!/usr/bin/python3 # encoding:utf-8 ''' Created on 2020-04-24 12:15 @author: Administrator ''' #coding:utf-8 import smtplib from email.mime.text import MIMEText # 引入smtplib和MIMEText from email.mime.multipart import MIMEMultipart #設定SMTP地址 host = 'smtp.qq.com' #設定發件伺服器埠號,注意,這裡有SSL和非SSL兩種形式,qq SSL埠為465,非SSL為埠預設25 port = "465" #設定發件郵箱 sender = "[email protected]" #設定發件郵箱的授權碼,qq郵箱ssl傳送需要先開啟stmp並獲取密碼 pwd = 'sqmqweertyuiioplk' #16授權碼 #設定郵件接收人,傳送給多人,隔開 receiver = '[email protected],[email protected]' #設定郵件抄送人,傳送給多人,隔開 cc = '[email protected]' ''' 不帶附件傳送郵件 #設定html格式的郵件 #body = '<h1>這是一個python測試郵件</h1><p>test</p>' #msg = MIMEText(body,'html') # 設定正文為符合郵件格式的HTML內容 #傳送普通格式郵件 msg = MIMEText('Python 普通格式,郵件傳送測試...','plain','utf-8') ''' #需要傳送附件的方法例項 msg = MIMEMultipart() #設定傳送頭資訊 msg.add_header('subject','測試郵件') #設定郵件標題 msg.add_header('from',sender) # 設定傳送人 msg.add_header('to',receiver) # 設定接收人 msg.add_header('Cc',cc) # 抄送人 #設定正文內容 msg.attach(MIMEText('Python 郵件傳送測試...','utf-8')) #設定附件1,D://cs.txt 檔案 att1 = MIMEText(open('D://cs.txt','rb').read(),'base64','utf-8') att1.add_header('Content-Type','application/octet-stream') # 這裡的filename可以任意寫,寫什麼名字,郵件中顯示附件的名字 att1.add_header('Content-Disposition','attachment',filename='cs.txt') msg.attach(att1) try: #注意!如果是使用非SSL埠,這裡就要改為SMTP smtpObj = smtplib.SMTP_SSL(host,port) #登陸郵箱 smtpObj.login(sender,pwd) #傳送郵件,注意第二個引數是傳送人抄送人地址 smtpObj.sendmail(sender,receiver.split(',') + cc.split(','),msg.as_string()) print ("傳送成功") except smtplib.SMTPException as e: print ("傳送失敗") print(e) finally: smtpObj.quit()
傳送之後結果截圖
二、163郵箱非SSL傳送
非ssl無需獲取授權碼,直接配置郵箱密碼即可
163郵箱傳送原始碼
#!/usr/bin/python3 #encoding:utf-8 ''' Created on 2020-04-24 12:15 @author: Administrator ''' #coding:utf-8 import smtplib from email.mime.text import MIMEText #引入smtplib和MIMEText from email.mime.multipart import MIMEMultipart #設定SMTP地址 host = 'smtp.163.com' #設定發件伺服器埠號。注意,這裡有SSL和非SSL兩種形式,非SSL預設埠25 port = 25 #設定發件郵箱 sender = "[email protected]" #設定發件郵箱密碼 pwd = 'xxxx' #設定郵件接收人,傳送給多人,隔開 receiver = '[email protected]' #設定郵件抄送人,傳送給多人,隔開 cc = '[email protected]' ''' 不帶附件傳送郵件 #設定html格式的郵件 #body = '<h1>這是一個python測試郵件</h1><p>test</p>' #msg = MIMEText(body,'html') #設定正文為符合郵件格式的HTML內容 #傳送普通格式郵件 msg = MIMEText('Python 普通格式,郵件傳送測試...','utf-8') ''' #附件方法例項 msg = MIMEMultipart() #設定頭資訊 msg.add_header('subject',sender) #設定傳送人 msg.add_header('to',receiver) #設定接收人 msg.add_header('Cc',cc) # 抄送人 #設定正文內容 msg.attach(MIMEText('Python 郵件傳送測試...','application/octet-stream') #這裡的filename可以任意寫,寫什麼名字,郵件中顯示附件的名字 att1.add_header('Content-Disposition',filename='cs.txt') msg.attach(att1) try: #注意!如果是使用SSL埠,這裡就要改為SMTP_SSL smtpObj = smtplib.SMTP(host,port) #登陸郵箱 smtpObj.login(sender,msg.as_string()) print ("傳送成功") except smtplib.SMTPException as e: print ("傳送失敗") print(e) finally: smtpObj.quit()
傳送之後結果截圖
三、問題
3.1 python通過qq郵箱,SMTP傳送郵件失敗:
問題描述:使用qq賬戶及密碼SSL方式傳送郵件,報錯:(535,b'Login Fail. Please enter your authorization code to login. More information in http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256')
解決方案:開啟POP3/SMTP服務,獲取授權碼,qq原始碼的郵箱密碼改成授權碼即可
3.2 html附件變.bin檔案字尾
問題描述:傳送一個html格式的附件,收到郵件傳送字尾變成.bin的檔案,如圖:
解決方案:把 att1["Content-Disposition"] = 'attachment; filename="' + "介面測試報告.html" 改為 att1.add_header('Content-Disposition',filename='介面測試報告.html')
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。