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小程序来统计测试脚本的关键字
Mar 12 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
Sep 21 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
python学生信息管理系统
Mar 13 Python
Python实现购物车购物小程序
Apr 18 Python
Python 获取div标签中的文字实例
Dec 20 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
解决Mac下使用python的坑
Aug 13 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
在Python中字典按值排序的实现方法
Nov 12 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
层叠菜单的动态生成
2006/10/09 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
JS打印彩色菱形的实例代码
2018/08/15 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
python2.7的编码问题与解决方法
2016/10/04 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
python实现树形打印目录结构
2018/03/29 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
python学生管理系统
2019/01/30 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
python数据类型强制转换实例详解
2020/06/22 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
另类冲刺标语
2014/06/24 职场文书
个人作风建设总结
2014/10/23 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书