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中使用urllib2防止302跳转的代码例子
Jul 07 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
python获取引用对象的个数方式
Dec 20 Python
python如何通过pyqt5实现进度条
Jan 20 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
详解向scrapy中的spider传递参数的几种方法(2种)
Sep 28 Python
python在地图上画比例的实例详解
Nov 13 Python
详解Python中如何将数据存储为json格式的文件
Nov 18 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
Apr 02 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
利用static实现表格的颜色隔行显示
2006/10/09 PHP
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
JS的反射问题
2010/04/07 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
详解react关于事件绑定this的四种方式
2018/03/09 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
[03:03]DOTA2 2017国际邀请赛开幕战队入场仪式
2017/08/09 DOTA
Python 正则表达式操作指南
2009/05/04 Python
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
PyMongo安装使用笔记
2015/04/27 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
python pycurl验证basic和digest认证的方法
2018/05/02 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
python文件操作之批量修改文件后缀名的方法
2018/08/10 Python
python实现二维数组的对角线遍历
2019/03/02 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
护士节策划方案
2014/05/19 职场文书
节能环保家庭事迹材料
2014/08/27 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
python如何进行基准测试
2021/04/26 Python