亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python中使用smtplib和email模塊發(fā)送郵件實(shí)例

 更新時(shí)間:2014年04月22日 10:11:43   作者:  
python腳本發(fā)郵件,一般會(huì)用到smtplib和email這兩個(gè)模塊。看看該模塊怎么使用,先看smtplib模塊。 smtplib模塊定義了一個(gè)簡(jiǎn)單的SMTP客戶(hù)端,可以用來(lái)在互聯(lián)網(wǎng)上發(fā)送郵件

SMTP模塊

這么多已定義的類(lèi)中,我們最常用的的還是smtplib.SMTP類(lèi),就具體看看該類(lèi)的用法:
smtp實(shí)例封裝一個(gè)smtp連接,它支持所有的SMTP和ESMTP操作指令,如果host和port參數(shù)被定義,則smtp會(huì)在初始化期間自動(dòng)調(diào)用connect()方法,如果connect()方法失敗,則會(huì)觸發(fā)SMTPConnectError異常,timeout參數(shù)設(shè)置了超時(shí)時(shí)間。在一般的調(diào)用過(guò)程中,應(yīng)該遵connetc()、sendmail()、quit()步驟。

SMTP模塊主要方法

下面我們來(lái)看看該類(lèi)的方法:

復(fù)制代碼 代碼如下:

SMTP.set_debuglevel(level)
設(shè)置輸出debug調(diào)試信息,默認(rèn)不輸出調(diào)試信息。
SMTP.docmd(cmd[, argstring])
發(fā)送一個(gè)command到smtp服務(wù)器,
SMTP.connect([host[, port]])
連接到指定的smtp服務(wù)器,默認(rèn)是本機(jī)的25端口。也可以寫(xiě)成hostname:port的形式。
SMTP.helo([hostname])
使用helo指令向smtp服務(wù)器確認(rèn)你的身份。
SMTP.ehlo([hostname])
使用ehlo指令向esmtp服務(wù)器確認(rèn)你的身份。
SMTP.ehlo_or_helo_if_needed()
如果在以前的會(huì)話(huà)連接中沒(méi)有提供ehlo或者h(yuǎn)elo指令,這個(gè)方法調(diào)用ehlo()或者h(yuǎn)elo()。
SMTP.has_extn(name)
判斷指定的名稱(chēng)是否在smtp服務(wù)器上。
SMTP.verify(address)
判斷郵件地址是否在smtp服務(wù)器上存在。
SMTP.login(user, password)
登陸需要驗(yàn)證的smtp服務(wù)器,如果之前沒(méi)有提供ehlo或者h(yuǎn)elo指令,則會(huì)先嘗試ESMTP的ehlo指令。
SMTP.starttls([keyfile[, certfile]])
使smtp連接運(yùn)行在TLS模式,所有的smtp指令都會(huì)被加密。
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
發(fā)送郵件,該方法需要一些郵件地址和消息。
SMTP.quit()
終止smtp會(huì)話(huà)并且關(guān)閉連接。

經(jīng)過(guò)搜索學(xué)習(xí)發(fā)現(xiàn)網(wǎng)上大多都是用smtp類(lèi)的sendmail這個(gè)方法來(lái)發(fā)郵件,那就先看看這個(gè)例子:

使用sendmail發(fā)送郵件

復(fù)制代碼 代碼如下:

import smtplib
import time
from email.message import Message
from time import sleep
import email.utils
import base64

smtpserver = 'smtp.gmail.com'
username = 'username@gmail.com'
password = 'password '

from_addr = 'from@gmail.com'
to_addr = 'tooooooo@qq.com'
cc_addr = 'ccccccccc@qq.com'

time = email.utils.formatdate(time.time(),True)

message = Message()
message['Subject'] = 'Mail Subject'
message['From'] = from_addr
message['To'] = to_addr
message['Cc'] = cc_addr
message.set_payload('mail content '+time)
msg = message.as_string()

sm = smtplib.SMTP(smtpserver,port=587,timeout=20)
sm.set_debuglevel(1)
sm.ehlo()
sm.starttls()
sm.ehlo()
sm.login(username, password)

sm.sendmail(from_addr, to_addr, msg)
sleep(5)
sm.quit()

Email模塊

如果想在郵件中攜帶附件、使用html書(shū)寫(xiě)郵件,附帶圖片等等,就需要使用email模塊及其子模塊。下面來(lái)看看email包,email包是用來(lái)管理email信息的,它包括MIME和其他基于RFC 2822的消息格式。email包的主要特征是在它內(nèi)部解析和生成email信息是分開(kāi)的模塊來(lái)實(shí)現(xiàn)的。

MIME消息由消息頭和消息體兩大部分組成,在郵件里就是郵件頭和郵件體。郵件頭與郵件體之間以空行進(jìn)行分隔。

