Python發郵件:發郵件總結

一、登陸SMTP服務器

    先使用網上的方法(這裏使用163郵箱,smtp.163.com是smtp服務器地址,25爲端口號):html

import smtplib
server = smtplib.SMTP('smtp.163.com', 25)
server.login('j_hao104@163.com', 'password')
Traceback (most recent call last):
  File "C:/python/t.py", line 192, in <module>
    server.login('j_hao104@163.com', 'password')
  File "C:\Python27\lib\smtplib.py", line 622, in login
    raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (535, 'Error: authentication failed')

    發現返回: smtplib.SMTPAuthenticationError: (535, 'Error: authentication failed'),提示驗證失敗。python

    網上給了不少解決辦法有不少:
segmentfault

    http://markmail.org/message/3ub3itxq4aqwaikx 服務器

    https://segmentfault.com/q/1010000003802498 測試

    有說python不支持SMTP服務,或是服務沒開啓之類的。可是我想起上次我用foxmail登陸個人163郵箱的時候,郵箱密碼都輸對了仍是提示我密碼錯誤,最後的解決辦法是:像QQ和163郵箱如今都有個客戶端密碼,用第三方登陸時需用客戶端密碼登陸才行,python也是如此,所以去設置好客戶端密碼,再用客戶端密碼登陸。編碼


import smtplib
server = smtplib.SMTP('smtp.163.com', 25)
server.login('j_hao104@163.com', 'clientPassword')

    此時便返回登陸成功提示:spa

(235, 'Authentication successful')

二、發送郵件

    首先使用網上給出的代碼:.net

import smtplib
from email.mime.text import MIMEText
server = smtplib.SMTP('smtp.163.com', 25)
server.login('j_hao104@163.com', 'clientPassword')
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string())

    構造MIMEText對象時,第一個參數是郵件正文,第二個參數是MIME的subtype,最後個是編碼方式。code

    sendmail是發郵件方法,第一個參數是發件郵箱,第二個參數是收件人郵箱,是一個列表,表明能夠同時發給多我的,as_string是把MIMEText對象變成str。orm

    可是執行結果並不能獲得網上說的結果:

    而是:

Traceback (most recent call last):
  File "C:/python/t.py", line 195, in <module>
    server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string())
  File "C:\Python27\lib\smtplib.py", line 746, in sendmail
    raise SMTPDataError(code, resp)
smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp11,D8CowEDpDkE427JW_wQIAA--.4996S2 1454562105,please see http://mail.163.com/help/help_spam_16.htm?ip=171.221.144.51&hostid=smtp11&time=1454562105')

    網上一查才知道:smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp11……的錯誤是由於信封發件人和信頭髮件人不匹配。能夠看出看出圖片中並無發件人和主題,因此須要對代碼作以下修改:

import smtplib
from email.header import Header
from email.mime.text import MIMEText
server = smtplib.SMTP('smtp.163.com', 25)
server.login('j_hao104@163.com', 'clientPassword')
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
msg['From'] = 'j_hao104@163.com <j_hao104@163.com>'
msg['Subject'] = Header(u'text', 'utf8').encode()
msg['To'] = u'飛輪海 <jinghao5849312@qq.com>'
server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string())

    這樣就能成功發出郵件啦

    msg裏的具體信息能夠用通常發郵件方式發封郵件測試下

三、參考

http://jingyan.baidu.com/article/b24f6c822784b886bfe5dabe.html

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000

http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

轉載請註明來源:http://my.oschina.net/jhao104/blog/613774 

相關文章
相關標籤/搜索