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中的计算示例
Jun 28 Python
人机交互程序 python实现人机对话
Nov 14 Python
python中lambda()的用法
Nov 16 Python
python筛选出两个文件中重复行的方法
May 31 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
详解python做UI界面的方法
Feb 27 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
PyTorch中的Variable变量详解
Jan 07 Python
适合Python初学者的一些编程技巧
Feb 12 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
Nov 13 Python
python中os.path.join()函数实例用法
May 26 Python
pandas时间序列之pd.to_datetime()的实现
Jun 16 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版(4)
2006/10/09 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
父节点获取子节点的字符串示例代码
2014/02/26 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
浅谈js的异步执行
2016/10/18 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
JS中LocalStorage与SessionStorage五种循序渐进的使用方法
2017/07/12 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
Python实现的HTTP并发测试完整示例
2020/04/23 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
python3实现微型的web服务器
2019/09/03 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
美国老牌主机服务商:iPage
2016/07/22 全球购物
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
预备党员群众意见
2015/06/01 职场文书
货款欠条范本
2015/07/03 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
html form表单基础入门案例讲解
2021/07/15 HTML / CSS