Python中Django发送带图片和附件的邮件的实例详解

本篇文章主要介绍了python中django发送带图片和附件的邮件 ,非常具有实用价值,需要的朋友可以参考下。

最近需要做集团的SRC系统。暂无安全研发,所以只能找我这个小菜兼职开发。系统使用Django框架,在整个过程中,有许多奇特的需求。在某项需求中,需要给厂商用户发送富文本邮件,漏洞详情,这个折腾了一下,感觉略有收获,所以记一篇随笔。

首先我在网上搜索了一些资料,发现都是python通过smtplib发送,使用MIME格式来生成富文本邮件:传送门

我想的是,使用Django框架,框架带了邮件模块,没必要引入smtplib吧。我就想,向上文传送门那样,生成一个MIME文件,然后通过

 from django.core import mail mail.send_mail

登录后复制

这种方式把MIMEMultipart对象使用as_string()方法生成的文件当做message发出去不就好了吗。呃,有兴趣的可以试一下。。我发出去了一堆字符串。。

立即学习“Python免费学习笔记(深入)”;

好吧,失败了,难道真的要把smtplib引进来?

天无绝人之路,这个时候我看到了一句话:EmailMessage是Django封装好的smtp。哦?还有这回事?好吧,尝试一下看看源码?跳转至message.py

class EmailMessage(object):  """  A container for email information.  """  content_subtype = 'plain'  mixed_subtype = 'mixed'  encoding = None   # None => use settings default  def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,         connection=None, attachments=None, headers=None, cc=None,         reply_to=None):    """    Initialize a single email message (which can be sent to multiple    recipients).    All strings used to create the message can be unicode strings    (or UTF-8 bytestrings). The SafeMIMEText class will handle any    necessary encoding conversions.    """

登录后复制

恩!大体知道了用法。

 msg = mail.EmailMessage('富文本邮件测试', html, from_mail, recipient_list)

登录后复制

就是这样了。而且看message.py文件

if to:       if isinstance(to, six.string_types):        raise TypeError('"to" argument must be a list or tuple')      self.to = list(to)

登录后复制

看到raise的信息,明白了,我们传给他的recipient_list应该是元组或者列表

self.from_email = from_email or settings.DEFAULT_FROM_EMAIL

登录后复制

我们传给他的就是Django settings.py文件里配置的邮箱,就是以下格式的:

# email config# 这是我们工程目录下settings文件的配置EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'EMAIL_HOST_PASSWORD = 'xxxxxxxx'EMAIL_HOST_USER = 'xxxx@xxxx.xxxx'EMAIL_HOST = 'smtp.xxxx.com'EMAIL_PORT = port

登录后复制

好,到此为止,我们知道了这个类怎么用。我们看传送门里的代码,挑选比较重要的

msgRoot = MIMEMultipart('related')msgRoot['Subject'] = subjectmsgRoot['From'] = strFrommsgRoot['To'] = strTomsgText = MIMEText(plainText, 'plain', 'utf-8')msgAlternative.attach(msgText)#设定HTML信息msgText = MIMEText(htmlText, 'html', 'utf-8')msgAlternative.attach(msgText)

登录后复制

然后我们对比一下message.py里面的代码:

def message(self):    encoding = self.encoding or settings.DEFAULT_CHARSET    msg = SafeMIMEText(self.body, self.content_subtype, encoding)    msg = self._create_message(msg)    msg['Subject'] = self.subject    msg['From'] = self.extra_headers.get('From', self.from_email)    msg['To'] = self.extra_headers.get('To', ', '.join(map(force_text, self.to)))

登录后复制

篇幅所限不粘贴太多,有兴趣可以自己去研读。我们发现,他们是不是很像,其实读完整个message.py我们会发现一件事。原来EmailMessage这个类的对象,可以看做是MIMEMultipart对象加上了smtplib的发送功能。而且它也有attach方法,可以像MIMEMultipart对象那样拼接富文本邮件内容,好,这就有办法了!我们通过EmailMessage来发送富文本邮件!

# -*- coding: utf-8 -*-# ===============================================================================# @ Creator:首席小学生# @ Date:2017-03-28# 构造富文本邮件内容# ===============================================================================import osfrom email.mime.image import MIMEImagefrom django.conf import settingsfrom django.core import maildef add_img(src, img_id):  """  在富文本邮件模板里添加图片  :param src:  :param img_id:  :return:  """  fp = open(src, 'rb')  msg_image = MIMEImage(fp.read())  fp.close()  msg_image.add_header('Content-ID', '')  return msg_imagedef send_util():  path = os.getcwd()  path_use = path.replace('\', '/')  html = '''  nbsp;html>            Title      牛逼呀小伙子,你成功了  @@##@@      '''  recipient_list = ['xxxx@xxxx.com']  from_mail = settings.EMAIL_HOST_USER  msg = mail.EmailMessage('富文本邮件测试', html, from_mail, recipient_list)  msg.content_subtype = 'html'  msg.encoding = 'utf-8'  image = add_img(path_use+'/mail_util/test.png', 'test_cid')  msg.attach(image)  if msg.send():    return True  else:    return False

