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

首頁 > 編程 > Python > 正文

python實現自動發送郵件發送多人、群發、多附件的示例

2020-02-22 22:57:21
字體:
來源:轉載
供稿:網友

1、最近公司實現部分數據統計、分析的報表進行每天定時發送到相關人員的郵箱之中的配置代碼被人為刪除了,需要重新恢復該功能,由于原先是在linux上使用shell配置發送,實在是太繁瑣,所以準備使用python來實現該功能,不過發現網上各種文檔都是未經過整理,代碼寫的很不友善,比如發送多人的只能發送前一個郵箱,附件寫死不靈活等等,故特寫一遍比較記錄。

主要會遇到的幾個問題:

      1、smtplib.SMTPAuthenticationError: (550, b'User has no permission')

      2、smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed')

             這兩個錯誤是你的密碼用的不是授權碼導致,授權碼生成自行百度。

      3、554 DT:SPM 163 smtp5

這屬于網易郵箱的一個退回檢測機制導致,貌似跟發送比較頻繁有關,我再發送的時候有遇到過,直到添加了一個網易郵箱作為收件箱之后才能發送成功,不知道是不是這個原因導致,具體原因未知,如果有人知道請在私信或者評論下告知,謝謝!!

前期準備查看系統上python版本號:

顯示如圖表示已經安裝好了。

2、實現代碼如下(這是在Windows上的IDEL下編輯測試代碼,linux上只有改下附件路徑就好了)

# -*- coding: utf-8 -*-from email import encodersimport osimport tracebackfrom email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import parseaddr, formataddrimport smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom email import encoders# 中文處理def _format_addr(s): name, addr = parseaddr(s) return formataddr((Header(name, 'utf-8').encode(), addr))def send_email(to_addr_in,filepath_in): # 郵件發送和接收人配置 from_addr = '*******@163.com' smtp_server = 'smtp.163.com' password = '********' #這是你郵箱的第三方授權客戶端密碼,并非你的登錄密碼 to_addr = to_addr_in to_addrs = to_addr.split(',') msg = MIMEMultipart() msg['From'] = _format_addr('Python愛好者 <%s>' % from_addr)  # 顯示的發件人 # msg['To'] = _format_addr('管理員 <%s>' % to_addr)    # 單個顯示的收件人 msg['To'] = ",".join(to_addrs)         # 多個顯示的收件人 msg['Subject'] = Header('來自SMTP的問候……', 'utf-8').encode()  # 顯示的郵件標題 # 需要傳入的路徑 # filepath = r'D:/test' filepath = filepath_in r = os.path.exists(filepath) if r is False:  msg.attach(MIMEText('no file...', 'plain', 'utf-8')) else:  # 郵件正文是MIMEText:  msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))  # 遍歷指定目錄,顯示目錄下的所有文件名  pathDir = os.listdir(filepath)  for allDir in pathDir:   child = os.path.join(filepath, allDir)   print child.decode('gbk') # .decode('gbk')是解決中文顯示亂碼問題   # 添加附件就是加上一個MIMEBase,從本地讀取一個文件   with open(child, 'rb') as f:    # 設置附件的MIME和文件名,這里是txt類型:    mime = MIMEBase('file', 'xls', filename=allDir)    # 加上必要的頭信息:    mime.add_header('Content-Disposition', 'attachment', filename=allDir)    mime.add_header('Content-ID', '<0>')    mime.add_header('X-Attachment-Id', '0')    # 把附件的內容讀進來:    mime.set_payload(f.read())    # 用Base64編碼:    encoders.encode_base64(mime)    # 添加到MIMEMultipart:    msg.attach(mime) try:  server = smtplib.SMTP(smtp_server, 25)  # server.starttls()  server.set_debuglevel(1) # 用于顯示郵件發送的執行步驟  server.login(from_addr, password)  # print to_addrs  server.sendmail(from_addr, to_addrs, msg.as_string())  server.quit() except Exception, e:  print "Error: unable to send email"  print traceback.format_exc()if __name__ == '__main__': send_email('*******@qq.com,*******@163.com','D://test')            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 磐安县| 新竹县| 苏州市| 唐山市| 岑溪市| 丘北县| 金塔县| 楚雄市| 彭州市| 商水县| 新昌县| 沧州市| 余庆县| 安溪县| 房山区| 黄大仙区| 来宾市| 麻城市| 池州市| 兴文县| 田阳县| 佛坪县| 来凤县| 阿图什市| 石首市| 高陵县| 龙川县| 会宁县| 新丰县| 宜昌市| 乌鲁木齐市| 名山县| 思南县| 久治县| 山西省| 西乡县| 永泰县| 齐齐哈尔市| 吕梁市| 武定县| 喀喇沁旗|