python實(shí)現(xiàn)定時(shí)發(fā)送郵件到指定郵箱
本文實(shí)例為大家分享了python實(shí)現(xiàn)定時(shí)發(fā)送郵件到指定郵箱的具體代碼,供大家參考,具體內(nèi)容如下
整個(gè)鏈路:傳感器采集端采集數(shù)據(jù),邊緣端上傳數(shù)據(jù)庫,從數(shù)據(jù)庫拿到數(shù)據(jù)。
產(chǎn)品端有個(gè)自動(dòng)出報(bào)告的需求,并且希望自動(dòng)出的報(bào)告可以定時(shí)通過郵件發(fā)到指定郵箱中。
自動(dòng)發(fā)郵件中也有較多坑,本文特此記錄自動(dòng)發(fā)郵件中的坑。
使用:Python3.7,win10系統(tǒng),163郵箱作為發(fā)郵件方,QQ郵箱作為收郵件方。
**第一步:**申請(qǐng)兩個(gè)賬號(hào)分別作為發(fā)送和接收的賬號(hào),本文用的是一個(gè)163郵箱,一個(gè)是qq郵箱。
第一個(gè)坑需要注意了,上圖是qq郵箱中的郵箱設(shè)置,需要在賬戶中開啟POP3/SMTP服務(wù)(一定要開啟,不然即使Python中的代碼都是對(duì)的,也不能正常發(fā)送郵件,因?yàn)镻ython中發(fā)郵件用的是SMTP的郵件傳輸協(xié)議包),這里還有一個(gè)坑需要注意的是:如果你把這個(gè)郵箱當(dāng)作是發(fā)送郵件的一方,還需要記住授權(quán)碼,因?yàn)镻ython中郵箱的登錄是用授權(quán)碼的而不是密碼。
在163郵箱中的設(shè)置中也將POP3/SMTP服務(wù)打開。
開啟SMTP服務(wù)后,一定要記住授權(quán)碼
**第二步:**Python編寫程序
#發(fā)送郵件模塊 import smtplib #寫郵件模塊 import email #定義郵件類型及內(nèi)容 """ 郵件體為多組件類型(如果不是單一發(fā)送文本或者圖片或者附件,那么就需要這個(gè)多組件類型將 其它元素打包進(jìn)來) """ from email.mime.multipart import MIMEMultipart #郵件中的文本信息 from email.mime.text import MIMEText #郵件中的圖片信息 from email.mime.image import MIMEImage #定義郵件標(biāo)題 from email.header import Header ################################################################################################# #設(shè)置服務(wù)器所需信息 #郵件發(fā)送方郵箱地址 sender='寫發(fā)送方郵箱地址,這里只是示意一下@163.com' #這個(gè)是163郵箱里面POP3/SMTP開啟后的授權(quán)碼,一定注意不是163郵箱的登錄密碼 #第一次做的時(shí)候設(shè)置成郵箱登錄密碼反而郵件不能發(fā)送,改成授權(quán)碼之后才可以 password='這里寫授權(quán)碼,注意不是郵箱登錄密碼,授權(quán)碼一般是由隨機(jī)的16位字母組成' #郵件接收方郵箱地址,注意需要[]包裹,這意味著你可以寫多個(gè)郵件地址群發(fā) receivers=['寫接收方郵箱地址,這里只是示意一下@qq.com'] ############################################################################################### #郵件基本信息輸入 #設(shè)置總的郵件體對(duì)象,對(duì)象類型為mixed mix_part=MIMEMultipart('mixed') #發(fā)送者郵箱地址 mix_part['From']='寫發(fā)送方郵箱地址,這里只是示意一下@163.com<寫發(fā)送方郵箱地址,這里只是示意一下@163.com>' #接收者郵箱地址 mix_part['To']='寫接收方郵箱地址,這里只是示意一下@qq.com' #郵件標(biāo)題 subject='2020-5-21測(cè)試報(bào)告' mix_part['subject']=Header(subject,'utf-8') ################################################################################################# #構(gòu)造文本內(nèi)容,也就是郵件中正文部分的內(nèi)容 """ 三個(gè)參數(shù): 第一個(gè)為文本內(nèi)容,第二個(gè)plain設(shè)置文本格式,第三個(gè)utf-8設(shè)置編碼 """ message_info='python郵件發(fā)送測(cè)試' message=MIMEText(message_info,'plain','utf-8') #通過多組件類型將文本內(nèi)容打包進(jìn)來 mix_part.attach(message) ############################################################################################### #郵件中附件文本的構(gòu)造 #設(shè)置附件文本的路徑,除了改路徑,其它幾行代碼基本不需要改動(dòng) txt_path=r'C:\Users\Desktop\測(cè)試文件.pdf' txt_file = open(txt_path, 'rb').read() txt = MIMEText(txt_file, 'base64', 'utf-8') txt["Content-Type"] = 'application/octet-stream' # 命名發(fā)送的附件名稱 txt.add_header('Content-Disposition', 'attachment', filename='測(cè)試報(bào)告.pdf') #通過多組件類型將文本附件打包進(jìn)來 mix_part.attach(txt) #################################################################################### # 郵件中圖片附件的構(gòu)造 #設(shè)置附件圖片的路徑,除了改路徑,其它幾行代碼基本不需要改動(dòng) image_path=r'C:\Users\Desktop\images\test.png' image_file = open(image_path, 'rb').read() image = MIMEImage(image_file) image.add_header('Content-ID', '<image1>') #filename需要改成上傳的圖片名稱 image["Content-Disposition"] = 'attachment; filename="test.png"' #通過多組件類型將圖片附件打包進(jìn)來 mix_part.attach(image) ################################################################################################### try: """ qq郵箱服務(wù)器地址的設(shè)置,如果是用qq郵箱發(fā)郵件則需要設(shè)置, 本文是用163郵箱發(fā)郵件,所以只需要設(shè)置163郵箱服務(wù)器地址即可 """ # smtpObj=smtplib.SMTP('smtp.exmail.qq.com') #163郵箱服務(wù)器地址的設(shè)置 smtpObj = smtplib.SMTP('smtp.163.com') #登錄:賬號(hào),密碼 smtpObj.login(sender,password) smtpObj.sendmail(sender,receivers,mix_part.as_string()) smtpObj.quit() print('郵件發(fā)送成功') except smtplib.SMTPException: print('Error:無法發(fā)送郵件')
第三步:電腦設(shè)置定時(shí)發(fā)送郵件
win+r調(diào)出運(yùn)行窗口輸入taskschd.msc
創(chuàng)建基本任務(wù),然后按照提示一步步點(diǎn)下去即可
按照自己的需求,我這里選擇的是一次,然后設(shè)置啟動(dòng)程序的未來時(shí)間即可
程序或腳本一欄不需要改變,起始于(可選)指的是Python的路徑,添加參數(shù)(可選)指的是剛才編好的自動(dòng)發(fā)郵件程序的路徑。
點(diǎn)擊完成即可。
總結(jié)如下:
(1)需要將發(fā)郵件和接收郵件郵箱設(shè)置中的SMTP服務(wù)打開,并記住授權(quán)碼
(2)Python編寫程序按步驟一步步來,應(yīng)該沒有啥問題
(3)電腦中設(shè)置自動(dòng)運(yùn)行程序時(shí),需要注意設(shè)置的起始于(可選)以及添加參數(shù)(可選)的路徑
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 自動(dòng)在Windows中運(yùn)行Python腳本并定時(shí)觸發(fā)功能實(shí)現(xiàn)
- 實(shí)現(xiàn)Windows下設(shè)置定時(shí)任務(wù)來運(yùn)行python腳本
- 如何給windows設(shè)置定時(shí)任務(wù)并運(yùn)行python腳本
- python 實(shí)現(xiàn)定時(shí)任務(wù)的四種方式
- python獲取指定時(shí)間段內(nèi)特定規(guī)律的日期列表
- python中用Scrapy實(shí)現(xiàn)定時(shí)爬蟲的實(shí)例講解
- Python爬蟲定時(shí)計(jì)劃任務(wù)的幾種常見方法(推薦)
- python實(shí)現(xiàn)定時(shí)發(fā)送郵件
- python腳本定時(shí)發(fā)送郵件
- Python實(shí)現(xiàn)FTP文件定時(shí)自動(dòng)下載的步驟
- python爬蟲調(diào)度器用法及實(shí)例代碼
- scrapy處理python爬蟲調(diào)度詳解
- 簡(jiǎn)單的Python調(diào)度器Schedule詳解
- python編寫網(wǎng)頁爬蟲腳本并實(shí)現(xiàn)APScheduler調(diào)度
- Python使用定時(shí)調(diào)度任務(wù)的方式
相關(guān)文章
Python可變參數(shù)函數(shù)用法實(shí)例
這篇文章主要介紹了Python可變參數(shù)函數(shù)用法,實(shí)例分析了Python可變參數(shù)函數(shù)的定義與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07pandas中的數(shù)據(jù)去重處理的實(shí)現(xiàn)方法
這篇文章主要介紹了pandas中的數(shù)據(jù)去重處理的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Python特征降維知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理了一篇關(guān)于Python特征降維知識(shí)點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2021-08-08