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 78 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
python的smtp郵件傳送
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的設定,簡述