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

随笔: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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值