Django发送html邮件的方法
本文实例讲述了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会使用默认后端的实例。
以下是一个简单的事例:
fromdjango.core.mailimportsend_mail fromdjango.templateimportContext,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当然是为你提供了好的解决方案的,请看下面一段代码:
fromdjango.core.mailimportEmailMultiAlternatives fromdjango.templateimportContext,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()
看,很简单吧,那么现在我要稍稍的做一点点改动,我需要发送附件给收件人,只需要做一个简单的修改即可:
fromdjango.core.mailimportEmailMultiAlternatives fromdjango.templateimportContext,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:/MyDocuments/Python/doc/test.doc')#添加附件发送 msg.send()
好了,到此为止,发送邮件已经结束了。不过,此时,需求变了,我在自己的网站上配置了多个发送邮件的用户名和密码,现在需要用我指定的用户名和密码给用户发送邮件,该怎么办呢?请看下面的一段代码:
fromdjango.core.mailimportEmailMultiAlternatives,get_connection fromdjango.templateimportContext,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程序设计有所帮助。