您好,登錄后才能下訂單哦!
本篇內容主要講解“python怎么實現自動發送郵件發送多人、群發、多附件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“python怎么實現自動發送郵件發送多人、群發、多附件”吧!
主要會遇到的幾個問題:
1、smtplib。smtpauthenticationerror :(550,b“用戶沒有權限”)
2、smtplib。smtpauthenticationerror :(535,b'Error:驗證失敗')
這兩個錯誤都是你的密碼沒有使用授權碼導致的,授權碼是百度生成的。
3、554 DT:SPM 163 smtp5
這是網易郵箱的一個退貨檢測機制造成的,好像和頻繁發送有關。再發的時候遇到了,直到加了一個網易郵箱作為收件箱才發成功。不知道是不是這個原因,具體原因不明。如果有人知道,請在私信或評論下告訴我。謝謝!
準備檢查系統上的python版本號:
如圖,已經安裝好了。
2.實現代碼如下(這是在Windows上編輯IDEL下的測試代碼,只改變linux上的附件路徑)
#-*-coding:utf-8-*-
fromemailimportencoders
importos
importtraceback
fromemail.headerimportHeader
from email . mime . textimport mime text
fromemail.utilsimportparseaddr,formataddr
importsmtplib
from email . mime . MultipimportMimePart
from email . mime . BaseIMPORTMimeBase
fromemailimportencoders
#中文處理
def _ format _ addr :
名稱,addr=parseaddr(s)
returnformataddr((標頭(名稱,' utf-8 ')。encode(),addr))
defsend_email(to_addr_in,filepath_in):
#郵件發送者和接收者配置
from_addr='*******@163.com '
smtp_server='smtp.163.com '
密碼=' * * * * * * * * ' #這是您郵箱的第三方授權客戶端的密碼,不是您的登錄密碼
to_addr=to_addr_in
to_addrs=to_addr.split(',')
msg=MIMEMultipart()
發件人由消息['from']=_ format _ addr ('python發燒友%s'%from_addr)#
#msg['To']=_format_addr('管理員%s'%to_addr)#單個顯示的收件人
消息['收件人']=','。join(to_addrs)#多個顯示的收件人
消息['主題']=標題('來自SMTP的問候.',' utf-8 ')。encode () #顯示消息頭
#要傳遞的路徑
#filepath=r'D:\test '
filepath=filepath_in
r=os.path.exists(filepath)
ifrisFalse:
msg.attach(MIMEText('nofile .)、“普通”、“utf-8”))
else:
#消息正文是MIMEText:
msg . attach(MiMeText(' sendwithfile .)、“普通”、“utf-8”))
#遍歷指定的目錄并顯示該目錄下的所有文件名
pathDir=os.listdir(filepath)
forallDirinpathDir:
child=os.path.join(filepath,allDir)
Printchild。解碼(' gbk') #。decode ('gbk ')是為了解決中文顯示亂碼的問題
#添加附件就是添加一個MIMEBase并在本地讀取一個文件
withopen(child,' rb')asf:
#設置附件的MIME和文件名,這里是txt類型:
mime=MIMEBase('file ',' xls ',filename=allDir)
#添加必要的標題信息:
mime . add _ header(' Content-Disposition ',' attachment ',filename=allDir)
添加標題('內容標識',' 0 ')
mime . add _ header(' X-附件-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 _ debugle level(1)#用于顯示郵件發送的執行步驟
server.login(from_addr,password)
#printto_addrs
server.sendmail(from_addr,to _ addrs,msg.as_string())
server.quit()
Exception,e:
打印“錯誤:無法發送電子郵件”
printtraceback.format _ exc()
if__name__=='__main__':
send _ email(* * * * * * * @ qq.com,* * * * * * @ 163.com ',' d: \ \ test') 3。PyCharm中的執行結果如下
顯示郵件已發送成功,可在對應郵箱查看,對應文件夾下有附件文字
如果沒有附件文字(這是截圖的網易郵箱,上面的QQ郵箱表示兩個郵箱都收到了郵件):
到此,相信大家對“python怎么實現自動發送郵件發送多人、群發、多附件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。