随笔:Python发送SMTP邮件方法封装

it2025-12-21  10

随笔:Python发送SMTP邮件方法封装

1、封装的方法可以用来发送附件 2、附件名称为中文不会乱码 3、也可以不带附件 4、正文是纯文本

import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.multipart import MIMEMultipart from email.utils import formataddr class Send_smtp_email_report(object): ''' 这是用来发送SMTP协议的报告邮件 ''' def __init__(self, sender, password, name=''): ''' :param sender: 发送邮件人的邮箱 :param password: 发送邮件人的密码 :param name: 发送邮件人的姓名 ''' self.__name = name self.__sender = sender self.__password = password def send_smtp_email_report(self, receive, subject, send_report, text='', smtp_server='smtp.qq.com', name='', report_name=''): ''' :param receive: 收件人的邮箱 :param subject: 邮件主题 :param send_report: 附件报告的绝对路径 :param report_name: 附件名称 :param text: 邮件正文 :param smtp_server:SMTP服务器,如'smtp.qq.com',默认是smtp_server='smtp.qq.com' :param name:收件人名称 :return: ''' # 设置邮件 msg = MIMEMultipart() msg['From'] = formataddr((Header(self.__name, 'utf-8').encode(), self.__sender)) msg['To'] = formataddr((Header(name, 'utf-8').encode(), receive)) msg['Subject'] = Header(subject, 'utf-8').encode() # 邮件正文 txt = MIMEText(text) # 将正文加载到邮件中 msg.attach(txt) try: # 构造附件 file = open(send_report, 'rb') send_file = file.read() file.close() # 设置附件 att = MIMEText(send_file, 'base64', 'utf-8') att["Content-Type"] = 'application/octet-stream' att["Content-Disposition"] = 'attachment; filename="%s.html"' % (Header(report_name, 'utf-8').encode()) # 将附件加载到邮件中 msg.attach(att) finally: # 发送邮件 server = smtplib.SMTP(smtp_server, 25) server.set_debuglevel(1) server.login(self.__sender, self.__password) server.sendmail(self.__sender, [receive], msg.as_string()) server.quit() return '发送成功'

示例:

''' 这里的demo是演示邮件发送方法 ''' from public_methods.common.smtp_email_report import SendSmtpEmailReport user = '@qq.com' # 邮件发送人邮箱 password = 'password' # 发送邮箱报告密码 receive = '@qq.com' # 接收邮件人邮箱 report = r'D:\test\PycharmProjects\cloudAItest\testrunner\test测试报告1.html' # 邮件附件路径 # 调用方法入参,第一个name是发送人名称 send_email = SendSmtpEmailReport(sender=user, password=password, name='demo').send_smtp_email_report(receive=receive, subject='demo', # 主题 send_report=report, # 附件 text='测试', # 正文 smtp_server='smtp.qq.com', # qq发送,也可以用其他类型邮箱,如139 report_name='demo', # 附件名称 name='demo_receive' # 接收人名称 ) print(send_email)
最新回复(0)