Python SMTP發(fā)送郵件遇到的一些問(wèn)題及解決辦法
Python練習(xí)內(nèi)容:
SMTP是發(fā)送郵件的協(xié)議,Python內(nèi)置對(duì)SMTP的支持,可以發(fā)送純文本郵件、HTML郵件以及帶附件的郵件。
Python對(duì)SMTP支持有smtplib和email兩個(gè)模塊,email負(fù)責(zé)構(gòu)造郵件,smtplib負(fù)責(zé)發(fā)送郵件。
首先,我們來(lái)構(gòu)造一個(gè)最簡(jiǎn)單的純文本郵件:
from email.mime.text import MIMEText msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
注意到構(gòu)造MIMEText對(duì)象時(shí),第一個(gè)參數(shù)就是郵件正文,第二個(gè)參數(shù)是MIME的subtype,傳入'plain'表示純文本,最終的MIME就是'text/plain',最后一定要用utf-8編碼保證多語(yǔ)言兼容性。
然后,通過(guò)SMTP發(fā)出去:
# 輸入Email地址和口令:from_addr = input('From: ') password = input('Password: ')# 輸入收件人地址:to_addr = input('To: ')# 輸入SMTP服務(wù)器地址:smtp_server = input('SMTP server: ')import smtplib server = smtplib.SMTP(smtp_server, 25) # SMTP協(xié)議默認(rèn)端口是25server.set_debuglevel(1) server.login(from_addr, password) server.sendmail(from_addr, [to_addr], msg.as_string()) server.quit()
我們用set_debuglevel(1)
就可以打印出和SMTP服務(wù)器交互的所有信息。SMTP協(xié)議就是簡(jiǎn)單的文本命令和響應(yīng)。login()
方法用來(lái)登錄SMTP服務(wù)器,sendmail()
方法就是發(fā)郵件,由于可以一次發(fā)給多個(gè)人,所以傳入一個(gè)list,郵件正文是一個(gè)str,as_string()
把MIMEText對(duì)象變成str。
如果一切順利,就可以在收件人信箱中收到我們剛發(fā)送的Email
————————分割線,以上都是資料內(nèi)容————————
使用過(guò)程中我遇到了一些問(wèn)題,或者是之前作者沒(méi)有表述清楚
我使用的是163郵箱
1、首先作者沒(méi)有提醒我,要確保自己的郵箱地址開啟了smtp服務(wù),并設(shè)置客戶端授權(quán)登陸密碼
2、發(fā)送郵件時(shí),password應(yīng)該填寫郵箱的授權(quán)登陸碼,而不是自己的郵箱密碼。
3、按照以上代碼運(yùn)行,會(huì)報(bào)錯(cuò)
Traceback (most recent call last): File "mailDemo.py", line 24, in server.sendmail(from_addr,[to_addr],msg.as_string()) File "C:\Program Files\Python35-32\lib\smtplib.py", line 878, in sendmail raise SMTPDataError(code, resp)
應(yīng)該在代碼中加上:
#發(fā)送郵箱地址 msg['From'] = from_addr #收件箱地址 msg['To'] = to_addr #主題 msg['Subject'] = 'the frist mail'
4、在公司環(huán)境運(yùn)行沒(méi)問(wèn)題的代碼,在自己家的網(wǎng)絡(luò)下又遇到了一系列問(wèn)題,運(yùn)行時(shí)報(bào)。
Traceback (most recent call last): File "/Users/xuexiaopeng/Documents/sendmailDemo.py", line 13, in <module> server = smtplib.SMTP(smtp_server,25) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/smtplib.py", line 253, in __init__ raise SMTPConnectError(code, msg) smtplib.SMTPConnectError: (554, b'IP<114.111.167.154> in blacklist')
我也不知道這個(gè)114.111.167.154是那里的IP,我將自己電腦的翻墻代理關(guān)閉,重啟了路由器解決了。
5、發(fā)送郵件時(shí)報(bào)錯(cuò):
Traceback (most recent call last): File "/Users/xuexiaopeng/Documents/sendmailDemo.py", line 21, in <module> server.sendmail(from_addr, [to_addr], msg.as_string()) File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/smtplib.py", line 878, in sendmail raise SMTPDataError(code, resp) smtplib.SMTPDataError: (554, b'DT:SPM 163 smtp10,DsCowAA3h9_QbgZXI9_fCQ--.713S2 1460039376,please see http://mail.163.com/help/help_spam_16.htm?ip=117.114.147.187&hostid=smtp10&time=1460039376')
我查了一下頁(yè)面http://mail.163.com/help/help_spam_16.htm?ip=117.114.147.187&hostid=smtp10&time=1460039376,是發(fā)生了退信行為,后來(lái)我關(guān)閉了路由器,連接了自己手機(jī)分享的熱點(diǎn),才發(fā)送成功。
至于家里的網(wǎng)絡(luò)為啥會(huì)出問(wèn)題,我還的再研究。
完整代碼如下:
from email.mime.text import MIMEText msg = MIMEText('hello,send by python...','plain','utf-8') #發(fā)送郵箱地址 from_addr = 'test@163.com' #郵箱授權(quán)碼,非登陸密碼 password = '123' #收件箱地址 to_addr = '123456@qq.com' #smtp服務(wù)器 smtp_server = 'smtp.163.com' #發(fā)送郵箱地址 msg['From'] = from_addr #收件箱地址 msg['To'] = to_addr #主題 msg['Subject'] = 'the frist mail' import smtplib server = smtplib.SMTP(smtp_server,25) server.set_debuglevel(1) print(from_addr) print(password) server.login(from_addr,password) server.sendmail(from_addr,[to_addr],msg.as_string()) server.quit()
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Python基于SMTP發(fā)送郵件的方法
- python使用smtplib模塊發(fā)送郵件
- Python SMTP配置參數(shù)并發(fā)送郵件
- Python基于smtplib協(xié)議實(shí)現(xiàn)發(fā)送郵件
- 基于python SMTP實(shí)現(xiàn)自動(dòng)發(fā)送郵件教程解析
- Python基于smtplib模塊發(fā)送郵件代碼實(shí)例
- python3.6使用SMTP協(xié)議發(fā)送郵件
- Python使用QQ郵箱發(fā)送郵件報(bào)錯(cuò)smtplib.SMTPAuthenticationError
- python3實(shí)現(xiàn)163郵箱SMTP發(fā)送郵件
- Python 發(fā)送SMTP郵件的簡(jiǎn)單教程
相關(guān)文章
pycharm訪問(wèn)mysql數(shù)據(jù)庫(kù)的方法步驟
這篇文章主要介紹了pycharm訪問(wèn)mysql數(shù)據(jù)庫(kù)的方法步驟。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06selenium+python自動(dòng)化測(cè)試之使用webdriver操作瀏覽器的方法
這篇文章主要介紹了selenium+python自動(dòng)化測(cè)試之使用webdriver操作瀏覽器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01解決python -m pip install --upgrade pip 升級(jí)不成功問(wèn)題
這篇文章主要介紹了python -m pip install --upgrade pip 解決升級(jí)不成功問(wèn)題,需要的朋友可以參考下2020-03-03python深度學(xué)習(xí)tensorflow1.0參數(shù)初始化initializer
這篇文章主要為大家介紹了python深度學(xué)習(xí)tensorflow1.0參數(shù)初始化initializer示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06python中綁定方法與非綁定方法的實(shí)現(xiàn)示例
本文主要介紹了python中綁定方法與非綁定方法的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Python周期任務(wù)神器之Schedule模塊使用詳解
這篇文章主要為大家詳細(xì)介紹了Python中的周期任務(wù)神器—Schedule模塊的安裝和初級(jí)、進(jìn)階使用方法,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-04-04使用pytorch和torchtext進(jìn)行文本分類的實(shí)例
今天小編就為大家分享一篇使用pytorch和torchtext進(jìn)行文本分類的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01