前言
最近在做公司运维平台中一个有关服务器权限申请的 app,其中在申请进度状态被改变时需要邮件形式提醒有关人员及时对记录进行近一步操作,以推进审核流程。
Django 中发送邮件
Django 中为我们提供了发送邮件的接口,在 django.core.mail
模块中,是对 Python smtplib 做了一层轻度的封装,使其更易使用在 Django 项目中。
send_mail
Django 中最简单的发送邮件的方法是使用 django.core.mail.send_mail
。
以下是4个必要参数:
subject:字符串,邮件主题
message:字符串,邮件内容
from_email:字符串,发件邮箱
recipient_list:字符串列表,收件人列表
可选参数(未包含全部)
fail_silently:一个布尔值(True 或 False),如果是 False,当 send_mail 失败会引发 smtplib.SMTPException
系列异常,所有可能出现的异常都属于 smtplib.SMTPException
的子类。
auth_user:用于 smtp 服务器验证,如果不给定此参数,则使用项目 setting.py 中设定的 EMAIL_HOST_USER
的值。
auth_password:用于 smtp 服务器验证,如果不给定此参数,则使用项目 setting.py 中设定的 EMAIL_HOST_PASSWORD
的值。
总结
有了上面的知识就可以使用 Django 来发送简单的邮件给用户了,当然还有很多高阶的功能,需要额外的参数,或者是其他方法去实现,会在日后需要的时候去深入的,最后放一段我项目中的 setting.py 设置,和在 view 中简单使用 send_mail
方法发送邮件的代码片段。
File:project/setting.py
# 邮件部分设置
EMAIL_HOST = 'smtp.163.com' # smtp 地址(这里需要注意,如果你和我一样使用 163 邮箱的话,默认 smtp 功能是关闭的,需要去设置开启,并生成一个一次性密码用于连接 smtp 服务)
EMAIL_HOST_USER = 'xxxxxxxxxx@163.com' # 用户
EMAIL_HOST_PASSWORD = 'xxxxxxxxxx' # 密码
EMAIL_SUBJECT_PREFIX = u'[美图权限申请系统]' # 为邮件Subject-line前缀,默认是'[django]'
EMAIL_USE_TLS = True # 与SMTP服务器通信时,是否启动TLS链接(安全链接)。默认是false
File:app/views.py
from django.core.mail import send_mail
from smtplib import SMTPException
......
......
try:
send_mail(
subject=u"xxxxxxxxxx", message=u"通知:xxxxxxxxxx",
from_email='xxxxxxxxxx@163.COM', recipient_list=[mail_adder, ], fail_silently=False,
)
except SMTPException, e:
# 此处记录日志
# 返回相关错误信息,例如:return HttpResponse(error)