App下載

python如何發(fā)送郵件?smtplib庫(kù)介紹!

猿友 2021-07-12 14:17:40 瀏覽數(shù) (2532)
反饋

在一些業(yè)務(wù)需求中,我們可能會(huì)需要python應(yīng)用向我們的郵箱發(fā)送一些郵件,這個(gè)時(shí)候就需要使python的發(fā)送郵件功能。python內(nèi)置了一個(gè)用于發(fā)送郵件的smtplib庫(kù),使用這個(gè)庫(kù)可以用來(lái)發(fā)送郵件,接下來(lái)就隨小編來(lái)了解一下這個(gè)庫(kù)吧。

介紹

有些小伙伴可能會(huì)問(wèn)了:python發(fā)送郵件功能有什么用?實(shí)際上發(fā)送郵件功能確實(shí)很有用,小編曾經(jīng)接觸過(guò)一個(gè)自動(dòng)化測(cè)試的項(xiàng)目,它將項(xiàng)目部署在服務(wù)器上,運(yùn)行結(jié)果就是通過(guò)郵件功能將測(cè)試報(bào)告發(fā)送到開(kāi)發(fā)者的郵箱中的。當(dāng)然,那個(gè)項(xiàng)目用的發(fā)送郵件的庫(kù)并不是stmplib庫(kù)這種簡(jiǎn)單的庫(kù),但是他們?cè)谑褂蒙暇哂泻芏嗟南嗨浦?,而且在輕量級(jí)的使用上stmplib庫(kù)已經(jīng)足夠使用了。

 對(duì)于一個(gè)發(fā)送郵件功能,只要可以發(fā)送郵件就足夠了。而stmplib庫(kù)就體現(xiàn)了這一點(diǎn)。

安裝

stmplib 是 python 內(nèi)置的庫(kù),不需要額外的安裝。

使用

第一種方式:本地存在stmp服務(wù)器的情況下:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = 'from@w3cschool.cn'  # 發(fā)件人
receivers = ['429240967@qq.com']  # 收件人,可設(shè)置為你的QQ郵箱或者其他郵箱

# 三個(gè)參數(shù):第一個(gè)為文本內(nèi)容,第二個(gè) plain 設(shè)置文本格式,第三個(gè) utf-8 設(shè)置編碼
message = MIMEText('Python 郵件發(fā)送測(cè)試...', 'plain', 'utf-8')
message['From'] = Header("W3Cschool教程", 'utf-8')
message['To'] =  Header("測(cè)試", 'utf-8')

subject = 'Python SMTP 郵件測(cè)試'  # 要充當(dāng)標(biāo)題的字符串
message['Subject'] = Header(subject, 'utf-8') # 將要充當(dāng)標(biāo)題的字符串寫(xiě)入郵件

try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print ("郵件發(fā)送成功")
except smtplib.SMTPException:
    print ("Error: 無(wú)法發(fā)送郵件")

 這種方式要求本地大有STMP服務(wù)器,這之后才可以用localhost作為stmp服務(wù)器地址,然而大多數(shù)情況下我們并沒(méi)有搭建本地的stmp服務(wù)器,這時(shí)候我們可以采用下面這種方式。

第二種方式:使用第三方STMP服務(wù)器:

很多郵箱服務(wù)的提供者會(huì)附帶提供stmp服務(wù),比如國(guó)內(nèi)常見(jiàn)的163郵箱和qq郵箱都有提供對(duì)應(yīng)的stmp服務(wù),我們可以使用這些stmp服務(wù)來(lái)實(shí)現(xiàn)發(fā)送郵件的功能(用以替代本地stmp服務(wù))

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 第三方 SMTP 服務(wù)
mail_host="smtp.XXX.com"  #設(shè)置服務(wù)器
mail_user="XXXX"    #用戶名
mail_pass="XXXXXX"   #口令 


sender = 'from@w3cschool.cn'  # 發(fā)件人
receivers = ['429240967@qq.com']  # 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱

message = MIMEText('Python 郵件發(fā)送測(cè)試...', 'plain', 'utf-8')
message['From'] = Header("W3Cschool教程", 'utf-8')
message['To'] =  Header("測(cè)試", 'utf-8')

subject = 'Python SMTP 郵件測(cè)試'
message['Subject'] = Header(subject, 'utf-8')


try:
    smtpObj = smtplib.SMTP() 
    smtpObj.connect(mail_host, 25)    # 25 為 SMTP 端口號(hào)
    smtpObj.login(mail_user,mail_pass)
    smtpObj.sendmail(sender, receivers, message.as_string())
    print ("郵件發(fā)送成功")
except smtplib.SMTPException:
    print ("Error: 無(wú)法發(fā)送郵件")

 注意:sender要修改成發(fā)件的用戶名,不然會(huì)報(bào)錯(cuò),另外,關(guān)于郵箱的口令并不是單純的郵箱密碼,詳見(jiàn)下文:

第三方郵件服務(wù)器支持

很多用戶并沒(méi)有本地的stmp服務(wù)器,而是采用郵箱服務(wù)商提供的stmp服務(wù)器,以常見(jiàn)的QQ郵箱為例,我們可以使用QQ賬號(hào)+@qq.com作為用戶名,QQ密碼作為密碼訪問(wèn)qq郵箱,但在上述代碼中并不能使用qq密碼作為密碼,這涉及到安全問(wèn)題。通常stmp服務(wù)采用的密碼是一個(gè)叫授權(quán)碼的字符串,也就是說(shuō)上述代碼的?mail_pass?實(shí)際上填寫(xiě)的是授權(quán)碼。這個(gè)授權(quán)碼可以到郵箱的設(shè)置中獲?。?/p>

獲取授權(quán)碼

小結(jié)

其實(shí)收發(fā)郵件這樣的功能,很多編程語(yǔ)言都有對(duì)應(yīng)的模塊,使用上也具有相似之處,代碼也比較容易理解,唯一容易困擾新人的就是郵件授權(quán)碼這個(gè)問(wèn)題。以上就是python怎么發(fā)送郵件的內(nèi)容。文內(nèi)代碼采用python3 教程Python3 SMTP發(fā)送郵件一文,更多詳細(xì)內(nèi)容可以前往查看。


0 人點(diǎn)贊