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中使用itertools模块中的组合函数的教程
Apr 13 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
Python中super的用法实例
May 28 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
python实时监控cpu小工具
Jun 21 Python
Python Tkinter模块实现时钟功能应用示例
Jul 23 Python
Pandas读取MySQL数据到DataFrame的方法
Jul 25 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
对Python3中dict.keys()转换成list类型的方法详解
Feb 03 Python
Tensorflow分批量读取数据教程
Feb 07 Python
python实现在内存中读写str和二进制数据代码
Apr 24 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 clearstatcache()函数详解
2010/03/02 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
对jQuary选择器的全面总结
2016/06/20 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
JS查找孩子节点简单示例
2019/07/25 Javascript
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python迭代器实例简析
2014/09/25 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
使用Python & Flask 实现RESTful Web API的实例
2017/09/19 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
详解Python正则表达式re模块
2019/03/19 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
新加坡第一大健康与美容零售商:屈臣氏新加坡(Watsons Singapore)
2020/12/11 全球购物
Java Servlet的主要功能和作用是什么
2014/02/14 面试题
给幼儿园老师的表扬信
2014/01/19 职场文书
办公室员工岗位工作职责
2014/03/10 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python