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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
python matplotlib 在指定的两个点之间连线方法
May 25 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
Python实现插入排序和选择排序的方法
May 12 Python
学习python分支结构
May 17 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
Oct 24 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
python实现梯度下降法
Mar 24 Python
关于tensorflow softmax函数用法解析
Jun 30 Python
python爬虫请求头设置代码
Jul 28 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 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 xfocus防注入资料
2008/04/27 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
jquery.cvtooltip.js 基于jquery的气泡提示插件
2010/11/19 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python if语句知识点用法总结
2018/06/10 Python
python制作图片缩略图
2019/04/30 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python如何实现复制目录到指定目录
2020/02/13 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
大学生学习新党章思想汇报
2014/10/25 职场文书
保密工作整改报告
2014/11/06 职场文书
工程部岗位职责
2015/02/10 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书