這篇文章將為大家詳細(xì)講解有關(guān)Python中SMTP發(fā)送郵件遇到問題怎么辦,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都做網(wǎng)站、網(wǎng)站設(shè)計的開發(fā),更需要了解用戶,從用戶角度來建設(shè)網(wǎng)站,獲得較好的用戶體驗。創(chuàng)新互聯(lián)多年互聯(lián)網(wǎng)經(jīng)驗,見的多,溝通容易、能幫助客戶提出的運營建議。作為成都一家網(wǎng)絡(luò)公司,打造的就是網(wǎng)站建設(shè)產(chǎn)品直銷的概念。選擇創(chuàng)新互聯(lián),不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來訪用戶感受到浩方產(chǎn)品的價值服務(wù)。Python練習(xí)內(nèi)容:
SMTP是發(fā)送郵件的協(xié)議,Python內(nèi)置對SMTP的支持,可以發(fā)送純文本郵件、HTML郵件以及帶附件的郵件。
Python對SMTP支持有smtplib和email兩個模塊,email負(fù)責(zé)構(gòu)造郵件,smtplib負(fù)責(zé)發(fā)送郵件。
首先,我們來構(gòu)造一個最簡單的純文本郵件:
from email.mime.text import MIMEText msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
注意到構(gòu)造MIMEText對象時,第一個參數(shù)就是郵件正文,第二個參數(shù)是MIME的subtype,傳入'plain'表示純文本,最終的MIME就是'text/plain',最后一定要用utf-8編碼保證多語言兼容性。
然后,通過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é)議就是簡單的文本命令和響應(yīng)。login()
方法用來登錄SMTP服務(wù)器,sendmail()
方法就是發(fā)郵件,由于可以一次發(fā)給多個人,所以傳入一個list,郵件正文是一個str,as_string()
把MIMEText對象變成str。
如果一切順利,就可以在收件人信箱中收到我們剛發(fā)送的Email
————————分割線,以上都是資料內(nèi)容————————
使用過程中我遇到了一些問題,或者是之前作者沒有表述清楚
我使用的是163郵箱
1、首先作者沒有提醒我,要確保自己的郵箱地址開啟了smtp服務(wù),并設(shè)置客戶端授權(quán)登陸密碼
2、發(fā)送郵件時,password應(yīng)該填寫郵箱的授權(quán)登陸碼,而不是自己的郵箱密碼。
3、按照以上代碼運行,會報錯
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)境運行沒問題的代碼,在自己家的網(wǎng)絡(luò)下又遇到了一系列問題,運行時報。
Traceback (most recent call last): File "/Users/xuexiaopeng/Documents/sendmailDemo.py", line 13, inserver = 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')
我也不知道這個114.111.167.154是那里的IP,我將自己電腦的翻墻代理關(guān)閉,重啟了路由器解決了。
5、發(fā)送郵件時報錯:
Traceback (most recent call last): File "/Users/xuexiaopeng/Documents/sendmailDemo.py", line 21, inserver.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')
我查了一下頁面http://mail.163.com/help/help_spam_16.htm?ip=117.114.147.187&hostid=smtp10&time=1460039376,是發(fā)生了退信行為,后來我關(guān)閉了路由器,連接了自己手機(jī)分享的熱點,才發(fā)送成功。
至于家里的網(wǎng)絡(luò)為啥會出問題,我還的再研究。
完整代碼如下:
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()
關(guān)于“Python中SMTP發(fā)送郵件遇到問題怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。