国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python3使用smtplib實現發送郵件功能

2020-01-04 15:00:37
字體:
來源:轉載
供稿:網友

在之前的工作中,業務方做了一些調整,提出了對一部分核心指標做更細致的拆分并定期產出的需求。出于某些原因,這部分數據不太方便在報表上呈現,因此就考慮通過郵件的方式定期給業務方發送數據。

當時本來使用的是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')則用于設置郵件的主題。

python3,smtplib,發送郵件

此次郵件發送,我們以網易的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中輸入字符串也是可以的。

最后,我們使用smtplib來發送郵件。

try:  smtpObj = smtplib.SMTP()   smtpObj.connect(mail_host, 25)  # 25 為 SMTP 端口號  smtpObj.login(mail_user,mail_pass)  smtpObj.sendmail(sender, receivers, message.as_string())  print("郵件發送成功!")except smtplib.SMTPException:  print("郵件發送失敗!")
  • smtpObj = smtplib.SMTP(); smtpObj.connect(mail_host, 25);也可以直接改成smtpObj = smtplib.SMTP(mail_host, 25) ,這是為了構建一個SMTP對象。
  • smtpObj.login(mail_user,mail_pass)用于登錄郵箱。需要注意的是,這里的mail_pass不一定是你的郵箱密碼,很多郵箱服務包括網易郵箱提供了授權碼的功能,如果開啟了此項功能,則此處需要將郵箱密碼改為授權碼。
  • smtpObj.sendmail(sender, receivers, message.as_string())則是使用SMTP對象的sendmail方法來發送郵件。

到此為止,我們已經實現了一個簡單的郵件發送案例。

然而,在很多場景下,我們需要為郵件添加附件,則此種情況下,我們需要先創建MIMEMultipart()實例,然后構造一個或多個附件,最終使用smtplib來發送。完整示例代碼如下:

 

import smtplibfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.header import Header# 配置郵箱賬戶及收發人信息sender = 'qixizhuang@126.com'receivers = ['qixizhuang@126.com', '751718003@qq.com']mail_host = 'smtp.126.com'mail_user = 'qixizhuang@126.com'mail_pass = 'password or authorization code here'# 構建MIMEMultipart對象,并在其中添加郵件內容信息message = MIMEMultipart()message.attach(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')# 構建附件內容attr = MIMEText(open('./test.txt', 'r').read())attr['Content-Type'] = 'application/octet-stream'attr['Content-Disposition'] = 'attachment; filename = ' + 'test.txt'message.attach(attr)# 發送郵件try:  smtpObj = smtplib.SMTP()   smtpObj.connect(mail_host, 25)  # 25 為 SMTP 端口號  smtpObj.login(mail_user,mail_pass)  smtpObj.sendmail(sender, receivers, message.as_string())  print("郵件發送成功!")except smtplib.SMTPException:  print("郵件發送失敗!")

至此,我們已經實現了帶附件的郵件發送,接下來通過crontab等工具即可完成定時發送郵件的任務,在這里就不贅述了,需要的同學可以自行查閱crontab的使用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金门县| 宣威市| 巴里| 蒙阴县| 延长县| 垣曲县| 绥化市| 诸暨市| 荆门市| 沧源| 米易县| 宜城市| 唐山市| 沐川县| 秦皇岛市| 阿合奇县| 舒兰市| 吉隆县| 河间市| 龙里县| 资溪县| 黔东| 中方县| 阳西县| 弥渡县| 山西省| 天津市| 英吉沙县| 灵台县| 潞城市| 历史| 云林县| 延安市| 漳浦县| 新河县| 无为县| 勐海县| 贵州省| 岚皋县| 三穗县| 永德县|