版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、python發(fā)送各類郵件的主要方法已有1人參與python中email模塊使得處理郵件變得比較簡單,今天著重學(xué)習(xí)了一下發(fā)送郵件的具體做法,這里寫寫自己的的心得,也請高手給些指點。 一、相關(guān)模塊介紹 發(fā)送郵件主要用到了smtplib和email兩個模塊,這里首先就兩個模塊進行一下簡單的介紹: 1、smtplib模塊 smtplib.SMTP(host, port, local_hostname, timeout)SMTP類構(gòu)造函數(shù),表示與SMTP服務(wù)器之間的連接,通過這個連接可以向smtp服務(wù)器發(fā)送指令,執(zhí)行相關(guān)操作(如:登陸、發(fā)送郵件)。所有參數(shù)都是可選的。 host:smtp服務(wù)器主機名 p
2、ort:smtp服務(wù)的端口,默認是25;如果在創(chuàng)建SMTP對象的時候提供了這兩個參數(shù),在初始化的時候會自動調(diào)用connect方法去連接服務(wù)器。smtplib模塊還提供了SMTP_SSL類和LMTP類,對它們的操作與SMTP基本一致。smtplib.SMTP提供的方法: SMTP.set_debuglevel(level):設(shè)置是否為調(diào)試模式。默認為False,即非調(diào)試模式,表示不輸出任何調(diào)試信息。 SMTP.connect(host, port):連接到指定的smtp服務(wù)器。參數(shù)分別表示smpt主機和端口。注意: 也可以在host參數(shù)中指定端口號(如::25),這樣就
3、沒必要給出port參數(shù)。 SMTP.docmd(cmd, argstring):向smtp服務(wù)器發(fā)送指令。可選參數(shù)argstring表示指令的參數(shù)。 SMTP.helo(hostname) :使用helo指令向服務(wù)器確認身份。相當(dāng)于告訴smtp服務(wù)器“我是誰”。 SMTP.has_extn(name):判斷指定名稱在服務(wù)器郵件列表中是否存在。出于安全考慮,smtp服務(wù)器往往屏蔽了該指令。 SMTP.verify(address) :判斷指定郵件地址是否在服務(wù)器中存在。出于安全考慮,smtp服務(wù)器往往屏蔽了該指令。 SMTP.login(user, password) :登陸到smtp服務(wù)器。現(xiàn)
4、在幾乎所有的smtp服務(wù)器,都必須在驗證用戶信息合法之后才允許發(fā)送郵件。 SMTP.sendmail(from_addr, to_addrs, msg, mail_options, rcpt_options) :發(fā)送郵件。這里要注意一下第三個參數(shù),msg是字符串,表示郵件。我們知道郵件一般由標(biāo)題,發(fā)信人,收件人,郵件內(nèi)容,附件等構(gòu)成,發(fā)送郵件的時候,要注意msg的格式。這個格式就是smtp協(xié)議中定義的格式。 SMTP.quit() :斷開與smtp服務(wù)器的連接,相當(dāng)于發(fā)送quit指令。(很多程序中都用到了smtp.close(),具體與quit的區(qū)別google了一下,也沒找到答案。) 2、e
5、mail模塊 emial模塊用來處理郵件消息,包括MIME和其他基于RFC 2822 的消息文檔。使用這些模塊來定義郵件的內(nèi)容,是非常簡單的。其包括的類有(更加詳細的介紹可見:/library/email.mime.html): class email.mime.base.MIMEBase(_maintype, _subtype, *_params):這是MIME的一個基類。一般不需要在使用時創(chuàng)建實例。其中_maintype是內(nèi)容類型,如text或者image。_subtype是內(nèi)容的minor type 類型,如plain或者gif。 *_param
6、s是一個字典,直接傳遞給Message.add_header()。 class email.mime.multipart.MIMEMultipart(_subtype, boundary, _subparts, _params:MIMEBase的一個子類,多個MIME對象的集合,_subtype默認值為mixed。boundary是MIMEMultipart的邊界,默認邊界是可數(shù)的。 class email.mime.application.MIMEApplication(_data, _subtype, _encoder, *_params):MIMEMultipart的一個子類。 clas
7、s email.mime.audio. MIMEAudio(_audiodata, _subtype, _encoder, *_params): MIME音頻對象 class email.mime.image.MIMEImage(_imagedata, _subtype, _encoder, *_params):MIME二進制文件對象。 class email.mime.message.MIMEMessage(_msg, _subtype):具體的一個message實例,使用方法如下: msg=mail.Message.Message() #一個實例msgto=XXXXXX.com #發(fā)送到哪
8、里msgfrom=YYYYYYY.com #自己的郵件地址msgdate=2012-3-16 #時間日期msgsubject=hello world #郵件主題復(fù)制代碼 class email.mime.text.MIMEText(_text, _subtype, _charset):MIME文本對象,其中_text是郵件內(nèi)容,_subtype郵件類型,可以是text/plain(普通文本郵件),html/plain(html郵件),_charset編碼,可以是gb2312等等。 二、幾種郵件的具體實現(xiàn)代碼 1、普通文本郵件 普通文本郵件發(fā)送的實現(xiàn),關(guān)鍵是要將MIMEText中_subtype
9、設(shè)置為plain。首先導(dǎo)入smtplib和mimetext。創(chuàng)建smtplib.smtp實例,connect郵件smtp服務(wù)器,login后發(fā)送,具體代碼如下:(python2.6下實現(xiàn))# -*- coding: UTF-8 -*-發(fā)送txt文本郵件小五義:/xiaowuyiimport smtplibfrom email.mime.text import MIMETextmailto_list=YYYYYY.commail_host=smtp.XXX.com#設(shè)置服務(wù)器mail_user=XXXX #用戶名mail_pass=XXXXXX #口令m
10、ail_postfix=XXX.com#發(fā)件箱的后綴def send_mail(to_list,sub,content): me=hello+ msg = MIMEText(content,_subtype=plain,_charset=gb2312) msgSubject = sub msgFrom = me msgTo = ;.join(to_list) try: server = smtplib.SMTP() server.connect(mail_host) server.login(mail_user,mail_pass) server.sendmail(me, to_list, m
11、sg.as_string() server.close() return True except Exception, e: print str(e) return Falseif _name_ = _main_: if send_mail(mailto_list,hello,hello world!: print 發(fā)送成功 else: print 發(fā)送失敗復(fù)制代碼 2、html郵件的發(fā)送 與text郵件不同之處就是將將MIMEText中_subtype設(shè)置為html。具體代碼如下:(python2.6下實現(xiàn))# -*- coding: utf-8 -*-發(fā)送html文本郵件小五義:http:
12、//xiaowuyiimport smtplibfrom email.mime.text import MIMETextmailto_list=YYYYYY.commail_host=smtp.XXX.com#設(shè)置服務(wù)器mail_user=XXX #用戶名mail_pass=XXXX #口令mail_postfix=XXX.com#發(fā)件箱的后綴def send_mail(to_list,sub,content):#to_list:收件人;sub:主題;content:郵件內(nèi)容 me=hello+ #這里的hello可以任意設(shè)置,收到信后,將按照設(shè)置顯示 msg =
13、 MIMEText(content,_subtype=html,_charset=gb2312) #創(chuàng)建一個實例,這里設(shè)置為html格式郵件 msgSubject = sub #設(shè)置主題 msgFrom = me msgTo = ;.join(to_list) try: s = smtplib.SMTP() s.connect(mail_host)#連接smtp服務(wù)器 s.login(mail_user,mail_pass)#登陸服務(wù)器 s.sendmail(me, to_list, msg.as_string()#發(fā)送郵件 s.close() return True except Excep
14、tion, e: print str(e) return Falseif _name_ = _main_: if send_mail(mailto_list,hello,小五義: print 發(fā)送成功 else: print 發(fā)送失敗 復(fù)制代碼 3、發(fā)送帶附件的郵件 發(fā)送帶附件的郵件,首先要創(chuàng)建MIMEMultipart()實例,然后構(gòu)造附件,如果有多個附件,可依次構(gòu)造,最后利用smtplib.smtp發(fā)送。# -*- coding: cp936 -*-發(fā)送帶附件郵件小五義:/xiaowuyifrom email.mime.text import MI
15、METextfrom email.mime.multipart import MIMEMultipartimport smtplib#創(chuàng)建一個帶附件的實例msg = MIMEMultipart()#構(gòu)造附件1att1 = MIMEText(open(d:123.rar, rb).read(), base64, gb2312)att1Content-Type = application/octet-streamatt1Content-Disposition = attachment; filename=123.doc#這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字msg.att
16、ach(att1)#構(gòu)造附件2att2 = MIMEText(open(d:123.txt, rb).read(), base64, gb2312)att2Content-Type = application/octet-streamatt2Content-Disposition = attachment; filename=123.txtmsg.attach(att2)#加郵件頭msgto = YYYYYY.commsgfrom = XXXXXX.commsgsubject = hello world#發(fā)送郵件try: server = smtplib.SMTP() server.conne
17、ct(smtp.XXX.com) server.login(XXX,XXXXX)#XXX為用戶名,XXXXX為密碼 server.sendmail(msgfrom, msgto,msg.as_string() server.quit() print 發(fā)送成功except Exception, e: print str(e)復(fù)制代碼 4、利用MIMEimage發(fā)送圖片 # -*- coding: cp936 -*-import smtplibimport mimetypesfrom email.mime.text import MIMETextfrom email.mime.multipart
18、import MIMEMultipartfrom email.mime.image import MIMEImagedef AutoSendMail(): msg = MIMEMultipart() msgFrom = XXXXXX.com msgTo = YYYYYY.com msgSubject = hello world txt = MIMEText(這是中文的郵件內(nèi)容哦,plain,gb2312) msg.attach(txt) file1 = C:hello.jpg image = MIMEImage(open(file1,rb).read() image.add_header(Content-ID,) msg.attach(image) serve
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 四川省引大濟岷水資源開發(fā)有限公司公開遴選工作人員考試備考題庫及答案解析
- 2026年武漢經(jīng)開區(qū)教育系統(tǒng)校園專項招聘教師50人筆試備考試題及答案解析
- 2026年濟寧市直教育系統(tǒng)急需緊缺人才招聘(52名)考試參考題庫及答案解析
- 2026江西吉安市吉水縣城控人力資源服務(wù)有限公司招聘勞務(wù)外包1人(一)考試參考題庫及答案解析
- 2026中國聯(lián)通招聘博士后工作站校園招聘(福建有崗)考試參考題庫及答案解析
- 資陽市雁江區(qū)區(qū)屬國有企業(yè)招聘(15人)考試備考試題及答案解析
- 2025黑龍江交通職業(yè)技術(shù)學(xué)院“黑龍江人才周”招聘38人考試備考題庫及答案解析
- 2026上海虹口紅樹林志愿服務(wù)分隊招募考試參考試題及答案解析
- 2026年金華武義縣中心血庫招聘編外衛(wèi)技人員1人考試備考題庫及答案解析
- 2026內(nèi)蒙古赤峰市寧城縣八里罕中學(xué)招聘公益性崗位人員1人考試參考試題及答案解析
- GB/T 2091-2008工業(yè)磷酸
- GB/T 12234-2019石油、天然氣工業(yè)用螺柱連接閥蓋的鋼制閘閥
- GA/T 947.4-2015單警執(zhí)法視音頻記錄系統(tǒng)第4部分:數(shù)據(jù)接口
- 手衛(wèi)生規(guī)范-課件
- 隱身技術(shù)概述課件
- 主題班會PPt-敬畏規(guī)則
- (卓越績效)質(zhì)量獎申報材料
- 樂業(yè)彎里金礦采礦權(quán)評價報告廣西壯族自治區(qū)國土資源廳
- 因私出國(境)申請(備案)表
- DB50-T 867.29-2022 安全生產(chǎn)技術(shù)規(guī)范 第29部分:有色金屬壓力加工企業(yè)
- 危重病人搶救配合PPT課件(PPT 29頁)
評論
0/150
提交評論