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选择排序、冒泡排序、合并排序代码实例
Apr 10 Python
python处理按钮消息的实例详解
Jul 11 Python
python3实现SMTP发送邮件详细教程
Jun 19 Python
Flask-WTF表单的使用方法
Jul 12 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
python单例设计模式实现解析
Jan 07 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
python的sys.path模块路径添加方式
Mar 09 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
Python自动巡检H3C交换机实现过程解析
Aug 14 Python
python自然语言处理之字典树知识总结
Apr 25 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 htmlspecialchars加强版
2010/02/16 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
jQuery 第二课 操作包装集元素代码
2010/03/14 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
js Date概念详细介绍
2013/11/22 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
vue的安装及element组件的安装方法
2018/03/09 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
Python Deque 模块使用详解
2014/07/04 Python
Python文件去除注释的方法
2015/05/25 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
python3使用GUI统计代码量
2019/09/18 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
python实现银行账户系统
2021/02/22 Python
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
实习生自我鉴定
2013/12/12 职场文书
办护照工作证明范本
2014/01/14 职场文书
市场安全管理制度
2014/01/26 职场文书
物业经理自我鉴定
2014/03/03 职场文书
保护动物倡议书
2014/04/15 职场文书
鼓舞士气的口号
2014/06/16 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
MySQL 四种连接和多表查询详解
2021/07/16 MySQL
浅谈MySQL之select优化方案
2021/08/07 MySQL
python中pd.cut()与pd.qcut()的对比及示例
2022/06/16 Python