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生成圆形图片的方法
Mar 25 Python
python 输出上个月的月末日期实例
Apr 11 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
详解Python_shutil模块
Mar 15 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
python机器学习库scikit-learn:SVR的基本应用
Jun 26 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
Python开发企业微信机器人每天定时发消息实例
Mar 17 Python
django xadmin中form_layout添加字段显示方式
Mar 30 Python
用python制作个视频下载器
Feb 01 Python
python实现简易名片管理系统
Apr 11 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&mysql(二)
2006/10/09 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
js数组的操作详解
2013/03/27 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
yepnope.js使用详解及示例分享
2014/06/23 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
jquery事件与绑定事件
2017/03/16 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
详解python时间模块中的datetime模块
2016/01/13 Python
python使用KNN算法手写体识别
2018/02/01 Python
python爬取各类文档方法归类汇总
2018/03/22 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
django中瀑布流写法实例代码
2019/10/14 Python
医学护理系毕业生求职信
2013/10/01 职场文书
配件采购员岗位职责
2013/12/03 职场文书
旷课检讨书2000字
2014/01/14 职场文书
甜美蛋糕店创业计划书
2014/01/30 职场文书
摄影助理岗位职责
2014/02/07 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers