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常用知识点汇总
May 08 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
Python安装pycurl失败的解决方法
Oct 15 Python
python读取文件名并改名字的实例
Jan 07 Python
python二维键值数组生成转json的例子
Dec 06 Python
使用wxpy实现自动发送微信消息功能
Feb 28 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
Python爬虫JSON及JSONPath运行原理详解
Jun 04 Python
Elasticsearch py客户端库安装及使用方法解析
Sep 14 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 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
获得Google PR值的PHP代码
2007/01/28 PHP
php一些公用函数的集合
2008/03/27 PHP
php mssql 时间格式问题
2009/01/13 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
js对文章内容进行分页示例代码
2014/03/05 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
图解javascript作用域链
2019/05/27 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
Python对列表排序的方法实例分析
2015/05/16 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
详解Python 正则表达式模块
2018/11/05 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
python实现简单文件读写函数
2021/02/25 Python
使用canvas压缩图片上传的方法示例
2020/02/07 HTML / CSS
俄罗斯茶和咖啡网上商店:Tea.ru
2021/01/26 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
自考毕业生自我鉴定
2013/11/04 职场文书
2014年信访工作总结
2014/11/17 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python