Python SMTP郵件模塊

SMTP是發送郵件的協議,Python內置對SMTP的支持,能夠發送純文本郵件、HTML郵件以及帶附件的郵件。html

Python對SMTP支持有smtplib和email兩個模塊,email負責構造郵件,smtplib負責發送郵件。python

實例:

1.使用Python發送純文本格式和html格式的郵件.

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3 
 4 import smtplib
 5 from email.mime.text import MIMEText
 6 from email.utils import formataddr
 7 
 8 def email(message):
 9     #構造MIMEText對象,第一個參數就是郵件正文,第二個參數是MIME的subtype
10     # 傳入'plain',最終的MIME就是'text/plain',最後必定要用utf-8編碼保證多語言兼容性。
11     msg = MIMEText(message, 'plain', 'utf-8')   #message爲傳入的參數,爲發送的消息.
12     """msg = MIMEText('<html><body><h1>Hello</h1>' +
13     '<p>send by <a href="http://www.python.org">Python</a>...</p>' +
14     '</body></html>', 'html', 'utf-8') """
15     #標準郵件須要三個頭部信息: From, To, 和 Subject。
16     msg['From'] = formataddr(["管理員",'ylemail2012@sina.cn'])     #顯示發件人信息
17     msg['To'] = formataddr(["Saneri",'349622541@qq.com'])          #顯示收件人信息
18     msg['Subject'] = "Zabbix報警系統!"      #定義郵件主題
19     try:
20         #建立SMTP對象
21         server = smtplib.SMTP("smtp.sina.com", 25)
22         #set_debuglevel(1)能夠打印出和SMTP服務器交互的全部信息
23         #server.set_debuglevel(1)
24         #login()方法用來登陸SMTP服務器
25         server.login("ylemail2012@sina.cn","password")
26         #sendmail()方法就是發郵件,因爲能夠一次發給多我的,因此傳入一個list,郵件正文是一個str,as_string()把MIMEText對象變成str
27         server.sendmail('ylemail2012@sina.cn', ['349622541@qq.com',], msg.as_string())
28         print u"郵件發送成功!"

29 server.quit() 30 except smtplib.SMTPException: 31 print u"Error: 沒法發送郵件" 32 if __name__ == '__main__': 33 cpu = 100 34 disk = 500 35 mem = 50 36 for i in range(1): 37 if cpu > 90: 38 alert = u"CPU出問題!" 39 email(alert) 40 if disk > 90: 41 alert = u"硬盤出問題!" 42 email(alert) 43 if mem > 80: 44 alert = u"內存出問題!" 45 email(alert)
#Python發送HTML格式的郵件與發送純文本消息的郵件不一樣之處就是將MIMEText中_subtype設置爲html
1     msg = MIMEText('<html><body><h1>Hello</h1>' +
2     '<p>send by <a href="http://www.python.org">Python</a>...</p>' +
3     '</body></html>', 'html', 'utf-8')

2.Python 發送帶附件的郵件.

發送帶附件的郵件,首先要建立MIMEMultipart()實例,而後構造附件,若是有多個附件,可依次構造,最後利用smtplib.smtp發送。瀏覽器

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3 
 4 import smtplib
 5 from email.mime.text import MIMEText
 6 from email.utils import formataddr
 7 from email.mime.multipart import MIMEMultipart
 8 
 9 def email(message):
