python發(fā)送各類郵件的主要方法_第1頁
python發(fā)送各類郵件的主要方法_第2頁
python發(fā)送各類郵件的主要方法_第3頁
python發(fā)送各類郵件的主要方法_第4頁
python發(fā)送各類郵件的主要方法_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論