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使用QQ邮箱发送Email的方法实例
Feb 09 Python
Python获取当前路径实现代码
May 08 Python
python基础while循环及if判断的实例讲解
Aug 25 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
django用户登录和注销的实现方法
Jul 16 Python
对DataFrame数据中的重复行,利用groupby累加合并的方法详解
Jan 30 Python
python实现堆排序的实例讲解
Feb 21 Python
Python猜数字算法题详解
Mar 01 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
pytorch使用horovod多gpu训练的实现
Sep 09 Python
Django多数据库联用实现方法解析
Nov 12 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 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生成网页快照 不用COM不用扩展.
2010/02/11 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
ExtJs中gridpanel分组后组名排序实例代码
2013/12/02 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
Javascript中的getter和setter初识
2017/08/17 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
在 Angular中 使用 Lodash 的方法
2018/02/11 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
微信小程序实现图片压缩
2019/12/03 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
python实现多线程采集的2个代码例子
2014/07/07 Python
python连接mysql实例分享
2016/10/09 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
python实现简单的单变量线性回归方法
2018/11/08 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
大学同学聚会邀请函
2014/01/29 职场文书
2014年两会学习心得范例
2014/03/17 职场文书
《第一次抱母亲》教学反思
2014/04/16 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
卫生主题班会
2015/08/14 职场文书
详解Python内置模块Collections
2022/03/22 Python