10 
11     msg = MIMEMultipart()
12     msg['From'] = formataddr(["管理員",'ylemail2012@sina.cn'])
13     msg['To'] = formataddr(["Saneri",'349622541@qq.com'])
14     msg['Subject'] = "Zabbix報警系統!"
15     msg.attach(MIMEText(message, 'plain', 'utf-8'))
16 
17     #---這是附件部分---
18     # 構造附件1,文本類型附件
19     att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
20     att1["Content-Type"] = 'application/octet-stream'
21     # 這裏的filename能夠任意寫,寫什麼名字,郵件中顯示什麼名字
22     att1["Content-Disposition"] = 'attachment; filename="test.txt"'
23     msg.attach(att1)
24 
25     # 構造附件2,jpg類型附件
26     from email.mime.application import MIMEApplication
27     att2 = MIMEApplication(open('001.jpg','rb').read())
28     att2.add_header('Content-Disposition', 'attachment', filename="001.jpg")
29     msg.attach(att2)
30     #構造附件3,pdf類型附件
31     att3 = MIMEApplication(open('test.pdf','rb').read())
32     att3.add_header('Content-Disposition', 'attachment', filename="test.pdf")
33     msg.attach(att3)
34     #構造附件4,xlsx類型附件
35     att4 = MIMEApplication(open('test.xlsx','rb').read())
36     att4.add_header('Content-Disposition', 'attachment', filename="test.xlsx")
37     msg.attach(att4)
38     #構造附件5,mp3類型附件
39     att5 = MIMEApplication(open('test.mp3','rb').read())
40     att5.add_header('Content-Disposition', 'attachment', filename="test.mp3")
41     msg.attach(att5)
42 
43     try:
44         server = smtplib.SMTP("smtp.sina.com", 25)
45         #set_debuglevel(1)能夠打印出和SMTP服務器交互的全部信息
46         #server.set_debuglevel(1)
47         #login()方法用來登陸SMTP服務器
48         server.login("ylemail2012@sina.cn","password")
49         #sendmail()方法就是發郵件,因爲能夠一次發給多我的,因此傳入一個list,郵件正文是一個str,as_string()把MIMEText對象變成str
50         server.sendmail('ylemail2012@sina.cn', ['349622541@qq.com',], msg.as_string())
51         print u"郵件發送成功!"
52         server.quit()
53     except smtplib.SMTPException:
54         print u"Error: 沒法發送郵件"
55 if __name__ == '__main__':
56     cpu = 100
57     disk = 500
58     mem = 50
59     for i in range(1):
60         if cpu > 90:
61             alert = u"CPU出問題!"
62             email(alert)
63         if disk > 90:
64             alert = u"硬盤出問題!"
65             email(alert)
66         if mem > 80:
67             alert = u"內存出問題!"
68             email(alert)

3.在 HTML 文本中添加圖片

郵件的 HTML 文本中通常郵件服務商添加外鏈是無效的,正確添加突破的實例以下所示:服務器

 1 #!/usr/bin/env python
 2 #coding:utf-8
 3 
 4 import smtplib
 5 from email.mime.multipart import MIMEMultipart
 6 from email.mime.text import MIMEText
 7 from email.mime.image import MIMEImage
 8 from email.utils import formataddr
 9 
10 def email():
11     msg = MIMEMultipart()
12     msg['From'] = formataddr(["管理員",'ylemail2012@sina.cn'])
13     msg['To'] = formataddr(["Saneri",'349622541@qq.com'])
14     msg['Subject'] = "Zabbix報警系統!"
15     msg.attach(MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>good!','html','utf-8'))
16 
17     fp = open('001.jpg', 'rb')
18     msgImage = MIMEImage(fp.read())
19     fp.close()
20     msgImage.add_header('Content-ID', '<image1>')
21     msg.attach(msgImage)
22     try:
23         server = smtplib.SMTP("smtp.sina.com", 25)
24         server.login("ylemail2012@sina.cn","password")
25         server.sendmail('ylemail2012@sina.cn', ['349622541@qq.com',], msg.as_string())
26         print u"郵件發送成功!"
27         server.quit()
28     except smtplib.SMTPException:
29         print u"Error: 沒法發送郵件"
30 
31 if __name__ == '__main__':
32     email()

4.同時支持HTML和Plain格式

若是咱們發送HTML郵件,收件人經過瀏覽器或者Outlook之類的軟件是能夠正常瀏覽郵件內容的,可是,若是收件人使用的設備太古老,查看不了HTML郵件怎麼辦?app

辦法是在發送HTML的同時再附加一個純文本,若是收件人沒法查看HTML格式的郵件,就能夠自動降級查看純文本郵件。ui

利用MIMEMultipart就能夠組合一個HTML和Plain,要注意指定subtype是alternative編碼

1 msg = MIMEMultipart('alternative')
2 msg['From'] = ...
3 msg['To'] = ...
4 msg['Subject'] = ...
5 
6 msg.attach(MIMEText('hello', 'plain', 'utf-8'))
7 msg.attach(MIMEText('<html><body><h1>Hello</h1></body></html>', 'html', 'utf-8'))
8 # 正常發送msg對象...

 

更多參閱:spa

http://www.runoob.com/python/python-email.htmldebug

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000code

相關文章
相關標籤/搜索