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 sys.path详细介绍
Oct 17 Python
Python函数返回值实例分析
Jun 08 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
python爬取酷狗音乐排行榜
Feb 20 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
python对验证码降噪的实现示例代码
Nov 12 Python
使用 Python ssh 远程登陆服务器的最佳方案
Mar 06 Python
django 数据库返回queryset实现封装为字典
May 19 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
千呼万唤始出来,DOTA2勇士令状不朽宝藏Ⅱ现已推出
2020/08/25 DOTA
深入解析php之apc
2013/05/15 PHP
php 批量替换程序的具体实现代码
2013/10/04 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
php获取远程文件的内容和大小
2015/11/03 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
用JS实现一个页面多个css样式实现
2008/05/29 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
微信小程序去除左上角返回键的实现方法
2020/03/06 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python原始字符串(raw strings)用法实例
2014/10/13 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Django Rest framework之认证的实现代码
2018/12/17 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
出国留学计划书
2014/04/27 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
乡镇2014法制宣传日活动总结
2014/11/01 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python