python使用電子郵件模塊smtplib的方法(發送圖片 附件)實用可行
Smptp類定義:smtplib.SMTP(host[,port[,local_hostname[,,timeout]]]),作為SMTP的構造函數,功能是與smtp服務器建立連接,在連接成功後,就可以向服務器發送相關請求,比如登陸,校驗,發送,退出等。host參數為遠程smtp主機地址,比如stmp.163.com;port為連接端口,默認為25;local_hostname的作用是在本地的FQDN(完整的域名)發送HELO/EHLO指令,timeout為連接或嘗試在多數秒超時,SMTP類具有如下方法:
SMTP.connect([host[,port]])方法,連接遠程smtp主機方法,host為遠程主機地址,port為遠程主機smtp端口,默認25,也可以直接使用host:port形式表示,例如:SMTP.connect("smtp.163.com","25‘).
SMTP.login(user,password)方法,遠程smtp主機的校驗方法,參數為用戶名與密碼,如SMTP.login("[email protected]
SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options])方法,實現郵件的發送功能,參數依次為發件人,收件人,郵件內容,例如:SMTP.sendmail("[email protected]",[email protected],body),其中body內容定義如下:
"""From:[email protected]
To:[email protected]
Subject:test mail
test mail body"""
SMTP.starttls([keyfile[,certfile]])方法,啟用TLS(安全傳輸)模式,所有SMTP指令都講加密傳輸,例如使用gmail的stmp服務器時需要啟動此項才能正常發送郵件
SMTP.quit()方法,端口smtp服務器的連接
下面通過實例列子來了解python是怎麽發送郵件
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[[email protected] smtplib] # cat simple1.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
import string
HOST = "smtp.139.com" #定義smtp主機
SUBJECT = "test" #定義郵件主題
TO = "[email protected]/* */" #定義郵件收件人
FROM = "[email protected]" #定義郵件發件人
text = "python test mail" #郵件的內容
BODY = string.join(( #組裝sendmail方法的郵件主體內容,各段以"\r\n"進行分隔
"From:%s" % FROM,
"To:%s" % TO,
"Subject:%s" % SUBJECT,
"",
text
), "\r\n" )
server = smtplib.SMTP() #創建一個SMTP對象
server.connect(HOST, "25" ) #通過connect方法連接smtp主機
server.starttls() #啟動安全傳輸模式
server.login( "[email protected]" , "123456" ) #郵件賬戶登錄校驗
server.sendmail(FROM,TO,BODY) #郵件發送
server.quit() #斷開smtp連接
|
執行這段代碼,我們將受到一封郵件
實現HTML格式的數據報表郵件
純文本的郵件內容已經不能滿足我們多樣化的需求,本示例通過引入email.mime的MIMETex類來實現支持HTML格式的郵件,支持所有HTML元素,包含表格,圖片,動畫,CSS樣式,表單等。本示例使用HTML的表格定制完美的業務流量報表,實現代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#!/usr/bin/env python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText #導入MIMEText類
HOST = "smtp.139.com"
SUBJECT = u "官網流量數據報表"
TO = "[email protected]"
FROM = "[email protected]"
msg = MIMEText( """
<table width="800" border="0" cellspacing="0" cellpadding="4">
<tr>
<td bgcolor="#CECFAD" height="20" style="font-size:14px">*官網數據<a href="monitor.domain.com">更多</a></td>
</tr>
<td bgcolor="#EFEBDE" height="100" style="font-size:13px">
1)日訪問量:<font color=read>152433</font>訪問次數:23651 頁面瀏覽量:45123 點擊數:545122 數據流量:504Mb<br>
2)狀態碼消息<br>
500:105 404;3264 503;214<br>
3)訪客瀏覽器信息<br>
IE:50% firefox:10% chrome:30% other:10%<br>
4)頁面信息<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( [email protected] , ‘123456‘ )
server.sendmail(FROM,TO,msg.as_string())
server.quit()
print "郵件發送成功"
except Exception,e:
print "失敗:" + str (e)
|
運行代碼結果如圖,
示例2:實現圖文格式的服務器性能報表郵件
當要求包含圖片數據的郵件內容時,需要引用MIMEImage類,若郵件主體由多個MIME對象組成,則同時需要引用MIMEMultipart類來進行封裝。本示例通過MIMEText與MIMEImage類的組合來實現圖文格式的服務器性能報表郵件的定制,實現代碼如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#!/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主機
SUBJECT = "金美美平臺系統狀態報表" #定義郵件主題
TO = "[email protected],[email protected]" #定義郵件收件人
FROM = "[email protected]" #定義郵件發件人
TO_list = TO.split(TO)
def addimg(src,imgid): #添加圖片函數,參數1:圖片路徑,參數2:圖片ID
fp = open (src, ‘rb‘ ) #打開文件
msgImage = MIMEImage(fp.read()) #創建MIMEImage對象,讀取圖片內容並作為參數
fp.close() #關閉文件
msgImage.add_header( ‘Content-ID‘ ,imgid) #指定圖片文件的Content-ID,<img>標簽src用到
return msgImage #返回msgImage對象
msg = MIMEMultipart( ‘related‘ ) #創建MIMEMultipart對象,采用related定義內嵌資源的郵件體
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系統狀態圖</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>標簽的src屬性是通過Content-ID來引用的
msg.attach(msgtext) #MIMEMultipart對象附加MIMEText的內容
msg.attach(addimg( "img/bytes_io.png" , "io" )) #使用MIMEMultipart對象附加MIMEImage的內容
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( [email protected] , ‘123456‘ )
server.sendmail(FROM,TO_list,msg.as_string())
server.quit()
print "郵件發送成功!"
except Exception,e:
print "失敗:" + str (e)
|
代碼運行效果如圖
python使用電子郵件模塊smtplib的方法(發送圖片 附件)實用可行