python使用電子郵件模塊smtplib的方法
Smptp類定義:smtplib.SMTP(host[,port[,local_hostname[,,timeout]]]),作為SMTP的構(gòu)造函數(shù),功能是與smtp服務(wù)器建立連接,在連接成功后,就可以向服務(wù)器發(fā)送相關(guān)請(qǐng)求,比如登陸,校驗(yàn),發(fā)送,退出等。host參數(shù)為遠(yuǎn)程smtp主機(jī)地址,比如stmp.163.com;port為連接端口,默認(rèn)為25;local_hostname的作用是在本地的FQDN(完整的域名)發(fā)送HELO/EHLO指令,timeout為連接或嘗試在多數(shù)秒超時(shí),SMTP類具有如下方法:
SMTP.connect([host[,port]])方法,連接遠(yuǎn)程smtp主機(jī)方法,host為遠(yuǎn)程主機(jī)地址,port為遠(yuǎn)程主機(jī)smtp端口,默認(rèn)25,也可以直接使用host:port形式表示,例如:SMTP.connect("smtp.163.com","25').
SMTP.login(user,password)方法,遠(yuǎn)程smtp主機(jī)的校驗(yàn)方法,參數(shù)為用戶名與密碼,如SMTP.login("18801457794@139.com",'123456').
SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options])方法,實(shí)現(xiàn)郵件的發(fā)送功能,參數(shù)依次為發(fā)件人,收件人,郵件內(nèi)容,例如:SMTP.sendmail("python@163.com",'404408853@qq.com',body),其中body內(nèi)容定義如下:
"""From:python@163.com
To:404408853@qq.com
Subject:test mail
test mail body"""
SMTP.starttls([keyfile[,certfile]])方法,啟用TLS(安全傳輸)模式,所有SMTP指令都講加密傳輸,例如使用gmail的stmp服務(wù)器時(shí)需要啟動(dòng)此項(xiàng)才能正常發(fā)送郵件
SMTP.quit()方法,端口smtp服務(wù)器的連接
下面通過實(shí)例列子來(lái)了解python是怎么發(fā)送郵件
[root@localhost smtplib]# cat simple1.py #!/usr/bin/env python # -*- coding: utf-8 -*- import smtplib import string HOST = "smtp.139.com" #定義smtp主機(jī) SUBJECT = "test" #定義郵件主題 TO = "404408853@qq.com" #定義郵件收件人 FROM = "18801457794@139.com" #定義郵件發(fā)件人 text = "python test mail" #郵件的內(nèi)容 BODY=string.join(( #組裝sendmail方法的郵件主體內(nèi)容,各段以"\r\n"進(jìn)行分隔 "From:%s" %FROM, "To:%s" %TO, "Subject:%s"%SUBJECT, "", text ),"\r\n") server = smtplib.SMTP() #創(chuàng)建一個(gè)SMTP對(duì)象 server.connect(HOST,"25") #通過connect方法連接smtp主機(jī) server.starttls() #啟動(dòng)安全傳輸模式 server.login("18801457794@139.com","123456") #郵件賬戶登錄校驗(yàn) server.sendmail(FROM,TO,BODY) #郵件發(fā)送 server.quit() #斷開smtp連接
執(zhí)行這段代碼,我們將受到一封郵件
實(shí)現(xiàn)HTML格式的數(shù)據(jù)報(bào)表郵件
純文本的郵件內(nèi)容已經(jīng)不能滿足我們多樣化的需求,本示例通過引入email.mime的MIMETex類來(lái)實(shí)現(xiàn)支持HTML格式的郵件,支持所有HTML元素,包含表格,圖片,動(dòng)畫,CSS樣式,表單等。本示例使用HTML的表格定制完美的業(yè)務(wù)流量報(bào)表,實(shí)現(xiàn)代碼如下:
#!/usr/bin/env python #coding:utf-8 import smtplib from email.mime.text import MIMEText #導(dǎo)入MIMEText類 HOST = "smtp.139.com" SUBJECT = u"官網(wǎng)流量數(shù)據(jù)報(bào)表" TO = "404408853@qq.com" FROM = "18801457794@139.com" msg = MIMEText(""" <table width="800" border="0" cellspacing="0" cellpadding="4"> <tr> <td bgcolor="#CECFAD" height="20" style="font-size:14px">*官網(wǎng)數(shù)據(jù)<a href="monitor.domain.com">更多</a></td> </tr> <td bgcolor="#EFEBDE" height="100" style="font-size:13px"> 1)日訪問量:<font color=read>152433</font>訪問次數(shù):23651 頁(yè)面瀏覽量:45123 點(diǎn)擊數(shù):545122 數(shù)據(jù)流量:504Mb<br> 2)狀態(tài)碼消息<br> 500:105 404;3264 503;214<br> 3)訪客瀏覽器信息<br> IE:50% firefox:10% chrome:30% other:10%<br> 4)頁(yè)面信息<br> /index.php 42153<br> /view.php 21451<br> </td> </tr> </table>""","html","utf-8") msg['Subject'] = SUBJECT msg['FROM'] = FROM msg['To'] = TO try: server = smtplib.SMTP() server.connect(HOST,'25') server.starttls() server.login('18801457794@139.com','123456') server.sendmail(FROM,TO,msg.as_string()) server.quit() print "郵件發(fā)送成功" except Exception,e: print "失敗:" + str(e)
運(yùn)行代碼結(jié)果如圖,
示例2:實(shí)現(xiàn)圖文格式的服務(wù)器性能報(bào)表郵件
當(dāng)要求包含圖片數(shù)據(jù)的郵件內(nèi)容時(shí),需要引用MIMEImage類,若郵件主體由多個(gè)MIME對(duì)象組成,則同時(shí)需要引用MIMEMultipart類來(lái)進(jìn)行封裝。本示例通過MIMEText與MIMEImage類的組合來(lái)實(shí)現(xiàn)圖文格式的服務(wù)器性能報(bào)表郵件的定制,實(shí)現(xiàn)代碼如下
#!/usr/bin/env python #coding: utf-8 import smtplib,string from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage HOST ="smtp.139.com" #定義smtp主機(jī) SUBJECT = "金美美平臺(tái)系統(tǒng)狀態(tài)報(bào)表" #定義郵件主題 TO = "404408853@qq.com,302803690@qq.com" #定義郵件收件人 FROM = "18801457794@139.com" #定義郵件發(fā)件人 TO_list = TO.split(TO) def addimg(src,imgid): #添加圖片函數(shù),參數(shù)1:圖片路徑,參數(shù)2:圖片ID fp = open(src,'rb') #打開文件 msgImage = MIMEImage(fp.read()) #創(chuàng)建MIMEImage對(duì)象,讀取圖片內(nèi)容并作為參數(shù) fp.close() #關(guān)閉文件 msgImage.add_header('Content-ID',imgid) #指定圖片文件的Content-ID,<img>標(biāo)簽src用到 return msgImage #返回msgImage對(duì)象 msg = MIMEMultipart('related') #創(chuàng)建MIMEMultipart對(duì)象,采用related定義內(nèi)嵌資源的郵件體 msgtext = MIMEText(""" <table width="600" border="0" cellspacing="0" cellspacing="4"> <tr bgcolor="#CECFAD" height="20" style="font-size:14px"> <td colspan=2>以下是211.157.111.41系統(tǒng)狀態(tài)圖</td> </tr> <tr bgcolor="#EFEBDE" height="100" style="font-size:13px"> <td> <img src="cid:io"></td><td> <img src="cid:load"></td> </tr> <tr bgcolor="#EFEBDE" height="100" style="font-size:13px"> <td> <img src="cid:mem"></td><td> <img src="cid:disk"></td> </tr> </table>""","html","utf-8") #<img>標(biāo)簽的src屬性是通過Content-ID來(lái)引用的 msg.attach(msgtext) #MIMEMultipart對(duì)象附加MIMEText的內(nèi)容 msg.attach(addimg("img/bytes_io.png","io")) #使用MIMEMultipart對(duì)象附加MIMEImage的內(nèi)容 msg.attach(addimg("img/os_load.png","load")) msg.attach(addimg("img/os_mem.png","mem")) msg.attach(addimg("img/os_disk.png","disk")) msg['Subject'] = SUBJECT msg['FROM']=FROM msg['To'] = TO try: server = smtplib.SMTP() server.connect(HOST,"25") server.starttls() server.login('18801457794@139.com','123456') server.sendmail(FROM,TO_list,msg.as_string()) server.quit() print "郵件發(fā)送成功!" except Exception,e: print "失敗:"+ str(e)
代碼運(yùn)行效果如圖
相關(guān)文章
Numpy ndarray 多維數(shù)組對(duì)象的使用
這篇文章主要介紹了Numpy ndarray 多維數(shù)組對(duì)象的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02淺談keras中的batch_dot,dot方法和TensorFlow的matmul
這篇文章主要介紹了淺談keras中的batch_dot,dot方法和TensorFlow的matmul,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-06-06pytorch模型的定義、修改、讀取、斷點(diǎn)續(xù)訓(xùn)深入解析
模型定義是深度學(xué)習(xí)中重要的一環(huán),PyTorch提供了強(qiáng)大而靈活的工具和函數(shù),使我們能夠輕松定義各種類型的深度學(xué)習(xí)模型,通過深入理解模型定義的原理和應(yīng)用,我們能夠更好地理解和設(shè)計(jì)自己的模型,從而提升深度學(xué)習(xí)任務(wù)的性能和效果2024-03-03利用Python爬蟲爬取金融期貨數(shù)據(jù)的案例分析
從技術(shù)角度來(lái)看,經(jīng)過一步步解析,任務(wù)是簡(jiǎn)單的,入門requests爬蟲及入門pandas數(shù)據(jù)分析就可以完成,本文重點(diǎn)給大家介紹Python爬蟲爬取金融期貨數(shù)據(jù)的案例分析,感興趣的朋友一起看看吧2022-06-06Pandas數(shù)據(jù)查詢的集中實(shí)現(xiàn)方法
本文主要介紹了Pandas數(shù)據(jù)查詢的集中實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02