注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

郁夫的博客

我爱你们,只是你们不知道!

 
 
 

日志

 
 
 
 

django 发送邮件 - 转  

2011-02-22 09:55:58|  分类: Django |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
简介:
    虽然python提供了smtplib库,来完成email的发送功能,但是django对其进行了封装,使得发送邮件的接口变得更简单,更方便,django的封装位于django.core.mail
例子:
   
from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', 'from@example.com',
['to@example.com'], fail_silently=False)
邮件的发送通过django的setting文件中设置的 EMAIL_HOSTEMAIL_PORTEMAIL_HOST_USER
EMAIL_HOST_PASSWORD来认证SMTP服务器、 EMAIL_USE_TLS用来说明发送的时候是否使用一个安全的连接
来进行, DEFAULT_CHARSET用来指定发送邮件的字符集。
定义:
(1)send_mail(subject, message, from_email, recipient_list,
fail_silently=False, auth_user=None,auth_password=None)
作用:发送一个邮件
subject:邮件的标题
message:邮件的内容
from_email:发送邮件者
recipient_list:接受邮件者列表
fail_silently:可选参数,默认是False,如果是False,则发送失败时候,会抛出smtplib.SMTPException异常,具体详细的异常,
请参考 smtplib docs,这些异常都是SMTPException的子类。
auth_user:可选的参数,如果有,那么认证SMTP Server时,使用该用户,否则使用EMAIL_HOST_USER设置
auth_password:可选参数,如果有,那么认证SMTP Server时,使用该密码,否则使用EMAIL_HOST_PASSWORD设置
(2)send_mass_mail(datatuple, fail_silently=False, auth_user=None, auth_password=None)
datatuple:是一个元组,其格式如下:
(subject, message, from_email, recipient_list)
作用:发送一组邮件
fail_silently, auth_user and auth_password三个参数的意义同send_mail。

send_mass_mail和send_mail的区别
send_mail每次发送邮件都打开一个新的连接来发送。
send_mass_mail每次发送邮件时仅仅打开一个连接,将这次元组中的所有邮件发送出去。
所以send_mass_mail更有效率。
两个给管理员发送邮件的快捷方式
mail_admins(subject, message, fail_silently=False)

mail_managers(subject, message, fail_silently=False)
这两个方法在发送邮件时注意以下两点:
(1)邮件的标题前面django会自动加上 EMAIL_SUBJECT_PREFIX中设置的前缀,缺省是"[Django] "
(2)邮件的发送者将是由SERVER_EMAIL来设置
(3)邮件的接受者将是 MANAGERSADMINS来设置
EmailMessage 和 SMTPConnection
上面提供的email函数,仅仅能够提供最基本的发送邮件的功能,其他的诸如:文件附件和多媒体email都需要EmailMessage类来提供。
EmailMessage构造函数的所有参数如下所示,所有参数都是可选的
subject:邮件的标题
body:邮件的正文,这个字段应该是纯文本文件
from_email:发送者的邮件地址,fred@example.comFred <fred@example.com>,这两种格式都是合法的,
          如果该字段没有设置的话,将使用setting中的
DEFAULT_FROM_EMAIL
to:所有接收人组成的一个元组
bcc:所有秘密抄送人组成的一个元组
connection:发送邮件是使用的SMTPConnection连接,如果不适用该字段,那么每次发送邮件时都会新建
                   一个SMTPConnection对象
attachments:附件列表,能是email.MIMEBase.MIMEBase实例,或者(filename, content, mimetype)元组

headers:邮件头字段,
如果要增加额外的邮件头,请用该字段,关键字是key,值是value。
例如:
email = EmailMessage('Hello', 'Body goes here', 'from@example.com',
['to1@example.com', 'to2@example.com'], ['bcc@example.com'],
headers = {'Reply-To': 'another@example.com'})
该类有下列方法可用:
(1)send(fail_silently=False) 发送邮件,如果fail_silently=False时,出错将抛掷异常
(2)
message() 返回一个django.core.mail.SafeMIMEText类型的对象或者django.core.mail.SafeMIMEMultipart类型的对象。
(3)recipients() 获取发送人列表,包括to和bcc的所有发送人
(4)attach() 向邮件中增加附件,其参数可以是email.MIMEBase.MIMEBase的实例,或者是filename, content and mimetype,
其中filename是附件中呈现的文件名,content是附件的数据,
mimetype是附件的MIME类型
例如:message.attach('design.png', img_data, 'image/png')
(5)attach_file() 直接从文件系统中向邮件添加附件,如果mime类型没有填写,那么django会根据文件名推测出来。
例如:message.attach_file('/images/weather_map.png')

EmailMultiAlternatives

使用EmailMessage中发送邮件的内容,只能是一种类型的"text/html"或者"text/plain"。但是实际应用中,
我们可能会一封邮件中既有text/html的内容,又有text/plain的内容,这个时候可以使用EmailMultiAlternatives
类,他是EmailMessage的子类,他有一个方法attach_alternative() ,可以让邮件中包括多种形式的内容
例如:
from django.core.mail import EmailMultiAlternatives
subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
text_content = 'This is an important message.'
html_content = '<p>This is an <strong>important</strong> message.</p>'
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
EmailMessage的类型修改
EmailMessage的类型默认情况下是"text/plain",可以通过修改subtype属性,使得类型变成"text/html"
例如:
msg = EmailMessage(subject, html_content, from_email, [to])
msg.content_subtype = "html" # Main content is now text/html
msg.send()

SMTPConnection 对象
SMTPConnection初始化需要四个参数:连接SMTP服务器所需要的host, port, username and password,如果某个缺省了,那么就从setting文件中读取默认值,另外send_messages用来发送一个邮件列表
例如:
connection = SMTPConnection()   # Use default settings for connection
messages = get_notification_email() #get_notification_email假设是用户定义的一个函数,用来获取所有想发出去的邮件
connection.send_messages(messages)
  评论这张
 
阅读(1247)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017