1. 程式人生 > >Python用QQ郵箱傳送郵件時授權碼問題

Python用QQ郵箱傳送郵件時授權碼問題

QQ郵箱最新推出了一個授權碼,需已驗證的手機號向QQ郵箱伺服器傳送一條簡訊獲得。該授權碼用於第三方客戶端登入,代替了第三方登入時使用的個人郵箱密碼。

在測試過程中遇到兩個問題:

1.提示需建立SSL安全連線。於是將smtplib.SMTP() 改成了smtplib.SMTP_SSL()

2.執行程式碼後,程式一直執行,但沒有任何反應,等了五分鐘左右,最後只好ctrl+c停止。查原因才知道,QQ郵箱的SMTP服務埠不是預設的25.改為465之後就好了。

(使用標準的25埠連線SMTP伺服器時,使用的是明文傳輸,傳送郵件的整個過程可能會被竊聽。要更安全地傳送郵件,可以加密SMTP會話,實際上就是先建立SSL安全連線,然後再使用SMTP協議傳送郵件。)


3.執行提示535錯誤,說授權error。才知道是那個授權碼的原因。於是趕緊獲取郵箱的授權碼。


最後測試終於好了,程式碼如下:

#coding:utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 第三方 SMTP 服務
mail_host="smtp.qq.com"  #設定伺服器
mail_user="******@qq.com"    #使用者名稱
mail_pass="*********"   #口令,QQ郵箱是輸入授權碼,在qq郵箱設定 裡用驗證過的手機發送簡訊獲得,不含空格


sender = '******qq.com'
receivers = ['******@qq.com','****@sina.com.cn']  # 接收郵件,可設定為你的QQ郵箱或者其他郵箱

message = MIMEText('a test for python', 'plain', 'utf-8')
message['From'] = Header("ppyy", 'utf-8')
message['To'] =  Header("you", 'utf-8')

subject = 'my test'
message['Subject'] = Header(subject, 'utf-8')

try:
  smtpObj = smtplib.SMTP_SSL(mail_host, 465) 
  smtpObj.login(mail_user,mail_pass)  
  smtpObj.sendmail(sender, receivers, message.as_string())
  smtpObj.quit()
  print u"郵件傳送成功"
except smtplib.SMTPException,e:
  print e