Django 1.6
虽然python提供了smtplib库,来完成email的发送功能,但是django对其进行了封装,使得发送邮件的接口变得更简单,更方便,django的封装位于django.core.mail
快速入门
from django.core.mail import send_mail send_mail( 'Subject here', 'Here is the message.', '[email protected]', ['[email protected]'], fail_silently=False)
subject here:邮件的标题
here is message:邮件的内容,只能是字符串,简单文本,要是想发送HTMl,多媒体。文件,后面会有专门的介绍
from@examplel:发送邮件者
[[email protected]]:接收邮件者,这是个列表,说明可以同时发送给多个人
需要注意的是,发送邮件时需要的 EMAIL_HOST , EMAIL_PORT ,EMAIL_HOST_USER , EMAIL_HOST_PASSWORD 需要settings设置,用来验证SMTP服务器的。
还有一个需要注意的事,发送邮件时,内容的编码。DEFAULT_CHARSET 由这个决定,也是在settings设置
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: 就是接收邮件者的列表
fail_silently=False:这个是用来显示发送邮件时,默认是False,如果是False,则发送失败时候,会抛出smtplib.SMTPException异常
auth_user=None:用来验证SMTP server的用户名,没有设置就用settings里的
auth_password=None:用来验证SMTP server的密码,没有设置就用settings里的
connection=None:这个用来设置具体发送邮件时时使用的连接后端,一般没人会去动。默认肯定使用django的发送邮件的后端了,详见 Email backends
send_mass_mail(datatuple, fail_silently=False, auth_user=None, auth_password=None,connection=None)
这个用来处理大规模的邮件
datatuple 这是一个元祖,((),()) 一个()像下面这样
(subject, message, from_email, recipient_list) 参数就不说了吧,上面都讲了
看下面的例子更好理解:
message1 = ('Subject here', 'Here is the message', '[email protected]', ['[email protected]', '[email protected]']) message2 = ('Another Subject', 'Here is another message', '[email protected]', ['[email protected]']) send_mass_mail((message1, message2), fail_silently=False)
这两个最大的不同就在于,
send_mail()发一个邮件,连接一次SMTP,意思就是一次发一次邮件找一次服务器去验证下连接
send_mass_mail() 从上面的例子中可以看出,好几封邮件一次性就发出去了,效率更高。
mail_admins(subject, message, fail_silently=False, connection=None, html_message=None)
这是一个快速发给管理员邮件的方法
有一个问题是,管理员的邮件是什么,在哪那?
就在settings里
ADMINS = (
# ('Your Name', '[email protected]')
)
subject:
这里和上面说的差不多,但有点区别,就是发给管理员的邮件主题时,会带个默认的前缀[django],你也可以再settings里设置 EMAIL_SUBJECT_PREFIX,设置一个你自己的前缀。
这个函数里似乎没有from_mail,其实是有的,在settings设置 SERVER_EMAI= “”
最重要的是这个html_message:可以为这两个值,text/plain, text/html 。看出来了吧,决定你发送邮件内容是什么文本,你要是发个页面带连接,图片的,html一些东西的,就得设置它了。
mail_managers(subject, message, fail_silently=False, connection=None,html_message=None)
其实和mail_admins()差不多,就是发给谁的问题,这个是针对一个连接失效时,指定一个人并发送邮件,需要做两件事,一是在settings里设置MANAGERS =(# ('Your Name', '[email protected]')),另一个是启用中间件BrokenLinkEmailsMiddleware
下面是官方文档上的两个例子,好好体会:
send_mail( 'Subject', 'Message.', '[email protected]', ['[email protected]', '[email protected]'] )
datatuple = ( ('Subject', 'Message.', '[email protected]', ['[email protected]']), ('Subject', 'Message.', '[email protected]', ['[email protected]']), ) send_mass_mail(datatuple)
以上这些都是只能发送简单text类型的邮件,
除了那个mail_admins()和mail_managers()
如果想发送html类型,以及文件,附件类型的需要class EmailMessage,请看第二部分。