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 Queue模块详解
Nov 30 Python
python实现解数独程序代码
Apr 12 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
Python实现控制台中的进度条功能代码
Dec 22 Python
python最长回文串算法
Jun 04 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
Django 外键的使用方法详解
Jul 19 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
深入学习python多线程与GIL
Aug 26 Python
详解python uiautomator2 watcher的使用方法
Sep 09 Python
使用Django搭建网站实现商品分页功能
May 22 Python
python使用openpyxl库读写Excel表格的方法(增删改查操作)
May 02 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去除重复字的实现代码
2011/09/16 PHP
PHP实现的简单日历类
2014/11/29 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
2014/06/06 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
jQuery中:empty选择器用法实例
2014/12/30 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
python requests post多层字典的方法
2018/12/27 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
2019/08/09 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
深入了解python列表(LIST)
2020/06/08 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
社区志愿者心得体会
2014/01/03 职场文书
企业员工薪酬方案
2014/06/04 职场文书
Redis可视化客户端小结
2021/06/10 Redis
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
从原生JavaScript到React深入理解
2022/07/23 Javascript