1. 程式人生 > >Python SMTP郵件模組

Python SMTP郵件模組

SMTP是傳送郵件的協議,Python內建對SMTP的支援,可以傳送純文字郵件、HTML郵件以及帶附件的郵件。

Python對SMTP支援有smtplib和email兩個模組,email負責構造郵件,smtplib負責傳送郵件。

例項:

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(["管理員",'[email protected]']) #顯示發件人資訊 17 msg['To'] = formataddr(["
Saneri",'[email protected]']) #顯示收件人資訊 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("[email protected]","password") 26 #sendmail()方法就是發郵件,由於可以一次發給多個人,所以傳入一個list,郵件正文是一個str,as_string()把MIMEText物件變成str 27 server.sendmail('[email protected]', ['[email protected]',], 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(["管理員",'[email protected]'])
13     msg['To'] = formataddr(["Saneri",'[email protected]'])
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("[email protected]","password")
49         #sendmail()方法就是發郵件,由於可以一次發給多個人,所以傳入一個list,郵件正文是一個str,as_string()把MIMEText物件變成str
50         server.sendmail('[email protected]', ['[email protected]',], 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(["管理員",'[email protected]'])
13     msg['To'] = formataddr(["Saneri",'[email protected]'])
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("[email protected]","password")
25         server.sendmail('[email protected]', ['[email protected]',], 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郵件怎麼辦?

辦法是在傳送HTML的同時再附加一個純文字,如果收件人無法檢視HTML格式的郵件,就可以自動降級檢視純文字郵件。

利用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物件...

更多參閱:

相關推薦

Python SMTP郵件模組

SMTP是傳送郵件的協議,Python內建對SMTP的支援,可以傳送純文字郵件、HTML郵件以及帶附件的郵件。 Python對SMTP支援有smtplib和email兩個模組,email負責構造郵件,smtplib負責傳送郵件。 例項: 1.使用Python傳送純文字格式和html格式的郵件.

Python傳送郵件模組(SMTP)

首先,使用SMTP實現傳送郵件的話,需要先獲取一個代發郵件的授權碼。 以163郵箱為例: 登入郵箱後--點選設定--客戶端授權碼--開啟。如圖 其實網上已經有很多類似的模組介紹和試用了,這邊主要是想記錄下自己寫的一個類。呼叫方式簡單,可以直接將py檔案貼到專案中,import後

Python+ SMTP 郵件學習筆記

更新日誌 版本號 更新日期 更新人 更新內容 V1.0 2018.11.13 李昊哲 初稿 文件說明 該文件用於說明網上各種 Python + SMTP 傳送郵件教程學習彙總說明。 文件內容 不多廢話,直接上程式碼,都有註釋。 # codin

python傳送郵件模組

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

python+smtp郵件

前言 使用smtp傳送郵件是一個很常見的網際網路應用場景,實現smtp協議傳送郵件的方式很多,可以用簡單的Telnet命令列,也可以借用springboot等現有框架構建,當然也可以是python的相關類庫實現。更多smtp相關的參考《Spring-boot-email郵件》,這裡主要記錄一下用

Python SMTP模組使用QQ郵箱傳送郵件

前言:    嘗試實現《Python程式設計快速上手  讓繁瑣工作自動化》書籍中的第十六章習題部分,使用python傳送email資訊,嘗試傳送Html,附件和正文都同時存在的郵件,使用QQ郵箱,最終實現根據表格標記對不同使用者發不同郵件功能。(根據之前編寫的讀取表格示例可以

python學習筆記SMTP郵件發送

woe jks sid dac xiang undo hang ev3 lan Java%E5%AD%A6%E4%B9%A0%E5%BF%83%E5%BE%97%E4%B9%8B%20Linux%E4%B8%8B%E6%90%AD%E5%BB%BAJava%E7%8E%AF

Python-SMTP發送郵件(HTML、圖片、附件)

finall 並發 前言 multipart art pre zhang imei lena 前言: SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。 一、P

python傳送郵件smtp

1.傳送QQ郵件 qq發件伺服器:smtp.qq.com 發件伺服器埠:465 發件郵箱:[email protected] 授權碼:*** qq郵箱是需要SSL認證的,連線伺服器需要認證 1.1 MIMEText只能傳送正文,不能帶附件傳送 1.2

python郵件總結及例項說明,中文亂碼已解決(在最後一個模組

python發郵件需要掌握兩個模組的用法,smtplib和email,這倆模組是python自帶的,只需import即可使用。smtplib模組主要負責傳送郵件,email模組主要負責構造郵件。 smtplib模組主要負責傳送郵件:是一個傳送郵件的動作,連線郵箱伺服器,登入郵箱,傳送郵件(有發件

Python smtp郵件提示錯誤554, b'DT:SPM 163 smtp1

使用163郵箱的SMTP服務,傳送到QQ郵箱時出現錯誤: 注意,你是用的password應該是授權碼不是你的郵箱登陸密碼。 授權碼可以在你開通SMTP服務的時候得到。 554錯誤彙總: •554 DT:SPM 傳送的郵件內容包含了未被許可的資訊,或被系統識別為垃圾郵件。請檢查是否有

Python SMTP 傳送純文字郵件

利用Python的smtp和email模組傳送郵件 最近,開始學習python,因為從未接觸過python,所以這幾天抽時間看了一下基礎知識,然後就看到了python郵件這一塊。 因為使用qq郵箱傳送,所以也碰到了一些問題。所以,在此對使用python,利用qq郵箱傳送郵件

Python SMTP傳送QQ郵件

1、QQ郵箱開通SMTP許可權,並獲取授權碼 QQ郵箱---->設定---->賬戶---->開啟服務---->IMAP/SMTP服務---->獲取授權碼 傳送方和接收方都必須開通 2、傳送純文字郵件: import smtplib fro

Python傳送郵件smtplib.SMTP各報錯問題的解決方法

經測試可用的傳送郵件程式碼: import smtplib from email.mime.text import MIMEText # 第三方 SMTP 服務 mail_host = "smtp.163.com" # SMTP伺服器 mail_user = "user

Zmail--永不拒信,傳送簡單的python郵件模組

傳送郵件是個很簡單的需求,但是在實際的使用中依然碰到了很多坑,因此建立了zmail這個專案,讓你使用python傳送郵件的過程儘可能簡單。 其他輪子的缺點: 服務端拒信:首要問題。很多其他的輪子需要自己構造MIME和郵件頭(通常優化了過程),但

Python-SMTP傳送郵件(HTML、圖片、附件)

前言: SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。 一、Python傳送HTML郵件 # -*- coding: utf-8 -*- # @Time : 2018/6/6 上午11:

python SMTP進行郵件傳送

1 import smtplib 2 from email.mime.text import MIMEText 3 from email.mime.multipart import MIMEMultipart 4 """多使用者及帶附件傳送郵件程式碼""" 5 6 smtpserver

python SMTP傳送郵件/server.sendmail(from_addr, [to_addr], msg.as_string())報錯

? 1 2 3 4 5 6 7 8 9 importsmtplib server=smtplib.SMTP('smtp.163.com',25) server.login('[email&#

pythonsmtp郵件傳送

python內建了許多庫來讓我們來實現郵箱的傳送: 直接上程式碼,上了在解釋: from email import encoders from email.header import Header from email.mime.text import MIMEText

[python小記] logging模組SMTPhandler實現日誌郵件報警

前言:一般開發中日誌會輸出到console,log file,mail中,上篇章簡述了logging模組載入yaml配置輸出到控制檯和檔案中logging模組yaml配置,本文會詳述logging如何傳送email,嗯 [1]最重要的是實現SMTPHanler的設定,簡述