郵件頭包含了發(fā)件人、收件人、主題、時(shí)間、MIME版本、郵件內(nèi)容的類(lèi)型等重要信息。每條信息稱(chēng)為一個(gè)域,由域名后加“: ”和信息內(nèi)容構(gòu)成,可以是一行,較長(zhǎng)的也可以占用多行。域的首行必須“頂頭”寫(xiě),即左邊不能有空白字符(空格和制表符);續(xù)行則必須以空白字符打頭,且第一個(gè)空白字符不是信息本身固有的。

郵件體包含郵件的內(nèi)容,它的類(lèi)型由郵件頭的“Content-Type”域指出。最常見(jiàn)的類(lèi)型有text/plain(純文本)和text/html(超文本)。郵件體被分為多個(gè)段,每個(gè)段又包含段頭和段體兩部分,這兩部分之間也以空行分隔。常見(jiàn)的multipart類(lèi)型有三種:multipart/mixed, multipart/related和multipart/alternative。
在email的包里面包含了很多模塊:

復(fù)制代碼 代碼如下:

email.message
email.parser
email.generator
email.mime 創(chuàng)建email和MIME對(duì)象
email.header
email.charset
email.encoders
email.ereors
email.utils
email.iterators

主要來(lái)看看email.mime,在郵件中攜帶附件、圖片、音頻時(shí),主要使用的是該模塊。一般情況下,你通過(guò)解析一個(gè)文件或者一段text來(lái)生成一個(gè)消息對(duì)象結(jié)構(gòu),你也可以從頭開(kāi)始建立一個(gè)消息結(jié)構(gòu),實(shí)際上,你可以給一個(gè)已經(jīng)存在的消息結(jié)構(gòu)追加一個(gè)新的消息對(duì)象。你可以通過(guò)創(chuàng)建message實(shí)例來(lái)創(chuàng)建一個(gè)對(duì)象結(jié)構(gòu),然后給該結(jié)構(gòu)追加附件和頭部信息。email包提供了一些子類(lèi)使得該操作變得很容易。
模擬在郵件內(nèi)容中攜帶圖片,如下:

郵件內(nèi)容中攜帶圖片

復(fù)制代碼 代碼如下:

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import smtplib

from_mail = 'froooooooom@gmail.com'
to_mail = 'toooooooooo@qq.com'

msg = MIMEMultipart()
msg['From'] = from_mail
msg['To'] = to_mail
msg['Subject'] = 'python mail test'

body = 'test img send'
con = MIMEText('<b>%s</b>
<img alt="" src="cid:D:\\10535-102.jpg" />
' % body,'html')
msg.attach(con)

img = MIMEImage(file('D:\\10535-102.jpg','rb').read())
img.add_header('Content-ID','D:\\10535-102.jpg')
msg.attach(img)

server = smtplib.SMTP('smtp.gmail.com')
server.docmd('ehol','tooooooo@gmail.com')
server.starttls()
server.login('username@gmail.com','password')

server.sendmail(from_mail,to_mail,msg.as_string())
server.quit()

郵件中攜帶附件

發(fā)送帶附件的郵件,首先要?jiǎng)?chuàng)建MIMEMultipart()實(shí)例,然后構(gòu)造附件,如果有多個(gè)附件,可依次構(gòu)造,最后利用smtplib.smtp發(fā)送
模擬在 郵件中攜帶附件 ,如下:

復(fù)制代碼 代碼如下:

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib

#創(chuàng)建一個(gè)帶附件的實(shí)例
msg = MIMEMultipart()

txt = MIMEText("這是中文的郵件內(nèi)容哦",'plain','gb2312')   
msg.attach(txt)
#構(gòu)造附件1
att1 = MIMEText(open('d:\\drcom.rar', 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="drcom.rar"'#這里的filename可以任意寫(xiě),寫(xiě)什么名字,郵件中顯示什么名字
msg.attach(att1)

#構(gòu)造附件2
att2 = MIMEText(open('d:\\123.txt', 'rb').read(), 'base64', 'gb2312')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="123.txt"'
msg.attach(att2)

#加郵件頭
msg['to'] = 'tooooooo@qq.com'
msg['from'] = 'frommmmmmm@gmail.com'
msg['subject'] = 'hello world'

 

 
#發(fā)送郵件
try:
    server = smtplib.SMTP()
    server.connect('smtp.gmail.com')
    server.starttls()
    server.login('xxxxx@gmail.com','xxxxxxxxx')#XXX為用戶(hù)名,XXXXX為密碼
    server.sendmail(msg['from'], msg['to'],msg.as_string())
    server.quit()
    print '發(fā)送成功'
except Exception, e:
    print str(e)

相關(guān)文章

最新評(píng)論