Django发送html邮件的方法


Posted in Python onMay 26, 2015

本文实例讲述了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_email 和recipient_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

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
python为tornado添加recaptcha验证码功能
Feb 26 Python
用Python编写简单的定时器的方法
May 02 Python
python删除本地夹里重复文件的方法
Nov 19 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
python 自动轨迹绘制的实例代码
Jul 05 Python
解决python 文本过滤和清理问题
Aug 28 Python
python快速排序的实现及运行时间比较
Nov 22 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
Python unittest discover批量执行代码实例
Sep 08 Python
Python Django 后台管理之后台模型属性详解
Apr 25 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
Jun 04 Python
Python使用xlrd模块操作Excel数据导入的方法
May 26 #Python
django实现分页的方法
May 26 #Python
Django imgareaselect手动剪切头像实现方法
May 26 #Python
Django实现图片文字同时提交的方法
May 26 #Python
Python实现的简单算术游戏实例
May 26 #Python
Django中使用group_by的方法
May 26 #Python
python3序列化与反序列化用法实例
May 26 #Python
You might like
PHP中,文件上传
2006/12/06 PHP
WordPress中使主题支持小工具以及添加插件启用函数
2015/12/22 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
javascript new一个对象的实质
2010/01/07 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
如何获取select下拉框的值(option没有及有value属性)
2013/11/08 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
jQuery实现全选按钮
2021/01/01 jQuery
Python完全新手教程
2007/02/08 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
python pandas模块基础学习详解
2019/07/03 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
python manage.py runserver流程解析
2019/11/08 Python
Django中的session用法详解
2020/03/09 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
波兰香水和化妆品购物网站:Notino.pl
2017/11/07 全球购物
班主任新年寄语
2014/04/04 职场文书
学校创先争优活动总结
2014/08/28 职场文书
劳资员岗位职责
2015/02/13 职场文书
2015入党自荐书范文
2015/03/05 职场文书
初中军训感想
2015/08/07 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers