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中用Ctrl+C终止多线程程序的问题解决
Mar 30 Python
paramiko模块安装和使用(远程登录服务器)
Jan 27 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
Python ftp上传文件
Feb 13 Python
浅谈Python中的zip()与*zip()函数详解
Feb 24 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
python 统计文件中的字符串数目示例
Dec 24 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
python实现拼接图片
Mar 23 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 Python
Django权限控制的使用
Jan 07 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 XML数据解析代码
2010/05/26 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
jstree的简单实例
2016/12/01 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
vue 导航内容设置选中状态样式的例子
2019/11/01 Javascript
Python标准库笔记struct模块的使用
2018/02/22 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
户外用品商店创业计划书
2014/01/29 职场文书
服务质量承诺书
2014/03/27 职场文书
党风廉设责任书
2014/04/16 职场文书
一年级学生评语大全
2014/04/21 职场文书
高效课堂标语
2014/06/26 职场文书
交通安全横幅标语
2014/10/07 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
社区综治工作汇报
2014/10/27 职场文书
实习工作表现评语
2014/12/31 职场文书
物流业务员岗位职责
2015/04/03 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
参加招聘会后的感想
2015/08/10 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python
Nginx实现负载均衡的项目实践
2022/03/18 Servers
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python