`
runfeel
  • 浏览: 907695 次
文章分类
社区版块
存档分类
最新评论

Django发送html邮件

 
阅读更多

Django发送html邮件

在Django中,发送邮件非常的方便,一直没有时间,今天来做一个小小的总结吧。

我们常用的当然是通过send_mail发送邮件:

send_mail(subject,message,from_email,recipient_list, fail_silently=False,auth_user=None,auth_password=None,connection=None)

subject,message,from_emailrecipient_list 这四个参数是必须的。

  • subject: 字符串,表示邮件标题。
  • message: 字符串,表示邮件内容。
  • from_email: 字符串,表示发件邮箱。
  • recipient_list: 字符串列表,列表中每个成员都是一个邮箱地址,而且每个收件人都会在 “收件人/To:” 栏看到出现在recipient_list 中的其他收件人。
  • fail_silently: (可选)布尔值。为False 时,send_mail 会抛出smtplib.SMTPException 异常。smtplib 文档列出了所有可能的异常。这些异常都是SMTPException 的子类。
  • auth_user: (可选)SMTP服务器的认证用户名。没提供该参数的情况下,Django会使用EMAIL_HOST_USER 配置项的设置。
  • auth_password: (可选)SMTP服务器的认证密码,没提供该参数的情况下,Django会使用EMAIL_HOST_PASSWORD 配置项的设置。
  • connection: (可选)发送邮件的后端。没提供该参数的情况下,Django会使用默认后端的实例。

以下是一个简单的事例:

           from django.core.mail import send_mail
           from django.template import Context, loader
           
           context = {
     'nickname': user.nickname,
     'verify_url': verify_url,
    }
    email_template_name = 'template.html'
    t = loader.get_template(email_template_name)
    mail_list = [user.email, ]
           send_mail(
                subject=title,
                message=t.render(Context(context)),
                from_email=EMAIL_HOST_USER,         # 发件邮箱
                recipient_list=mail_list,
                fail_silently=False,
                auth_user=EMAIL_HOST_USER,          # SMTP服务器的认证用户名
                auth_password=EMAIL_HOST_PASSWORD,  # SMTP服务器的认证用户密码
                connection=None
            )
用过的人可能会发现,你在template.html中的标签,并没有通过浏览器的解析而显示出来了。

怎么办?我们要发送HTML邮件,Django当然是为你提供了好的解决方案的,请看下面一段代码:

            from django.core.mail import EmailMultiAlternatives
            from django.template import Context, loader 
            
            subject, from_email, to = title, EMAIL_HOST_USER, mail_list
            html_content = t.render(Context(context))
            msg = EmailMultiAlternatives(subject, html_content, from_email, to)
            msg.attach_alternative(html_content, "text/html")
            msg.send()
看,很简单吧,那么现在我要稍稍的做一点点改动,我需要发送附件给收件人,只需要做一个简单的修改即可:

            from django.core.mail import EmailMultiAlternatives
            from django.template import Context, loader 
            
            subject, from_email, to = title, EMAIL_HOST_USER, mail_list
            html_content = t.render(Context(context))
            msg = EmailMultiAlternatives(subject, html_content, from_email, to)
            msg.attach_alternative(html_content, "text/html")

            msg.attach_file(u'D:/My Documents/Python/doc/test.doc')        # 添加附件发送

            msg.send()

好了,到此为止,发送邮件已经结束了。不过,此时,需求变了,我在自己的网站上配置了多个发送邮件的用户名和密码,现在需要用我指定的用户名和密码给用户发送邮件,该怎么办呢?请看下面的一段代码:

            from django.core.mail import EmailMultiAlternatives,get_connection
            from django.template import Context, loader 

            conn = get_connection()                # 返回当前使用的邮件后端的实例 
            conn.username = 'my_email@qq.com'      # 更改用户名 
            conn.password = 'my_email'             # 更改密码 
            conn.host = 'smtp.exmail.qq.com'       # 设置邮件服务器 
            conn.open()                            # 打开连接

            EMAIL_HOST_USER = 'my_email@qq.com'
            subject, from_email, to = title, EMAIL_HOST_USER, mail_list
            html_content = t.render(Context(context))
            msg = EmailMultiAlternatives(subject, html_content, from_email, to)
            msg.attach_alternative(html_content, "text/html")

            conn.send_messages([msg,])             # 我们用send_messages发送邮件
            conn.close()                           # 发送完毕记得关闭连接

看来,也不是很难吧!
django.core.mail 的 get_connection()方法返回你当前使用的邮件后端的实例。
get_connection(backend=None,fail_silently=False,*args, **kwargs)
默认情况下,对 get_connection() 的调用会返回一个邮件后端实例,具体是哪个后端由EMAIL_BACKEND 配置项决定。如果指定了``backend`` 参数,就会对该后端进行实例化。

友情提示:在发送的HTML邮件中包含图片时,应该制定可以通过http访问的地址。如:http://www.baidu.com/medias/xxx.png




分享到:
评论

相关推荐

    Django发送html邮件的方法

    本文实例讲述了Django发送html邮件的方法。分享给大家供大家参考。具体如下: 在Django中,发送邮件非常的方便,一直没有时间,今天来做一个小小的总结吧。 我们常用的当然是通过send_mail发送邮件: 复制代码 代码...

    django-post_office:允许您在Django中异步发送电子邮件的Django应用。 支持HTML电子邮件,数据库支持的模板和日志记录

    Django Post Office是一个简单的应用程序,用于在Django中发送和管理您的电子邮件。 一些很棒的功能是: 允许您异步发送电子邮件 多后端支持 支持HTML电子邮件 支持HTML电子邮件中的内联图像 支持基于数据库的电子...

    Django应用程序中如何发送电子邮件详解

    我们常常会用到一些发送邮件的功能,比如有人提交了应聘的表单,可以向HR的邮箱发邮件,这样,HR不看网站就可以知道有人在网站上提交了应聘信息。下面这篇文章就介绍了在Django应用程序中如何发送电子邮件的相关资料...

    Django自定义表单引擎Autoforms.zip

    Autoforms是Jeff开源的一个基于Django的自定义表单引擎,可用于调查、投票、信息收集甚至是整合至工作流程引擎和PAAS平台当中。 AutoForms的主要特性: 支持14种字段类型13种html输入控件(包括日期选择组件)...

    Mail:使用HTML,CSS,Django和Javascript创建的单页电子邮件客户端网站

    使用HTML,CSS,Django和Javascript创建的单页电子邮件客户端网站。 演示: : 特征: 发送邮件:当用户提交电子邮件撰写表格时,JavaScript代码将发送电子邮件。 邮箱:当用户访问其“收件箱”,“已发送邮箱”或...

    django-forms-builder:让用户在Django管理中构建表单

    还提供了用于控制在提交表单时向谁发送电子邮件通知的选项。 通过CSV / XLS导出的可过滤报告,管理员可以使用所有表单条目。 表单生成器: 数据报告:HTML5功能支持以下HTML5表单功能。 placeholder属性required...

    django-contact:易于重复使用的“与我们联系”页面

    Django联络人提供简单易用的联系表单,供用户将邮件发送到settings.CONTACT_EMAILS,该电子邮件应为电子邮件的数组。 有一个防垃圾邮件机制,可以防止用户发送太多邮件安装将联系人添加到您的INSTALLED_APPS ...

    django 开发忘记密码通过邮箱找回功能示例

    主要介绍了django 开发忘记密码通过邮箱找回功能示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Django-Bulma-Quickstart:完成身份验证的Django-Bulma入门项目

    制作目录: .secrets-包含用于电子邮件/ redis /数据库的密钥/身份验证凭据的文件夹 创建秘密文件(名称应该很容易说明)/环境变量。 .django_secret_key ...由于我们发送了电子邮件验证,因此他们绝

    django开发的一个报修系统

    压缩包内含数据库使用到的MySQL数据及结构 django后端及原生HTML源码 在/backend/settings.py中正确设置好数据库连接 并且安装好所需第三方库,使用命令 ...需要白嫖的可以给我发邮件 10237610@qq.com

    django-tellme:启用用户反馈的Django应用(反馈按钮)

    用户提供反馈的网址(可选)在发布反馈后,将电子邮件发送给网站管理员支持本地化(当前支持的语言为英语和法语,欢迎翻译!) 通过重新定义模板来定制界面该应用程序的javascript部分使用的是feedback.js。 ...

    django-property-management

    使用Python,Django,HTML,CSS,JavaScript,Bootstrap和Postgres实施。 通过使用Docker作为容器平台,使用Nginx和uWSGI作为Web服务器的Ubuntu服务器,将其部署到具有Ubuntu服务器的Oracle IaaS,以提高性能。 ...

    learn_django:这是一个基于Django框架的功能博客

    通过SMTP发送电子邮件 创建和执行单元测试 还了解如何将您的Python / Django应用程序与以下内容集成: 持续集成:模拟应用程序环境并在推送到github后运行所有单元测试 在Amazon Cloud Service托管Django应用

    PyWisher:使用Django构建的自动生日许愿器

    只需上传excelsheet或添加一次数据,PyWisher便会永远记住它,并将每年代表您在其电子邮件中发送生日祝福。 因此,不要错过生日,并开始发送祝福。 网站连结 您可以在或访问该网站。 特征 上载Excelsheet 手动添加...

    简单的Python示例母亲节祝福.pdf

    如果您想要发送这个HTML内容作为电子邮件的附件,或者将其嵌入到Web应用程序中,您可能需要使用额外的库(如smtplib用于发送电子邮件,或Flask/Django用于Web开发)来实现这些功能。在这个示例中,我们首先定义了一...

    daily_fresh:天天生鲜电商项目,技术栈:web框架:Django,异步任务处理:celery, 分布式文件存储系统:fastDFS+Nginx, 全局检索:haystack+whoosh+jieba,数据库:MySQL,缓存服务器:redis

    celery:分别负责用户注册异步发送邮件以及不同用户登陆系统动态生成首页 fdfs+nginx:存储网站静态文件,实现项目和资源分离,达到分布式效果 haystack+whoosh+jieba:全文检索框架,修改底层haystack库使之对中文...

    django-blog-app

    3单击邮件发送系统:只需3单击即可将您选择的博客帖子发送给所有订阅者。 要将您的博客帖子作为时事通讯发送给订阅者,请转到管理面板中的帖子页面,选择要发送的帖子,单击操作下拉菜单,然后选择邮件帖子。 如果...

    test-django-newsfeed

    在这个示例项目中,我们使用celery , celery-beat和redis在后台发送电子邮件。 项目要点: 芹菜任务 from celery . decorators import task from newsfeed . models import Newsletter from newsfeed . utils . ...

Global site tag (gtag.js) - Google Analytics