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中的with...as用法介绍
May 28 Python
Python 正则表达式实现计算器功能
Apr 29 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
python操作cfg配置文件方式
Dec 22 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
Win10下用Anaconda安装TensorFlow(图文教程)
Jun 18 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
python 远程执行命令的详细代码
Feb 15 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
长波有什么东西
2021/03/01 无线电
php数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
php利用imagemagick实现复古老照片效果实例
2017/02/16 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
2007/07/11 Javascript
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
jQuery扩展_动力节点Java学院整理
2017/07/05 jQuery
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
Javascript的this详解
2019/03/23 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
github配置使用指南
2014/11/18 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
Python线程threading模块用法详解
2020/02/26 Python
Python读写压缩文件的方法
2020/07/30 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
门诊挂号室室长岗位职责
2013/11/27 职场文书
优秀员工年终发言演讲稿
2014/01/01 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
区域经理岗位职责
2015/02/02 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
Python matplotlib多个子图绘制整合
2022/04/13 Python