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中实现定制类的特殊方法总结
Sep 28 Python
python通过apply使用元祖和列表调用函数实例
May 26 Python
python实现中文转换url编码的方法
Jun 14 Python
Python实现确认字符串是否包含指定字符串的实例
May 02 Python
django中静态文件配置static的方法
May 20 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
Feb 22 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
Aug 17 Python
对python中的*args与**kwgs的含义与作用详解
Aug 28 Python
python中round函数如何使用
Jun 19 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 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
php输出xml属性的方法
2015/03/19 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
php+jQuery实现的三级导航栏下拉菜单显示效果
2017/08/10 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
用JavaScript隐藏控件的方法
2009/09/21 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
深入理解vue中的$set
2017/06/01 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
python判断windows系统是32位还是64位的方法
2015/05/11 Python
python简单实现计算过期时间的方法
2015/06/09 Python
深入理解python中的atexit模块
2017/03/07 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python3实现微型的web服务器
2019/09/03 Python
解决django FileFIELD的编码问题
2020/03/30 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
在什么时候需要使用"常引用"
2015/12/31 面试题
为什么说Ruby是一种真正的面向对象程序设计语言
2012/10/30 面试题
平面设计岗位职责
2013/12/14 职场文书
中学生寄语大全
2014/04/03 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
公司董事长岗位职责
2014/06/08 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书