1. 程式人生 > 程式設計 >python實現定時傳送郵件到指定郵箱

python實現定時傳送郵件到指定郵箱

本文例項為大家分享了python實現定時傳送郵件到指定郵箱的具體程式碼,供大家參考,具體內容如下

整個鏈路:感測器採集端採集資料,邊緣端上傳資料庫,從資料庫拿到資料。
產品端有個自動出報告的需求,並且希望自動出的報告可以定時通過郵件發到指定郵箱中。
自動發郵件中也有較多坑,本文特此記錄自動發郵件中的坑。
使用:Python3.7,win10系統,163郵箱作為發郵件方,QQ郵箱作為收郵件方。

**第一步:**申請兩個賬號分別作為傳送和接收的賬號,本文用的是一個163郵箱,一個是qq郵箱。

python實現定時傳送郵件到指定郵箱

第一個坑需要注意了,上圖是qq郵箱中的郵箱設定,需要在賬戶中開啟POP3/SMTP服務(一定要開啟,不然即使Python中的程式碼都是對的,也不能正常傳送郵件,因為Python中發郵件用的是SMTP的郵件傳輸協議包),這裡還有一個坑需要注意的是:如果你把這個郵箱當作是傳送郵件的一方,還需要記住授權碼,因為Python中郵箱的登入是用授權碼的而不是密碼。

python實現定時傳送郵件到指定郵箱

在163郵箱中的設定中也將POP3/SMTP服務開啟。

python實現定時傳送郵件到指定郵箱python實現定時傳送郵件到指定郵箱

開啟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實現定時傳送郵件到指定郵箱

建立基本任務,然後按照提示一步步點下去即可

在這裡插入圖片描述

按照自己的需求,我這裡選擇的是一次,然後設定啟動程式的未來時間即可

python實現定時傳送郵件到指定郵箱
python實現定時傳送郵件到指定郵箱
python實現定時傳送郵件到指定郵箱

程式或指令碼一欄不需要改變,起始於(可選)指的是Python的路徑,新增引數(可選)指的是剛才編好的自動發郵件程式的路徑。

python實現定時傳送郵件到指定郵箱

點選完成即可。

總結如下:

(1)需要將發郵件和接收郵件郵箱設定中的SMTP服務開啟,並記住授權碼

(2)Python編寫程式按步驟一步步來,應該沒有啥問題

(3)電腦中設定自動執行程式時,需要注意設定的起始於(可選)以及新增引數(可選)的路徑

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。