寫在前面
初學(xué)python耕餐,今天和昨晚折騰了一晚上健霹,終于成功發(fā)送出了郵件旺上!心情激動(dòng),做個(gè)記錄總結(jié)糖埋。
首先宣吱,要實(shí)現(xiàn)發(fā)郵件總共需要用到email模塊和smtplib模塊,其中email模塊用于構(gòu)造郵件瞳别,smtplib模塊用于發(fā)送郵件征候。
正式開(kāi)始
首先引入模塊
from email.mime.text import MIMEText
from email.header import Header
import smtplib
其中MIMEText
用于構(gòu)造郵件內(nèi)容
構(gòu)造郵件信息
我們先寫好郵件內(nèi)容
message ='''
hello,world祟敛!
來(lái)自我的電腦
'''
然后用MIMEText
構(gòu)造最終要發(fā)送的信息
msg = MIMEText(message,'plain','utf-8')
plain
表示純文本文件疤坝,還有html
等,在這里不作討論馆铁。utf-8
為了保證兼容性
這個(gè)msg
還需要有‘Subject’
跑揉、'From'
、'To'
三個(gè)鍵值對(duì)埠巨,其中'Subject'
對(duì)應(yīng)的是郵件的標(biāo)題历谍,'From'
是發(fā)件人,'To'
是收件人
所以
msg['Subject'] = Header("來(lái)自Python的郵件",'utf-8')
msg['From'] = Header('XXXX@sina.com')
msg['To'] = Header('receiver','utf-8')
這樣我們的郵件信息就完成了
在這里我遇到了一個(gè)大坑,一開(kāi)始總是報(bào)錯(cuò)
后來(lái)發(fā)現(xiàn)乖订,是
msg['From']
必須和自己郵件的發(fā)件人名稱一致扮饶。(這個(gè)應(yīng)該是新浪郵箱特有的)我用網(wǎng)易郵箱則不需要一致,不過(guò)我用網(wǎng)易郵箱同樣無(wú)法發(fā)送乍构,查官方解釋說(shuō)被鑒定為垃圾郵件甜无,至今也沒(méi)找到解決方法,希望有知道的同學(xué)能告訴我哥遮。
收發(fā)件信息
from_addr = 'XXXX@sina.com' #發(fā)件郵箱
password = 'password' #郵箱密碼
to_addr = 'XXXX@qq.com' #收件郵箱
smtp_server = 'smtp.sina.com' #SMTP服務(wù)器岂丘,以新浪為例
用smtplib發(fā)送
try:
server = smtplib.SMTP(smtp_server,25) #第二個(gè)參數(shù)為默認(rèn)端口為25,有些郵件有特殊端口
print('開(kāi)始登錄')
server.login(from_addr,password) #登錄郵箱
print('登錄成功')
print("郵件開(kāi)始發(fā)送")
server.sendmail(from_addr,to_addr,msg.as_string()) #將msg轉(zhuǎn)化成string發(fā)出
server.quit()
print("郵件發(fā)送成功")
except smtplib.SMTPException as e:
print("郵件發(fā)送失敗",e)
至此眠饮,如果情況順利就能夠成功發(fā)出郵件啦奥帘!
后記
然而學(xué)習(xí)的路上總是充滿了挫折,往往不一定能夠這么順利仪召。其實(shí)發(fā)郵件的步驟十分簡(jiǎn)單寨蹋,但是我也用了一個(gè)晚上加一個(gè)早上才成功發(fā)出第一封郵件。期間遇到了各種各樣的問(wèn)題扔茅,不同的郵件商也會(huì)有不同的問(wèn)題已旧。至今也只是使用新浪郵箱成功發(fā)出了,其他的郵箱還會(huì)有點(diǎn)差別召娜。
提示
發(fā)郵件前需要先進(jìn)自己的郵箱設(shè)置開(kāi)啟SMTP服務(wù)才能成功运褪,具體的郵件商的smtp服務(wù)器也可以在設(shè)置里面找找。一般是smtp.XXX.com,如新浪秸讹、QQ檀咙、網(wǎng)易:smtp.sina.com、smtp.qq.com璃诀、smtp.163.com弧可、smtp.126.com
最后,共勉文虏!
附完整代碼
# -*- coding:utf-8 -*-
from email.mime.text import MIMEText
from email.header import Header
import smtplib
message ='''
hello侣诺,world!
來(lái)自我的電腦
'''
msg = MIMEText(message,'plain','utf-8')
msg['Subject'] = Header("來(lái)自Python的郵件",'utf-8')
msg['From'] = Header('XXXX@sina.com')
msg['To'] = Header('receiver','utf-8')
from_addr = 'XXXX@sina.com' #發(fā)件郵箱
password = 'password' #郵箱密碼
to_addr = 'XXXX@qq.com' #收件郵箱
smtp_server = 'smtp.sina.com' #SMTP服務(wù)器氧秘,以新浪為例
try:
server = smtplib.SMTP(smtp_server,25) #第二個(gè)參數(shù)為默認(rèn)端口為25年鸳,有些郵件有特殊端口
print('開(kāi)始登錄')
server.login(from_addr,password) #登錄郵箱
print('登錄成功')
print("郵件開(kāi)始發(fā)送")
server.sendmail(from_addr,to_addr,msg.as_string()) #將msg轉(zhuǎn)化成string發(fā)出
server.quit()
print("郵件發(fā)送成功")
except smtplib.SMTPException as e:
print("郵件發(fā)送失敗",e)