登录后复制

我们在views中设置视图函数,调用上面这些测试方法尝试一下:

from django.shortcuts import renderfrom html_to_mail import send_utildef send_mail(request):  if send_util():    return render(request, 'ok.html')  else:    return render(request, 'error.html')

登录后复制

在urls里面随意配置一个映射指向这个视图函数,把Django工程run起来,直接在浏览器get这个映射。发现邮件发送成功!

Python中Django发送带图片和附件的邮件的实例详解

Python中Django发送带图片和附件的邮件的实例详解

以上就是Python中Django发送带图片和附件的邮件的实例详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2273571.html

(0)
上一篇 2025年2月27日 13:29:34
下一篇 2025年2月25日 21:54:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 实例详解python中类的继承

    这篇文章主要介绍了python类的继承实例详解的相关资料,需要的朋友可以参考下 python 类的继承 对于许多文章讲解python类的继承,大多数都是说一些什么oop,多态等概念,我认为这样可能对有一定基础的开发者帮助不是那么大,不如直接…

    编程技术 2025年2月27日
    200
  • 实例详解django开发之settings.py中变量的全局引用

    当网站里面的一些内容,如邮箱,网站标题,网站的描述,这些东西我们可以存在数据库中也可以存放在我们的setting 文件中,这篇文章主要给大家介绍了django中settings.py变量的全局引用的相关资料,文中介绍的非常详细,需要的朋友可…

    2025年2月27日 编程技术
    200
  • 实例详解Python中Django后台自定义表单控件

    本篇文章主要介绍了python中django 后台自定义表单控件,其实 django 已经为我们提供了一些可用的表单控件,比如:多选框、单选按钮等,有兴趣的开业了解一下。 在 django 中我们可以在 admin.py 中添加 Model…

    2025年2月27日
    200
  • 详解关于windows上安装Anaconda和python的方法

    本文主要给大家介绍windows上安装anaconda和python的教程详解,非常不错,具有参考借鉴价值,需要的朋友参考下  一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1、不开源,价格贵 2…

    2025年2月27日 编程技术
    200
  • python调度框架APScheduler使用的实例详解

    本篇文章主要介绍了详解python调度框架apscheduler使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 最近在研究python调度框架APScheduler使用的路上,那么今天也算个学习笔记吧! #…

    编程技术 2025年2月27日
    200
  • 关于Python中多线程的详解

    这篇文章主要介绍了python 多线程实例详解的相关资料,需要的朋友可以参考下 Python 多线程实例详解 多线程通常是新开一个后台线程去处理比较耗时的操作,Python做后台线程处理也是很简单的,今天从官方文档中找到了一个Demo. 实…

    编程技术 2025年2月27日
    200
  • 学习Python到底能干什么

    python是一种计算机程序设计语言,又被称为胶水语言,可以用混合编译的方式使用c/c++/java等语言的库。你可能已经听说过很多种流行的编程语言,比如在大学里感觉非常难学的c语言,进入社会非常流行的java语言,以及适合初学者的basi…

    编程技术 2025年2月27日
    200
  • Python笔试题(2017最新)Python面试题笔试题

    想找一份Python开发工作吗?那你很可能得证明自己知道如何使用Python。下面这些问题涉及了与Python相关的许多技能,问题的关注点主要是语言本身,不是某个特定的包或模块。每一个问题都可以扩充为一个教程,如果可能的话。某些问题甚至会涉…

    2025年2月27日
    200
  • 分享一个用python遍历字符串(含汉字)的方法

    这篇文章主要介绍了python 遍历字符串(含汉字)实例详解的相关资料,需要的朋友可以参考下 python 遍历字符串(含汉字)实例详解 s = “中国china”for j in s:  print j 登录后复制 首先一个,你这个&#8…

    编程技术 2025年2月27日
    200
  • 实例详解python模拟登录并且保持cookie的方法

    模拟登录相信对大家来说都不陌生,下面这篇文章主要给大家介绍了关于python模拟登录并且保持cookie的方法,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。 前言 最近在爬行 nosec.org 的数据,看了…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论