python實現定時傳送郵件到指定郵箱
本文例項為大家分享了python實現定時傳送郵件到指定郵箱的具體程式碼,供大家參考,具體內容如下
整個鏈路:感測器採集端採集資料,邊緣端上傳資料庫,從資料庫拿到資料。
產品端有個自動出報告的需求,並且希望自動出的報告可以定時通過郵件發到指定郵箱中。
自動發郵件中也有較多坑,本文特此記錄自動發郵件中的坑。
使用:Python3.7,win10系統,163郵箱作為發郵件方,QQ郵箱作為收郵件方。
**第一步:**申請兩個賬號分別作為傳送和接收的賬號,本文用的是一個163郵箱,一個是qq郵箱。
第一個坑需要注意了,上圖是qq郵箱中的郵箱設定,需要在賬戶中開啟POP3/SMTP服務(一定要開啟,不然即使Python中的程式碼都是對的,也不能正常傳送郵件,因為Python中發郵件用的是SMTP的郵件傳輸協議包),這裡還有一個坑需要注意的是:如果你把這個郵箱當作是傳送郵件的一方,還需要記住授權碼,因為Python中郵箱的登入是用授權碼的而不是密碼。
在163郵箱中的設定中也將POP3/SMTP服務開啟。
開啟SMTP服務後,一定要記住授權碼
**第二步:**Python編寫程式
#傳送郵件模組 import smtplib #寫郵件模組 import email #定義郵件型別及內容 """ 郵件體為多元件型別(如果不是單一發送文字或者圖片或者附件,那麼就需要這個多元件型別將 其它元素打包進來) """ from email.mime.multipart import MIMEMultipart #郵件中的文字資訊 from email.mime.text import MIMEText #郵件中的圖片資訊 from email.mime.image import MIMEImage #定義郵件標題 from email.header import Header ################################################################################################# #設定伺服器所需資訊 #郵件傳送方郵箱地址 sender='寫傳送方郵箱地址,這裡只是示意一下@163.com' #這個是163郵箱裡面POP3/SMTP開啟後的授權碼,一定注意不是163郵箱的登入密碼 #第一次做的時候設定成郵箱登入密碼反而郵件不能傳送,改成授權碼之後才可以 password='這裡寫授權碼,注意不是郵箱登入密碼,授權碼一般是由隨機的16位字母組成' #郵件接收方郵箱地址,注意需要[]包裹,這意味著你可以寫多個郵件地址群發 receivers=['寫接收方郵箱地址,這裡只是示意一下@qq.com'] ############################################################################################### #郵件基本資訊輸入 #設定總的郵件體物件,物件型別為mixed mix_part=MIMEMultipart('mixed') #傳送者郵箱地址 mix_part['From']='寫傳送方郵箱地址,這裡只是示意一下@163.com<寫傳送方郵箱地址,這裡只是示意一下@163.com>' #接收者郵箱地址 mix_part['To']='寫接收方郵箱地址,這裡只是示意一下@qq.com' #郵件標題 subject='2020-5-21測試報告' mix_part['subject']=Header(subject,'utf-8') ################################################################################################# #構造文字內容,也就是郵件中正文部分的內容 """ 三個引數: 第一個為文字內容,第二個plain設定文字格式,第三個utf-8設定編碼 """ message_info='python郵件傳送測試' message=MIMEText(message_info,'plain','utf-8') #通過多元件型別將文字內容打包進來 mix_part.attach(message) ############################################################################################### #郵件中附件文字的構造 #設定附件文字的路徑,除了改路徑,其它幾行程式碼基本不需要改動 txt_path=r'C:\Users\Desktop\測試檔案.pdf' txt_file = open(txt_path,'rb').read() txt = MIMEText(txt_file,'base64','utf-8') txt["Content-Type"] = 'application/octet-stream' # 命名傳送的附件名稱 txt.add_header('Content-Disposition','attachment',filename='測試報告.pdf') #通過多元件型別將文字附件打包進來 mix_part.attach(txt) #################################################################################### # 郵件中圖片附件的構造 #設定附件圖片的路徑,除了改路徑,其它幾行程式碼基本不需要改動 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"' #通過多元件型別將圖片附件打包進來 mix_part.attach(image) ################################################################################################### try: """ qq郵箱伺服器地址的設定,如果是用qq郵箱發郵件則需要設定, 本文是用163郵箱發郵件,所以只需要設定163郵箱伺服器地址即可 """ # smtpObj=smtplib.SMTP('smtp.exmail.qq.com') #163郵箱伺服器地址的設定 smtpObj = smtplib.SMTP('smtp.163.com') #登入:賬號,密碼 smtpObj.login(sender,password) smtpObj.sendmail(sender,receivers,mix_part.as_string()) smtpObj.quit() print('郵件傳送成功') except smtplib.SMTPException: print('Error:無法傳送郵件')
第三步:電腦設定定時傳送郵件
win+r調出執行視窗輸入taskschd.msc
建立基本任務,然後按照提示一步步點下去即可
按照自己的需求,我這裡選擇的是一次,然後設定啟動程式的未來時間即可
程式或指令碼一欄不需要改變,起始於(可選)指的是Python的路徑,新增引數(可選)指的是剛才編好的自動發郵件程式的路徑。
點選完成即可。
總結如下:
(1)需要將發郵件和接收郵件郵箱設定中的SMTP服務開啟,並記住授權碼
(2)Python編寫程式按步驟一步步來,應該沒有啥問題
(3)電腦中設定自動執行程式時,需要注意設定的起始於(可選)以及新增引數(可選)的路徑
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。