在之前的工作中,業務方做了一些調整,提出了對一部分核心指標做更細致的拆分并定期產出的需求。出于某些原因,這部分數據不太方便在報表上呈現,因此就考慮通過郵件的方式定期給業務方發送數據。
當時本來使用的是linux自帶的mail命令來實現,然而某一天開始,突然發現服務器上的郵件服務不可用了,于是就將腳本遷移到本地,并準備使用Python3中的smtplib搭配crontab來實現。
首先,我們需要導入Python3標準庫中的smtplib包和email包來實現郵件的構造和發送。
import smtplibfrom email.mime.text import MIMETextfrom email.header import Header
然后,我們需要配置郵件內容:
message = MIMEText('郵件測試', 'plain', 'utf-8')message['From'] = 'qixizhuang@126.com'message['To'] = 'qixizhuang@126.com,751718003@qq.com'subject = 'Python SMTP 郵件測試'message['Subject'] = Header(subject, 'utf-8')一個完整的郵件需要包括主題(subject)、正文、發件人和收件人:
message = MIMEText('郵件測試', 'plain', 'utf-8')用于設置郵件正文,email.mime.text.MIMEText的三個參數中,第一個是郵件正文,第二個是設置文本格式,第三個則用于設置文本編碼。
message['From'] = 'qixizhuang@126.com'用于設置發件人一欄。
message['To'] ='qixizhuang@126.com,751718003@qq.com'則用于設置收件人一欄。多個收件人之間直接用英文逗號隔開即可。
message['Subject'] = Header(subject, 'utf-8')則用于設置郵件的主題。

此次郵件發送,我們以網易的126郵箱為例,因此我們需要配置一些服務器和賬號信息:
sender = 'qixizhuang@126.com'receivers = ['qixizhuang@126.com', '751718003@qq.com']mail_host = 'smtp.126.com'mail_user = 'qixizhuang@126.com'mail_pass = '********'
我們需要配置服務器、郵件賬號及密碼、以及發件人和收件人信息。
sender = 'qixizhuang@126.com'是用于配置發件人信息,注意此處的發件人與message[‘from']部分含義不同,message中的信息用于在郵箱中顯示,而此處則是使用sendmail方法時所需要的一個參數。即sender這一變量名并不重要,你甚至可以直接在sendmail中填入郵箱地址的字符串。 receivers = ['qixizhuang@126.com', '751718003@qq.com']則用于配置收件人信息,如果收件人只有一個,那么我們可以直接用一個字符串來賦值;如果收件人有多個的話,那么sendmail需要接收一個列表。跟上一條類似,此處的含義與message[‘to']部分不同。 mail_host, mail_user, mail_pass則是用于設置郵件發送服務器以及郵箱的賬號密碼,跟上邊類似,變量名并不重要,不設置這幾個變量直接在sendmail中輸入字符串也是可以的。新聞熱點
疑難解答