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 循环while和for in简单实例
Aug 16 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
Python实现Linux的find命令实例分享
Jun 04 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
python采集微信公众号文章
Dec 20 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
Python urllib2运行过程原理解析
Jun 04 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不用递归实现无限分级的例子分享
2014/04/18 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
2019/03/11 PHP
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
2016/09/17 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
详解create-react-app 自定义 eslint 配置
2018/06/07 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
2019/05/07 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
电气工程及其自动化学生实习自我鉴定
2013/09/19 职场文书
银行开业庆典方案
2014/02/06 职场文书
大型会议接待方案
2014/03/01 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
金陵十三钗观后感
2015/06/04 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
JS数组的常用方法整理
2021/03/31 Javascript