python學習-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> 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> /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模塊