python運維開發經常使用模塊(6)發送電子郵件模塊smtplib

1.模塊經常使用方法

SMTP類定義:smtplib.SMTP([host[,port[,local_hostname[, timeout]]]]),做爲SMTP的構造函數,功能是與smtp服務器創建鏈接, 在鏈接成功後,就能夠向服務器發送相關請求,好比登陸、校驗、發 送、退出等。host參數爲遠程smtp主機地址,好比smtp.163.com;port爲 鏈接端口,默認爲25;local_hostname的做用是在本地主機的FQDN(完 整的域名)發送HELO/EHLO(標識用戶身份)指令,timeout爲鏈接或 嘗試在多少秒超時。php

SMTP類具備以下方法:html

SMTP.connect([host[,port]])方法,鏈接遠程smtp主機方法, host爲遠程主機地址,port爲遠程主機smtp端口,默認25,也能夠直接 使用host:port形式來表示,python

例如: SMTP.connect(「smtp.163.com」 , 「25」)。 ·chrome

SMTP.login(user,password)方法,遠程smtp主機的校驗方法, 參數爲用戶名與密碼,瀏覽器

例如: SMTP.login(「python_2014@163.com」 , 「sdjkg358」)。安全

SMTP.sendmail(from_addr,to_addrs,msg[,mail_options, rcpt_options])方法,實現郵件的發送功能,參數依次爲是發件人、收 件人、郵件內容,服務器

例如: SMTP.sendmail(「python_2014@163.com」 , 「demo@domail.com」 , body),其中body內容定義以下:app

