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使用Mechanize模块编写爬虫的要点解析
Mar 31 Python
使用python实现生成用户信息
Mar 20 Python
解读python logging模块的使用方法
Apr 17 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
Python调用服务接口的实例
Jan 03 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
Python 使用多属性来进行排序
Sep 01 Python
Python流程控制 while循环实现解析
Sep 02 Python
Python字符串函数strip()原理及用法详解
Jul 23 Python
如何编写python的daemon程序
Jan 07 Python
jupyter notebook更换皮肤主题的实现
Jan 07 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
基于mysql的bbs设计(四)
2006/10/09 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
Vue shopCart 组件开发详解
2018/01/26 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
python文件和目录操作函数小结
2014/07/11 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
2019/05/13 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
Exoticca英国:以最优惠的价格提供豪华异国情调旅行
2018/10/18 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
冰淇淋店创业计划书范文
2013/12/27 职场文书
建筑个人求职信范文
2014/01/25 职场文书
2014年工会工作总结
2014/11/12 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
tomcat下部署jenkins的方法
2022/05/06 Servers
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers