Python如何實(shí)現(xiàn)郵件功能
用Python的smtplib就可以簡(jiǎn)單的實(shí)現(xiàn)郵件功能。什么是SMTP?郵件功能怎么實(shí)現(xiàn)?
SMTP(Simple Mail Transfer Protocol)即簡(jiǎn)單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。
python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對(duì)smtp協(xié)議進(jìn)行了簡(jiǎn)單的封裝。
Python創(chuàng)建 SMTP 對(duì)象語法如下:
import smtplibsmtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
參數(shù)說明:
host: SMTP 服務(wù)器主機(jī)。 你可以指定主機(jī)的ip地址或者域名如: runoob.com,這個(gè)是可選參數(shù)。
port: 如果你提供了 host 參數(shù), 你需要指定 SMTP 服務(wù)使用的端口號(hào),一般情況下 SMTP 端口號(hào)為25。
local_hostname: 如果 SMTP 在你的本機(jī)上,你只需要指定服務(wù)器地址為 localhost 即可。
Python SMTP 對(duì)象使用 sendmail 方法發(fā)送郵件,語法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
參數(shù)說明:
from_addr: 郵件發(fā)送者地址。
to_addrs: 字符串列表,郵件發(fā)送地址。
msg: 發(fā)送消息
這里要注意一下第三個(gè)參數(shù),msg 是字符串,表示郵件。我們知道郵件一般由標(biāo)題,發(fā)信人,收件人,郵件內(nèi)容,附件等構(gòu)成,發(fā)送郵件的時(shí)候,要注意 msg 的格式。這個(gè)格式就是 smtp 協(xié)議中定義的格式。
分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
import smtplib, socketfromaddr = a@b.comtoaddrs = ['c@d.com', 'e@f.com']msg = open('multimsg.eml', 'r').read()try: server = smtplib.SMTP(’10.0.0.1’) result = server.sendmail(fromaddr, toaddrs, msg) server.quit() if result: for r in result.keys(): print 'Error sending to', r rt = result[r] print 'Code', rt[0], ':', rt[1]except (smtplib.SMTPException, socket.error), arg: print 'SMTP Server could not send mail', arg
實(shí)例補(bǔ)充:
python實(shí)現(xiàn)發(fā)送郵件功能
’’’套接字是為特定的網(wǎng)絡(luò)協(xié)議(例如TCP/IP,ICMP/IP,UDP/IP等),允許程序和接受并進(jìn)行連接,要在python 中建立具有TCP和流套接字的簡(jiǎn)單服務(wù)器,需要使用socket模塊,利用該模塊包含的函數(shù)和類定義,可生成通過網(wǎng)絡(luò)通信的程序,分為六步服務(wù)端的一些方法:1. 何為套接字內(nèi)核中套接字是一層一層進(jìn)行抽象展示的,把共性的東西抽取出來,這樣對(duì)外提供的接口可以盡量的統(tǒng)一,Socket函數(shù)中的三個(gè)參數(shù)其實(shí)就是把抽象的socket具體化的條件,famil參數(shù)決定了圖中所示的第二層通信域,type決定了第三層的通信模式,protocol決定了第四層真正的通信協(xié)議。首先了解這個(gè)內(nèi)容是是在哪個(gè)層?是如何通信的http://www.cnblogs.com/wangcq/p/3520400.html,看了以方法,大體服務(wù)器和客戶端就分為這幾步1.創(chuàng)建對(duì)象2.將socket綁定在指定地址上,socket.bing(地址)3.第3步,綁定后,必須準(zhǔn)備好套接字,對(duì)端口進(jìn)行監(jiān)聽 socket.listen(backlog)4.socket的accept方法等待客戶請(qǐng)求一個(gè)連接5.處理階段6.傳輸結(jié)束,服務(wù)器調(diào)用socket的close方法以關(guān)閉連接客戶端就為4個(gè)步驟:1.創(chuàng)建socket連接服務(wù)器2.使用socket的connect方法連接服務(wù)器 socket.connect((host,port))3.客戶和服務(wù)器通過send和recv方法通信4.調(diào)用socket的close方法通信’’’#encoding=utf-8import sockett = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ’’’創(chuàng)建socket對(duì)象,格式socket.socket(family,type),family格式是AF_INET(對(duì)于IPV4協(xié)議的TCP和 UDP),type參數(shù),SOCK_STREAM(流套接字,提供面向連接,可靠的數(shù)據(jù)服務(wù),用于TCP)或者 SOCK_DGRAM(數(shù)據(jù)報(bào)文套接字提供無無面向連接,不可靠的數(shù)據(jù)服務(wù),用于UDP),SOCK_RAW(raw套接字,較低層的協(xié)議)’’’t.connect((’smtp.126.com’, 25)) #建立連接print 'start', t.recv(1024) #使用recv方法通信,傳輸數(shù)據(jù) t.send('helo 126.comrn') #發(fā)送內(nèi)容print '111', t.recv(1024) t.send('auth loginrn') #進(jìn)行郵箱的登錄print '222', t.recv(1024) #打印在控制臺(tái)t.send('dGVzdG1hbjE5ODA=rn') #base64位方式編碼,解碼為:testman1980print '333', t.recv(1024) #打印在控制臺(tái)t.send('Zm9zdGVyd3UxOTc4rn')#base64位方式編碼,解碼為:fosterwu1978print '444', t.recv(1024) #打印在控制臺(tái)t.send('mail from:<xxx1980@126.com>rn') #發(fā)件人 這里不是很清楚同樣在下方的郵件內(nèi)容中,為何還要在一次print '555', t.recv(1024) #打印在控制臺(tái)t.send('rcpt to:<xxx@qq.com>rn') #改變了收件人,但是不明白下方也有一個(gè)收件人,下方是否會(huì)收到消息,并且優(yōu)先級(jí)是怎樣的,明天實(shí)驗(yàn)來看print '666', t.recv(1024) #打印在控制臺(tái)t.send('datarn') #data的作用目前還沒有發(fā)現(xiàn),明天實(shí)踐print '777', t.recv(1024) #打印在控制臺(tái)#發(fā)送郵件內(nèi)容t.send('from:xxx@126.comrn') #optional,可偽造別人的發(fā)件記錄t.send('to:xxx@qq.comrn') #optional,可發(fā)給任何人t.send('subject:hello!rn')t.send('rn') #按照smtp協(xié)議要求,在標(biāo)題后要發(fā)個(gè)空行t.send('mail test1111!rn') #發(fā)送郵件內(nèi)容t.send('.rn')print '888', t.recv(1024)
到此這篇關(guān)于Python如何實(shí)現(xiàn)郵件功能的文章就介紹到這了,更多相關(guān)Python實(shí)現(xiàn)郵件功能的方法內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. ASP基礎(chǔ)知識(shí)VBScript基本元素講解2. IntelliJ IDEA導(dǎo)入jar包的方法3. ajax請(qǐng)求添加自定義header參數(shù)代碼4. Kotlin + Flow 實(shí)現(xiàn)Android 應(yīng)用初始化任務(wù)啟動(dòng)庫5. Python requests庫參數(shù)提交的注意事項(xiàng)總結(jié)6. vue-electron中修改表格內(nèi)容并修改樣式7. 詳談ajax返回?cái)?shù)據(jù)成功 卻進(jìn)入error的方法8. 使用python 計(jì)算百分位數(shù)實(shí)現(xiàn)數(shù)據(jù)分箱代碼9. 使用Python和百度語音識(shí)別生成視頻字幕的實(shí)現(xiàn)10. python操作mysql、excel、pdf的示例
