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的设计模式编程入门指南
Apr 02 Python
numpy中的高维数组转置实例
Apr 17 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
python实现windows倒计时锁屏功能
Jul 30 Python
python数据归一化及三种方法详解
Aug 06 Python
python代码打印100-999之间的回文数示例
Nov 24 Python
python如何在word中存储本地图片
Apr 07 Python
利用python调用摄像头的实例分析
Jun 07 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 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
Terran热键控制
2020/03/14 星际争霸
PHP文本操作类
2006/11/25 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
js阻止浏览器默认行为触发的通用方法(推荐)
2016/05/15 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
基于JavaScript判断两个对象内容是否相等
2020/01/10 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
python安装twisted的问题解析
2018/08/21 Python
Python Pillow Image Invert
2019/01/22 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
入学申请自荐信范文
2014/02/26 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
群众路线调研报告范文
2014/11/03 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js