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 MIMETextmsg = MIMEText('hello, send by Python...', 'plain', 'utf-8')注意到構(gòu)造MIMEText對象時(shí),第一個參數(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 smtplibserver = 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ā)送郵件時(shí),password應(yīng)該填寫郵箱的授權(quán)登陸碼,而不是自己的郵箱密碼。
3、按照以上代碼運(yùn)行,會報(bào)錯
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)行沒問題的代碼,在自己家的網(wǎng)絡(luò)下又遇到了一系列問題,運(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')
新聞熱點(diǎn)
疑難解答
圖片精選