背景
公司內(nèi)網(wǎng)有個(gè)論壇肃弟,各種公司的前沿消息都會有人在討論玷室。一忙起來,經(jīng)常忘記逛論壇笤受,所以寫了個(gè)爬蟲穷缤,爬取論壇前10頁帖子,將回復(fù)量較多的帖子通過郵件發(fā)送給自己箩兽,這樣津肛,在沒時(shí)間逛論壇的時(shí)候,也能關(guān)注到一些相關(guān)消息汗贫。
基于以上背景身坐,涉及到了python發(fā)送郵件,寫下這篇文章作為對相關(guān)知識的復(fù)習(xí)與鞏固落包。
相關(guān)模塊介紹
-
smtplib模塊
-
SMTP類
smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
如上可看出部蛇,構(gòu)造函數(shù)的參數(shù)都是可選參數(shù)。- 當(dāng)沒有參數(shù)的時(shí)候咐蝇,會創(chuàng)建出一個(gè)SMTP連接實(shí)例
- 當(dāng)傳入host和port參數(shù)時(shí)涯鲁,在初始化SMTP實(shí)例時(shí),會自動調(diào)用connect()函數(shù)
-
SMTP對象擁有的方法
-
SMTP.connect([host[, port]])
連接到給定端口的主機(jī)。
- 沒參數(shù)時(shí)抹腿,則通過標(biāo)準(zhǔn)的SMTP端口25連接到本地主機(jī)
- 當(dāng)host參數(shù)末尾加上:25(如"smtp.163.com:25")岛请,則不需要指定port端口號
- 函數(shù)返回值為一個(gè)包含兩個(gè)元素的元組。一個(gè)返回狀態(tài)碼幢踏,一個(gè)服務(wù)器發(fā)送的連接反饋消息
- 當(dāng)創(chuàng)建實(shí)例時(shí)傳入了hostname髓需,該函數(shù)會被自動調(diào)用
SMTP.login(user, password)
登錄到SMTP服務(wù)器许师。SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
發(fā)送郵件房蝉。
- from_addr 發(fā)件人地址
- to_addrs 收件人地址列表,如果該參數(shù)為一個(gè)字符串微渠,則把它當(dāng)作數(shù)組的第一個(gè)元素
- msg一個(gè)字符串格式的message報(bào)文
-
SMTP.quit()
結(jié)束SMTP會話并關(guān)閉連接搭幻。
-
-
常見使用方式
smtpObj = smtplib.SMTP()
smtpObj.connect('hostname:port')
smtpObj.login(user,password)
smtpObj.sendmail(from,to,msg)
smtpObj.quit()
-
email模塊
email模塊是一個(gè)用來管理email消息的庫,包含MIME和其他基于RFC2822的消息文檔逞盆。它并不負(fù)責(zé)處理發(fā)送郵件檀蹋。
-
email.mime子模塊
創(chuàng)建email和MIME對象- email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]])
MIMEBase的一個(gè)子類,多個(gè)MIME對象的集合云芦,- _subtype默認(rèn)值為mixed俯逾。
- boundary是MIMEMultipart的邊界,默認(rèn)邊界是可數(shù)的舅逸。
- _subparts可以轉(zhuǎn)化成list的MIME對象桌肴。
- 可通過message.attach將新的MIME對象添加到附件中。
- email.mime.multipart.MIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]])
-
email.mime.audio.MIMEAudio(_audiodata[, _subtype[,_encoder[, **_params]]])
該類用來創(chuàng)建音頻類型的MIME消息對象- _audiodata參數(shù)是一個(gè)包含音頻數(shù)據(jù)流的字符串
- 如果audiodata數(shù)據(jù)由標(biāo)準(zhǔn)庫sndhdr
譯碼琉历,那么subtype則會被自動包含在Content-type頭中坠七,否則,必須顯示的指定subtype參數(shù)
-
email.mime.image.MIMEImage(_imagedata[, _subtype[, _encoder[, **_params]]])
該類用來創(chuàng)建圖像類型的MIME消息對象- 參數(shù)與上一個(gè)類相似旗笔,不做詳細(xì)解釋
email.mime.text.MIMEText(_text[, _subtype[, _charset]])
該類用來創(chuàng)建文本類型的MIME消息對象_subtype默認(rèn)的plain格式
_charset是文本的字符集彪置,默認(rèn)為ascii
如果文本為unicode編碼格式,將使用_charset的output_charset(詳見 email.charset
)進(jìn)行編碼蝇恶,否則拳魁,按照原來的格式輸出-
email.header子模塊
- email.header.Header([s[, charset[, maxlinelen[, header_name[, continuation_ws[, errors]]]]]])
創(chuàng)建一個(gè)遵從MIME的包含不同字符集編碼字符串的header- 可選的s是header的初始化值,默認(rèn)為空撮弧,如果沒有賦值的猛,可以通過append函數(shù)進(jìn)行插入。
- email.header.Header([s[, charset[, maxlinelen[, header_name[, continuation_ws[, errors]]]]]])
-
例子
- 創(chuàng)建一個(gè)普通文本消息
from email.mime.text import MIMEText
from email.header import Header
mes = MIMEText(body, 'plain', 'utf-8') # 正文
mes['From'] = Header('xxx@xxx.com','utf-8') # 發(fā)件人
mes['To'] = Header('xxx@xxx.com','utf-8') # 收件人
mes['Cc'] = Header('xxx@xxx.com','utf-8') # 抄送人
mes['Subject'] = Header(subject, 'utf-8') # 主題
- 創(chuàng)建一個(gè)html文本消息
from email.mime.text import MIMEText
from email.header import Header
mes = MIMEText(body, 'html', 'utf-8') # body按照html格式寫
mes['From'] = Header('xxx@xxx.com','utf-8') # 發(fā)件人
mes['To'] = Header('xxx@xxx.com','utf-8') # 收件人
mes['Cc'] = Header('xxx@xxx.com','utf-8') # 抄送人
mes['Subject'] = Header(subject, 'utf-8') # 主題
msg['date']='xxxx-xx-xx' #
3. 創(chuàng)建帶附件郵件
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
#創(chuàng)建一個(gè)帶附件的實(shí)例
msg = MIMEMultipart()
#構(gòu)造附件1
att1 = MIMEText(open('d:\\123.rar', 'rb').read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="123.doc"'#這里的filename可以任意寫想虎,寫什么名字卦尊,郵件中顯示什么名字
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'] = 'YYY@YYY.com'
msg['from'] = 'XXX@XXX.com'
msg['subject'] = 'hello world'
- 如果想發(fā)送一個(gè)帶圖片附件的郵件,同時(shí)圖片還顯示在正文中
- 按照3.的方式(圖片用MIMEImage)插入圖片附件hello.jpg
- 按照2.的方式舌厨,發(fā)送一個(gè)html文件岂却,在html中插入img標(biāo)簽,src為圖片的路徑
![](cid:hello.jpg)