python实现发送带附件的邮件代码分享


Posted in Python onSeptember 22, 2020

具体代码如下:

from django.template import loader
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
import smtplib
import traceback


class SendEmail(object):
    """
    发送html邮件
    """
    def __init__(self, mail_host, mail_port, mail_user, mail_pass, sender, to_list_email):
        # 创建邮件对象
        self.msg = MIMEMultipart()
        # 邮箱服务地址
        self.mail_host = mail_host
        # 邮箱端口号
        self.mail_port = mail_port
        # 邮箱账号
        self.mail_user = mail_user
        # 密码
        self.mail_pass = mail_pass
        # 发送人
        self.sender = sender
        # 收件人邮箱列表
        self.to_list_email = to_list_email

    def make_html(self, base_html_path, **kwargs):
        """

        :param base_html_path: html模板文件路径
        :param **kwargs: 模板中的参数
        :return:
        """
        mail_html = loader.render_to_string(
            template_name=base_html_path,
            context={
                # "id": tid,
                **kwargs   # 传入模板文件的数据
            }
        )
        return mail_html

    def add_attachment(self, file_path):
        """
        制作附件
        :param file_path:
        :return:
        """
        with open(file_path, 'rb') as f:
            content = f.read()
        att = MIMEText(content, _subtype='plain', _charset='utf-8')
        att["Content-Type"] = 'application/octet-stream'
        att["Content-Disposition"] = 'attachment; filename=task_report.docx'
        att.add_header("Content-Disposition", "attachment", filename=("gbk", "", "{}".format(filename)))  # 如果文件名中有中文的话需设置
        return att

    def send_html_email(self, base_html_path, subject, str_to, str_cc, file_path, **kwargs):
        """

        :param html: html文件对象
        :param subject: 邮件主题
        :return:
        """
        html = self.make_html(base_html_path, **kwargs)
        self.msg.attach(MIMEText(str(html), 'html'))
        self.msg['from'] = Header('安全测试平台', 'utf-8')
        self.msg['Subject'] = Header(subject, 'utf-8')
        self.msg["Accept-Language"] = "zh-CN"
        self.msg["Accept-Charset"] = "ISO-8859-1,utf-8"
        self.msg['to'] = str_to  # 发送人   str
        self.msg['cc'] = str_cc  # 抄送人   str
        # 添加附件
        att = self.add_attachment(file_path)
        self.msg.attach(att)
        # 发送邮件
        try:
            server = smtplib.SMTP()
            server.connect(self.mail_host, self.mail_port)
            server.login(self.mail_user, self.mail_pass)
            server.sendmail(self.sender, self.to_list_email, self.msg.as_string())
            server.quit()
        except Exception:
            print(traceback.format_exc())

内容扩展:

实例二:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

"""
发送带附件邮件的完整代码
"""

class HandleEmail():
  def handle_email(self):
    # step1 连接smtp服务器并登陆
    smtp = smtplib.SMTP_SSL(host='smtp.qq.com', port=465)
    smtp.login(user='XXXXX@qq.com', password='XXXXX')

    # 构造多组件邮件并完善邮件描述性信息
    msg = MIMEMultipart()
    msg['Subject'] = '带附件的邮件-01'
    msg['FROM'] = 'XXXXXX@qq.com'
    msg['To'] = 'XXXXX@163.com'

    # 添加邮件的文本内容
    text = MIMEText(_text='这是邮件正文的内容', _charset='UTF8')
    msg.attach(text)

    # 添加附件和附件header
    with open(file=r'XXXXXXXX\report.html', mode='rb') as f:
      content = f.read()
    attachment = MIMEApplication(_data=content)
    attachment.add_header('content-disposition', 'attachment', filename='report.html')
    msg.attach(attachment)

    # 发送邮件
    smtp.send_message(msg=msg, from_addr='XXXXXXX@qq.com', to_addrs='XXXXX@163.com')


if __name__ == '__main__':
  e_mail = HandleEmail()
  e_mail.handle_email()

使用创建好的smtp对象发送邮件,需要把上面编辑好的msg作为参数传入,然后填写收发件人,如果有多个收件人,以列表的形式传入参数

smtp.send_message(msg=msg,from_addr='',to_addrs='') # 单个收件人
smtp.send_message(msg=msg,from_addr='',to_addrs=['收件人一','收件人二']) # 多个收件人

到此这篇关于python实现发送带附件的邮件代码分享的文章就介绍到这了,更多相关利用python实现发送带附件的邮件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中给List添加元素的4种方法分享
Nov 28 Python
Python中的defaultdict模块和namedtuple模块的简单入门指南
Apr 01 Python
python中sys.argv参数用法实例分析
May 20 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
使用Flask集成bootstrap的方法
Jul 24 Python
Django REST framework视图的用法
Jan 16 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
PyCharm+PyQt5+QtDesigner配置详解
Aug 12 Python
Python 列表反转显示的四种方法
Nov 16 Python
python的netCDF4批量处理NC格式文件的操作方法
Mar 21 Python
使用Python绘制台风轨迹图的示例代码
Sep 21 #Python
利用python绘制中国地图(含省界、河流等)
Sep 21 #Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 #Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 #Python
python3.8动态人脸识别的实现示例
Sep 21 #Python
如何在Anaconda中打开python自带idle
Sep 21 #Python
Python 实现国产SM3加密算法的示例代码
Sep 21 #Python
You might like
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP curl使用实例
2015/07/02 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
PHP实现浏览器格式化显示XML的方法示例
2019/01/22 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
使用javascript为网页增加夜间模式
2014/01/26 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
javascript入门教程基础篇
2015/11/16 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
Sea.JS知识总结
2016/05/05 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
Python脚本实现网卡流量监控
2015/02/14 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
2018/12/30 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
NumPy 数组使用大全
2019/04/25 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
Python学习之os模块及用法
2020/06/03 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
博士研究生自我鉴定范文
2013/12/04 职场文书
工作表现自我评价
2014/02/08 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
小学开学标语
2014/07/01 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
2015公务员年度考核评语
2015/03/25 职场文书