"""From: python_2014@163.com To: demo@domail.com Subject: test mail test mail bodydom

 

2.最簡單的郵件代碼

#!/usr/bin/python
#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: smtplib01.py
# Author: BenjaminYang
# Create Date: 2019-05-18 08:55
# Modify Author: BenjaminYang
# Modify Date: 2019-05-18 08:55
# Function: 
#***************************************************************#
import smtplib
import string
HOST="smtp.163.com" #定義smtp主機
SUBJECT="python send email"
TO="1331xxxxxxx@163.com" #定義郵件的收件人
FROM="1331xxxxxxx@163.com" #定義郵件發件人
text="Python rules them all" #郵件內容
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")
server.starttls()  #啓動安全傳輸模式
server.login("1331xxxxxxx@163.com","yourpwd") #郵箱帳號登陸校驗
server.sendmail(FROM,TO,BODY) #郵件發送
server.quit()  #斷開smtp鏈接

執行後將會收到以下的郵件函數

3.定製個性化的郵件格式方法

經過郵件傳輸簡單的文本已經沒法知足咱們的需求,好比咱們時
常會定製業務質量報表,在郵件主體中會包含HTML、圖像、聲音以及 附件格式等,MIME(Multipurpose Internet Mail Extensions,多用途互聯 網郵件擴展)做爲一種新的擴展郵件格式很好地補充了這一點,更多 MIME知識見http://zh.wikipedia.org/wiki/MIME。下面介紹幾個Python中 經常使用的MIME實現類:

·email.mime.multipart.MIMEMultipart([_subtype[,boundary[, _subparts[,_params]]]]),做用是生成包含多個部分的郵件體的MIME 對象,參數_subtype指定要添加到"Content-type:multipart/subtype"報頭 的可選的三種子類型,分別爲mixed、related、alternative,默認值爲 mixed。定義mixed實現構建一個帶附件的郵件體;定義related實現構建 內嵌資源的郵件體;定義alternative則實現構建純文本與超文本共存的郵 件體。

·email.mime.audio.MIMEAudio(_audiodata[,_subtype[, _encoder[,**_params]]]),建立包含音頻數據的郵件體,_audiodata包 含原始二進制音頻數據的字節字符串。 

·email.mime.image.MIMEImage(_imagedata[,_subtype[, _encoder[,**_params]]]),建立包含圖片數據的郵件體,_imagedata是 包含原始圖片數據的字節字符串。 

·email.mime.text.MIMEText(_text[,_subtype[,_charset]]),建立 包含文本數據的郵件體,_text是包含消息負載的字符串,_subtype指定 文本類型,支持plain(默認值)或html類型的字符串。

 

能夠將email.mime理 解成smtplib模塊郵件內容主體的擴展,從原先默認只支持純文本格式擴 展到HTML,同時支持附件、音頻、圖像等格式,smtplib只負責郵件的 投遞便可。下面介紹在平常運營工做中郵件應用的幾個示例。 

示例1:實現HTML格式的數據報表

郵件純文本的郵件內容已經不能知足咱們多樣化的需求,本示例經過 引入email.mime的MIMEText類來實現支持HTML格式的郵件,支持全部
HTML元素,包含表格、圖片、動畫、CSS樣式、表單等。本示例使用 HTML的表格定製美觀的業務流量報表,實現代碼以下:

【/home/test/smtplib/simple2.py】

#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: smtplib02.py
# Author: BenjaminYang
# Create Date: 2019-06-01 20:04
# Modify Author: BenjaminYang
# Modify Date: 2019-06-01 20:04
# Function: 
#***************************************************************#

#!/usr/bin/python
import smtplib
from email.mime.text import MIMEText # 導入MIMEText類
HOST="smtp.163.com"  #定義smtp主機
Subject=u"官網流量數據表"  #定義郵件主題
To="1331xxxxxxx@163.com" #定義收件人
From="1331xxxxxxx@163.com" #定義發件人
#建立一個MIMEText對象,分別指定HTML內容、類型(文本或 html)、字符編碼
msg=MIMEText("""           
        <talbe  width="800" border="0" cellspacing="0" cellpadding="4">
         <tr>        
            <td bgcolor="#CECFAD" height="14px">*官網數據 
            <a href="monitor.domain.com">更多>></a>
            </td>      
         </tr><br>     
         <tr>        
            <td bgcolor="#EFEBDE" height="13px">        
            1)日訪問量:<font color=red>152433</font>  訪問次數:23651 頁面瀏覽量: 45123 點擊數:545122  數據流量:504Mb<br>        
            2)狀態碼信息<br>        &nbsp;&nbsp;500:105  404:3264  503:214<br>        
            3)訪客瀏覽器信息<br>        &nbsp;&nbsp;IE:50%  firefox:10% chrome:30% other:10%<br>        
            4)頁面信息<br>        &nbsp;&nbsp;/index.php 42153<br>        &nbsp;&nbsp;/view.php 21451<br>        &nbsp;&nbsp;/login.php 5112<br>        
            </td>      
        </tr>    
        </table>""","html","utf-8") 
msg['Subject']=Subject #郵件主題
msg['From']=From       #郵件發件人,郵件頭部可見
msg['To']=To           #郵件收件人,郵件頭部可見
try:
    server=smtplib.SMTP()  #建立一個SMTP()對象
    server.connect(HOST,"25")  #經過connect方法鏈接smtp主機
    server.starttls()          #啓動安全傳輸模式
    server.login("1331xxxxxxx@163.com","yourpwd") #郵箱登陸帳號
    server.sendmail(From,To,msg.as_string()) #郵件發送
    server.quit()  #斷開smtp鏈接
    print "郵件發送成功!"
except Exception, e:
    print "失敗:"+str(e)

示例2:實現圖文格式的服務器性能報表郵件

示例1經過MIMEText類來實現HTML格式的郵件,當要求包含圖片 數據的郵件內容時,須要引用MIMEImage類,若郵件主體由多個MIME 對象組成,則同時需引用MIMEMultipart類來進行組裝。本示例經過 MIMEText與MIMEImage類的組合來實現圖文格式的服務器性能報表郵 件的定製,實現代碼以下:

 【/home/test/smtplib/simple3.py】

#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: smtplib03.py
# Author: BenjaminYang
# Create Date: 2019-06-01 22:53
# Modify Author: BenjaminYang
# Modify Date: 2019-06-01 22:53
# Function: 
#***************************************************************#

#!/usr/bin/python
import smtplib
from email.mime.multipart import MIMEMultipart #導入MIMEMultipart類 
from email.mime.text import MIMEText          #導入MIMEText類 
from email.mime.image import MIMEImage        #導入MIMEImage類 
HOST="smtp.163.com"     #定義smtp主機
SUBJECT=u"業務性能數據報表" #定義郵件主題 
TO="1331xxxxxxx@163.com"    #定義郵件收件人
FROM="1331xxxxxxx@163.com"  #定義郵件發件人 
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
msg=MIMEMultipart("related")                                               
#標籤src用到return msgImage 返回msgImage對象 msg = MIMEMultipart('related')建立MIMEMultipart對象,採用related定義內嵌 資源的郵件體 
#建立一個MIMEText對象,HTML元素包括表格<table>及圖片 <img>
msgtext = MIMEText("""   
    <table width="600" border="0" cellspacing="0" cellpadding="4">     
        <tr bgcolor="#CECFAD" height="14px">        
            <td colspan=2>*官網性能數據  <a href="monitor.domain.com">更多>></a> </td>
        </tr>      
        <tr bgcolor="#EFEBDE" height="13px">        
            <td> <img src="cid:io"></td>
            <td> <img src="cid:key_hit"></td>      
        </tr>      
        <tr bgcolor="#EFEBDE" height="13px">         
            <td><img src="cid:mem"></td>
            <td><img src="cid:swap"></td>      
        </tr>   
    </table>""","html","utf-8")
msg.attach(msgtext)  
msg.attach(addimg("img/bytes_io.png","io"))  
msg.attach(addimg("img/myisam_key_hit.png","key_hit"))
msg.attach(addimg("img/os_swap.png","swap"))
msg.attach(addimg("img/os_mem.png","mem"))

msg['Subject']=SUBJECT 
msg['From']=FROM
msg['To']=TO
try:
    server=smtplib.SMTP()
    server.connect(HOST,"25")
    server.starttls()
    server.login("1331xxxxxxx@163.com","yourpwd")  #郵箱帳號登陸效驗
    server.sendmail(FROM,TO,msg.as_string())  
    server.quit() 
    print '郵件發送成功!'
except Exception,e:
    print "失敗:"+str(e)

 

示例3:實現帶附件格式的業務服務質量週報郵件

本示例經過MIMEText與MIMEImage類的組合,實現圖文郵件格 式。另經過MIMEText類再定義Content-Disposition屬性來實現帶附件的 郵件。咱們能夠利用這些豐富的特性來定製週報郵件,如業務服務質量 週報。實現代碼以下: 

 【/home/test/smtplib/simple4.py】

 

#_*_coding:utf-8_*_
#****************************************************************#
# ScriptName: smtplib03.py
# Author: BenjaminYang
# Create Date: 2019-06-01 22:53
# Modify Author: BenjaminYang
# Modify Date: 2019-06-01 22:53
# Function: 
#***************************************************************#

#!/usr/bin/python
import smtplib
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart #導入MIMEMultipart類 
from email.mime.text import MIMEText          #導入MIMEText類 
from email.mime.image import MIMEImage        #導入MIMEImage類 
HOST="smtp.163.com"     #定義smtp主機
SUBJECT=u"業務性能數據報表" #定義郵件主題 
TO="342037867@qq.com"    #定義郵件收件人
FROM="1331xxxxxxx@163.com"  #定義郵件發件人 
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
msg=MIMEMultipart()                                               
#標籤src用到return msgImage 返回msgImage對象 msg = MIMEMultipart('related')建立MIMEMultipart對象,採用related定義內嵌 資源的郵件體 
#建立一個MIMEText對象,HTML元素包括表格<table>及圖片 <img>
msgtext = MIMEText(
        "<font color=red>官網業務周平均延時圖表:<br><img src=\"cid:weekly\" border=\"1\"><br>詳細內容見附件。</font>"
        ,"html","utf-8")

msg.attach(msgtext)   #MIMEMultipart對象附加MIMEText的內容 
msg.attach(addimg("img/weekly.jpg","weekly"))

#建立一個MIMEText對象,附加week_report.xlsx文檔
attach = MIMEText(open("doc/week_report.xlsx","rb").read(),'base64','utf-8') 
attach["Content-Type"] = 'application/octet-stream'#指定文件格式類型 
#指定Content-Disposition值爲attachment則出現下載保存對話框,保存的默認文件名使用filename指定
#因爲qqmail使用gb18030頁面編碼,爲保證中文文件名不出現亂碼,對文件名進行編碼轉換
attach["Content-Disposition"] = "attachment;filename=\"業務服務質量週報(12 周).xlsx\"".decode("utf-8").encode("gb18030")

msg.attach(attach)   #MIMEMultipart對象附加MIMEText的內容 
msg['Subject']=SUBJECT 
msg['From']=FROM
msg['To']=TO
try:
    server=smtplib.SMTP()
    server.connect(HOST,"25")
    server.starttls()
    server.login("1331xxxxxxx@163.com","yourpwd")  #郵箱帳號登陸效驗
    server.sendmail(FROM,TO,msg.as_string())  
    server.quit() 
    print '郵件發送成功!'
except Exception,e:
    print "失敗:"+str(e)

 

相關文章
相關標籤/搜索