python 發送帶附件的郵件


    特別注意的地方:filespart.add_header("Content-Disposition","attachment",filename=file_name)中Content-Disposition的橫杠“-”別寫成了“_”,
否則郵件附件的類型會變成*.bin類型文件,我就踩進了這個坑



#encoding=utf-8
import smtplib
import os
import traceback
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from config.config import *             #config.config為配置文件,包含參數smtp_host,smtp_from_email,smtp_pwd,smtp_port

class Carry_files_EmailSender(object):
def __init__(self):
self.smtp_host = smtp_host                 # 發送郵件的smtp服務器(QQ郵箱:"smtp.qq.com",163郵箱:"smtp.163.com")
self.smtp_from_email = smtp_from_email         # 郵件發送者的郵箱
self.smtp_pwd = smtp_pwd                 # 郵件發送者的郵箱的授權碼
self.smtp_port = smtp_port                 # smtp郵箱的端口,默認是465

def send_email(self, to_email_list, subject, body,files_part=None):
'''
發送郵件
param to_email_list: 收件人郵箱列表,格式["123@qq.com","123@163.com"]
param subject: 郵件主題,格式:"郵件主題"
param body: 郵件內容, 格式:"郵件所說的內容"
param files_part=None 發送的附件,默認不帶附件,格式 r"E:\test.xlsx"
'''
msg= MIMEMultipart()          
msg.attach(MIMEText(body, 'plain', 'utf-8'))
msg["From"] = self.smtp_from_email       # 發件人
msg["To"] = ",".join(to_email_list)       # 收件人列表,轉換成string,用逗號隔開
msg["Subject"] = subject             # 郵件標題

#上傳指定文件構造附件
if os.path.exists(files_part):
filespart=MIMEApplication(open(files_part,'rb').read())
file_name=files_part.split("\\")[-1]     #獲取文件名
print("file_name=",file_name)
filespart.add_header("Content-Disposition","attachment",filename=file_name)     #file_name是顯示附件的名字,可隨便自定義
msg.attach(filespart)

else:
print("加載的附件不存在,發送無附件郵件")

try:
SmtpSslClient = smtplib.SMTP_SSL(self.smtp_host, self.smtp_port)           # 實例化一個SMTP_SSL對象
Loginer = SmtpSslClient.login(self.smtp_from_email, self.smtp_pwd)           # 登錄smtp服務器
print("登錄結果:Loginer=", Loginer) # loginRes = (235, b'Authentication successful')
if Loginer[0] == 235:
print("登錄成功,code=",Loginer[0])
SmtpSslClient.sendmail(self.smtp_from_email, to_email_list, msg.as_string())     # 發件人,收件人列表,郵件內容
print("mail has been send successfully,message:", msg.as_string())
print("發送成功")
SmtpSslClient.quit()                 # 退出郵箱
else:
print("郵件登錄失敗,發送失敗。code=", Loginer[0], "message=", msg.as_string())
except Exception as e:
traceback.print_exc()
print("郵件發送失敗,報錯信息:", e)


if __name__=="__main__":
senders = Carry_files_EmailSender()
senders.send_email(["123456@qq.com", "123456@163.com"], "測試郵件發送的標題", "這是一個測試郵件發送的內容",r"E:\test\test.txt")


















免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM