1. 程式人生 > >python學習-smtplib模塊

python學習-smtplib模塊

部分 dem aud mine ron 無法 實現類 multi 字符串

python的stmplib模塊可以實現郵件的發送功能,可以模擬一個smtp客戶端。在python2.3或者更高版本默認自帶smtplib模塊,無需額外安裝。


一、smtplibi模塊的常用類與方法

smtp類定義:smtplib([host[,port[,local_hostname[,timeout]]]),作為smtp的構造函數,功能是與smtp服務器建立連接,在連接成功後,就可以向服務器發送相關請求,比如登錄、校驗、發送、退出等。host參數為遠程smtp主機地址,比如smtp.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]","sdjkg358")。

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[,cerfile]])方法

啟用TLS(安全傳輸)模式,所有SMTP指令都將加密傳輸,例如使用gmail的smtp服務時需要啟動此項才能正常發送郵件,如SMTP.starttls()。

SMTP.quit()方法

斷開smtp服務器的連接


代碼示例-使用tls連接,端口為25

#!/usr/bin/python
#coding=utf-8
import smtplib
import string

HOST = "smtp.xxxxxxxx.com" #定義smtp主機
SUBJECT = "Test email from Python" #定義郵件主題
TO = "[email protected]" #定義郵件收件人
FROM = "[email protected]" #定義郵件發件人
text = "Python rules them all!"     #郵件內容
BODY = string.join((                #組裝sdemail方法的郵件內容,各段以"\r\n"進行分隔
        "From: %s" % FROM,          
        "To: %s" % TO,
        "Subject: %s" % SUBJECT ,
        "",
        text
        ), "\r\n")
server = SMTP_SSL()            #創建一個SMTP()對象
server.connect(HOST,"25")           #通過connect方法連接smtp主機
server.starttls()                   #啟動安全傳輸魔術
server.login("[email protected]","xxxxxxxxxxx")   #郵箱賬號登錄校驗
server.sendmail(FROM, [TO], BODY)  #郵件發送
server.quit()                      #斷開連接


代碼示例,使用第二種ssl加密,端口465,這是最常用的方式

#!/usr/bin/python
#coding=utf-8
import smtplib
import string
from smtplib import SMTP_SSL  #采用SSL加密模塊
HOST = "smtp.xxxxxxxx.com" #定義smtp主機
SUBJECT = "Test email from Python" #定義郵件主題
TO = "[email protected]" #定義郵件收件人
FROM = "[email protected]" #定義郵件發件人
text = "Python rules them all!"     #郵件內容
BODY = string.join((                #組裝sdemail方法的郵件內容,各段以"\r\n"進行分隔
        "From: %s" % FROM,          
        "To: %s" % TO,
        "Subject: %s" % SUBJECT ,
        "",
        text
        ), "\r\n")
server = SMTP_SSL()            #創建一個SMTP()對象,采用SSL加密
server.connect(HOST,"465")           #通過connect方法連接smtp主機
server.login("[email protected]","xxxxxxxxxx")   #郵箱賬號登錄校驗
server.sendmail(FROM, [TO], BODY)  #郵件發送
server.quit()                      #斷開連接


技術分享圖片

二、定制個性化郵件格式方法

通過郵件傳輸的簡單文本已經無法滿足我的需求,比如需要經常定制業務質量報表,在郵件主體中會包含HTML、圖像、聲音以及附件格式等,MIME(Multipurpose Internet Mail Extensions,多用途互聯網郵件擴展)則實現了這一點。以下為Python中常用的MIME實現類。

email.mime.multipart.MIMEMultipart([_subtype[,bounday[,_subparts[,_params]]]])

作用是生成包含多個部分的郵件體的MIME對象,參數_subtype指定要添加到“Content-type:multipart/subtype”報頭的可選三種子類型,分別為mixed,related,alternative,默認值為mixed。定義mixed實現構建一個帶有附件的郵件體;定義related實現構建內嵌資源的郵件體;定義alternative則實現構建純文本與超文本共存的郵件體。

email,mine.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的MIMEText類來實現HTML格式的郵件。

#!/usrbin/python
#coding: utf-8
import smtplib
from smtplib import SMTP_SSL
from email.mime.text import MIMEText   #導入MIMEText類

HOST = "smtp.xxxxxxxx.com"             #定義smtp主機
SUBJECT = u"官網流量數據報表"           #定義郵件主題
TO = "[email protected]"         #定義郵件收件人
FROM = "[email protected]"     #定義郵件發件人

msg = MIMEText("""                                                      #創建一個MIMEText對象,分別指定HTML內容,類型(文本或html)
    <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>
      <tr>
        <td bgcolor="#EFEBDE" height="100" style="font-size: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 = SMTP_SSL()   #采用SSL加密模塊
    server.connect(HOST,"465") #通過connect方法連接smtp主機
    server.login("[email protected]","xxxxxxxxxx")  #郵箱賬號登錄校驗
    server.sendmail(FROM, TO, msg.as_string())                     #郵件發送
    server.quit()                                                  #斷開連接·
    print "郵件發送成功!"
except Exception, e:  
    print "失敗:"+str(e)

技術分享圖片

python學習-smtplib模塊