国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python使用smtplib模塊發送電子郵件的流程詳解

2019-11-25 16:41:46
字體:
來源:轉載
供稿:網友

1、登錄SMTP服務器
首先使用網上的方法(這里使用163郵箱,smtp.163.com是smtp服務器地址,25為端口號):

import smtplibserver = 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不支持SMTP服務,或是服務沒開啟之類的。但是我想起上次我用foxmail登錄我的163郵箱的時候,郵箱密碼都輸對了還是提示我密碼錯誤,最后的解決辦法是:像QQ和163郵箱現在都有個客戶端密碼,用第三方登錄時需用客戶端密碼登錄才行,python也是如此,因此去設置好客戶端密碼,再用客戶端密碼登錄。

2016627144753064.png (700×421)

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

    此時便返回登錄成功提示:

(235, 'Authentication successful')

2、發送郵件

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

import smtplibfrom email.mime.text import MIMETextserver = 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,最后個是編碼方式。
sendmail是發郵件方法,第一個參數是發件郵箱,第二個參數是收件人郵箱,是一個列表,代表可以同時發給多個人,as_string是把MIMEText對象變成str。
但是執行結果并不能得到網上說的結果:

2016627144839301.jpg (350×162)

而是:

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 smtplibfrom email.header import Headerfrom email.mime.text import MIMETextserver = 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里的具體信息可以用一般發郵件方式發封郵件測試下

2016627144903688.png (424×155)

3、參考示例

import smtplibfrom email.mime.text import MIMETextto_list = ['123@123.com', '456@456.com']server_host = 'smtp.163.com'username = '你的郵箱賬號'password = '你的郵箱密碼'def send(to_list, sub, content):  '''  :param to_list: 收件人郵箱  :param sub: 郵件標題  :param content: 內容  '''  me = "manager" + "<" + username + ">"   # _subtype 可以設為html,默認是plain  msg = MIMEText(content, _subtype='html')  msg['Subject'] = sub  msg['From'] = me  msg['To'] = ';'.join(to_list)  try:    server = smtplib.SMTP()    server.connect(server_host)    server.login(username, password)    server.sendmail(me, to_list, msg.as_string())    server.close()  except Exception as e:    print str(e)if __name__ == '__main__':  send(to_list, "這個是一個郵件", "<h1>Hello, It's test email.</h1>")

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 牙克石市| 屏边| 新晃| 佛冈县| 玉龙| 洞口县| 乌兰浩特市| 吉安市| 东乡族自治县| 苍南县| 安仁县| 佛冈县| 隆化县| 大同市| 盐城市| 马边| 武夷山市| 阿拉善右旗| 汉阴县| 石首市| 遂昌县| 仪陇县| 二连浩特市| 丹江口市| 锡林郭勒盟| 阳新县| 安多县| 新乡市| 湘潭县| 拜泉县| 盖州市| 柯坪县| 乌鲁木齐县| 迁安市| 舞阳县| 保亭| 保亭| 聂拉木县| 延吉市| 温泉县| 宝兴县|