Python實現(xiàn)自動發(fā)送郵件功能
簡單郵件傳輸協(xié)議(SMTP)是一種協(xié)議,用于在郵件服務(wù)器之間發(fā)送電子郵件和路由電子郵件。Python提供smtplib模塊,該模塊定義了一個SMTP客戶端會話對象,可用于使用SMTP或ESMTP偵聽器守護(hù)程序向任何互聯(lián)網(wǎng)機器發(fā)送郵件。
SMTP通訊的基本流程可以概括為以下幾點:
1.連接SMTP服務(wù)器
2.登陸用戶名和密碼
3.發(fā)送指定郵件內(nèi)容
4.退出SMTP連接
一、發(fā)送純文本格式郵件
#coding:utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') import smtplib from smtplib import SMTP from email.mime.text import MIMEText from email.header import Header #構(gòu)造純文本郵件內(nèi)容 msg = MIMEText('hello,send by Python.....','plain','utf-8') #發(fā)送者郵箱 sender = 'xxxxx@XXXXX.com.cn' #發(fā)送者的登陸用戶名和密碼 user = 'xxxxx@XXXX.com.cn' password = 'xxxxxx' #發(fā)送者郵箱的SMTP服務(wù)器地址 smtpserver = 'xxxx' #接收者的郵箱地址 receiver = ['xxxxxx@qq.com','xxxxxx@outlook.com'] #receiver 可以是一個list smtp = smtplib.SMTP() #實例化SMTP對象 smtp.connect(smtpserver,25) #(缺?。┠J(rèn)端口是25 也可以根據(jù)服務(wù)器進(jìn)行設(shè)定 smtp.login(user,password) #登陸smtp服務(wù)器 smtp.sendmail(sender,receiver,msg.as_string()) #發(fā)送郵件 ,這里有三個參數(shù) ''' login()方法用來登錄SMTP服務(wù)器,sendmail()方法就是發(fā)郵件,由于可以一次發(fā)給多個人,所以傳入一個list,郵件正文 是一個str,as_string()把MIMEText對象變成str。 ''' smtp.quit()
運行之后就會收到郵件:
但是仔細(xì)觀察會發(fā)現(xiàn):
1.郵件沒有主題
2.看不到收件人的信息
這是因為郵件主題、如何顯示發(fā)件人、收件人等信息并不是通過SMTP協(xié)議發(fā)給MTA,而是包含在發(fā)給MTA的文本中的,所以,我們必須把From、To和Subject添加到MIMEText中,才是一封完整的郵件:
msg = MIMEText('hello,send by Python.....','plain','utf-8') msg['From'] = Header('Python測試','utf-8') msg['To'] = Header('管理員','utf-8') subject = 'python SMTP 測試郵件' msg['Subject'] = Header(subject,'utf-8')
二、發(fā)送HTML格式的郵件
如果我們要發(fā)送HTML郵件,而不是普通的純文本文件怎么辦?方法很簡單,在構(gòu)造MIMEText對象時,把HTML字符串傳進(jìn)去,再把第二個參數(shù)由plain變?yōu)閔tml就可以了:
msg = MIMEText('<html><h1>你好!<h1><html>','html','utf-8') #發(fā)送HTML格式郵件就只需要把對應(yīng)的第二個參數(shù)改為html即可
三、發(fā)送帶附件的郵件
發(fā)送帶附件的郵件,首先要創(chuàng)建MIMEMultipart()實例,然后構(gòu)造附件,如果有多個附件,可依次構(gòu)造,最后利用smtplib.smtp發(fā)送。
#coding:utf-8 import sys reload(sys) sys.setdefaultencoding('utf8') import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.header import Header #發(fā)送郵件服務(wù)器 smtpserver = 'xxxxx' #發(fā)送郵箱用戶名和密碼 user = 'xxxxxx' password = 'xxxxxx' #發(fā)送郵箱 sender = 'xxxxx' #接受郵箱 receiver = 'xxxxxxx' #創(chuàng)建一個帶附件的實例 message = MIMEMultipart() message['From'] = Header('Python 測試','utf-8') message['To'] = Header('測試','utf-8') subject = 'Python SMTP郵件測試' message['Subject'] = Header(subject,'utf-8') #郵件正文內(nèi)容 message.attach(MIMEText('這是測試Python發(fā)送附件功能....','plain','utf-8')) #構(gòu)造附件1,傳送當(dāng)前目錄下的test.txt文件 att1 = MIMEText(open('123.txt','rb').read(),'base64','utf-8') att1['Content-Type'] = 'application/octet-stream' #這里的filename可以任意寫,寫什么名字 郵件中就顯示什么名字 att1['Content-Disposition'] = 'attachment;filename:"123.txt"' message.attach(att1) smtp = smtplib.SMTP() smtp.connect(smtpserver,25) smtp.login(user,password) smtp.sendmail(sender,receiver,message.as_string()) smtp.quit()
小結(jié)
使用Python的smtplib發(fā)送郵件十分簡單,只要掌握了各種郵件類型的構(gòu)造方法,正確設(shè)置好郵件頭,就可以順利發(fā)出。
構(gòu)造一個郵件對象就是一個Messag對象,如果構(gòu)造一個MIMEText對象,就表示一個文本郵件對象,如果構(gòu)造一個MIMEImage對象,就表示一個作為附件的圖片,要把多個對象組合起來,就用MIMEMultipart對象,而MIMEBase可以表示任何對象。它們的繼承關(guān)系如下:
Message
+- MIMEBase
+- MIMEMultipart
+- MIMENonMultipart
+- MIMEMessage
+- MIMEText
+- MIMEImage
這種嵌套關(guān)系就可以構(gòu)造出任意復(fù)雜的郵件。你可以通過email.mime文檔查看它們所在的包以及詳細(xì)的用法。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
numpy求矩陣的特征值與特征向量(np.linalg.eig函數(shù)用法)
這篇文章主要介紹了numpy求矩陣的特征值與特征向量(np.linalg.eig函數(shù)用法),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02Python?隊列Queue和PriorityQueue解析
這篇文章主要介紹了Python?隊列Queue和PriorityQueue,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09給大家整理了19個pythonic的編程習(xí)慣(小結(jié))
這篇文章主要介紹了給大家整理了19個pythonic的編程習(xí)慣(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09如何在Python中將字符串轉(zhuǎn)換為數(shù)組詳解
最近在用Python,做一個小腳本,有個操作就是要把內(nèi)容換成數(shù)組對象再進(jìn)行相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于如何在Python中將字符串轉(zhuǎn)換為數(shù)組的相關(guān)資料,需要的朋友可以參考下2022-12-12python實現(xiàn)信號時域統(tǒng)計特征提取代碼
今天小編就為大家分享一篇python實現(xiàn)信號時域統(tǒng)計特征提取代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02python使用Bokeh庫實現(xiàn)實時數(shù)據(jù)的可視化
Python語言以其豐富的數(shù)據(jù)科學(xué)生態(tài)系統(tǒng)而聞名,其中Bokeh庫作為一種功能強大的可視化工具,為實時數(shù)據(jù)的可視化提供了優(yōu)秀的支持,本文將介紹如何使用Bokeh庫實現(xiàn)實時數(shù)據(jù)的可視化,并提供相關(guān)代碼實例,需要的朋友可以參考下2024-05-05python數(shù)組排序方法之sort、sorted和argsort詳解
這篇文章主要給大家介紹了關(guān)于python數(shù)組排序方法之sort、sorted和argsort的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-03-03