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使用socket远程连接错误处理方法
Apr 29 Python
python实现随机梯度下降(SGD)
Mar 24 Python
解决django后台样式丢失,css资源加载失败的问题
Jun 11 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
如何使用python操作vmware
Jul 27 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
Aug 06 Python
python基于plotly实现画饼状图代码实例
Dec 16 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
Python实现EM算法实例代码
Oct 04 Python
用python修改excel表某一列内容的操作方法
Jun 11 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 DataGrid 实现代码
2009/08/12 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
python序列类型种类详解
2020/02/26 Python
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
晚会邀请函范文
2014/01/24 职场文书
护士节策划方案
2014/05/19 职场文书
优秀本科毕业生自荐信
2014/07/04 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
维稳工作情况汇报
2014/10/27 职场文书
司机个人年终总结
2015/03/03 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python