文章目录
源码里面的密码和账号设置需要自己去添加 :做完这一节的源码
一、给特定人发邮件
1.开启邮件服务
想要发送邮件,首先要有邮箱,开启相关服务,然后邮箱会给你 一个授权码。
这里演示网易163和QQ邮箱
1.1 网易邮箱设置
1.2 QQ邮箱设置
2.系统配置和发送邮件的操作
2.1 将QQ邮箱 配置为邮件服务
EMAIL_HOST = 'smtp.qq.com'
EMAIL_PORT=25
EMAIL_HOST_USER = '*********'
EMAIL_HOST_PASSWORD='*******'
DEFAULT_FROM_EMAIL = '**********@qq.com'
2.2 发送邮件的函数解析
源代码:
def send_mail(subject, message, from_email, recipient_list,
fail_silently=False, auth_user=None, auth_password=None,
connection=None, html_message=None):
"""
Easy wrapper for sending a single message to a recipient list. All members
of the recipient list will see the other recipients in the 'To' field.
If from_email is None, use the DEFAULT_FROM_EMAIL setting.
If auth_user is None, use the EMAIL_HOST_USER setting.
If auth_password is None, use the EMAIL_HOST_PASSWORD setting.
Note: The API for this method is frozen. New code wanting to extend the
functionality should use the EmailMessage class directly.
"""
参数subject, message,from_email和recipient_list是必须的。
subject: 一个字符串,代表标题
message: 一个字符串,代表内容
from_email:字符串,发送方。如果为None,Django 将使用DEFAULT_FROM_EMAIL设置的值
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: 任选,发送邮件使用的真实。若未指定,则默认的真实细节。查询邮件参数文档获取更多。
html_message: 如果提供了html_message,邮件可能会成为multipart/alternative的实例,message的内容类型是text/plain,并且html_message的内容类型是text/html。
返回值会是成功发送的信息的唯一(数量只能是0或1,因为同时发送一条消息)。
主要的三个参数就是subject message 和recipient_list
2.3 在登录视图中实现邮件发送
#发邮箱
loginsource=request.META['REMOTE_ADDR']
message=loginsource+user1.name
subject='登录信息'
from django.core.mail import send_mail
send_mail(subject=subject,message=message,recipient_list=['自己的邮箱'],from_email=None)
配置好之后把上面的代码加到加到登录视图函数里的成功登录跳转之前。
这里实现一个监听用户登录,就会发送邮件给你的功能,甚至还可以划定用户列表来选人。
效果:
二、日志响应自动发邮件
前几篇的日志配置时候发现官方文档里有个发邮件的配置在这里实现。
1.系统配置
先是一个过滤器
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
再是一个这样的handlers
'mail_admins': {
'level': 'ERROR',
'formatter': 'verbose',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['require_debug_false'],
'include_html': True,
}
后面是一个这样的loggers
'seriouslog': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True
},
修改和增加这几个设置,加入管理员邮箱
DEFAULT_FROM_EMAIL = SERVER_EMAIL = '1015833437@qq.com' # 设置发件人
# 管理员邮箱
ADMINS = (
(r'amo', r'catkingfirst@163.com'),
)
# 非空链接,发生404错误,发送通知MANAGERS
SEND_BROKEN_LINK_EMAILS = True
MANAGERS = ADMINS
2.调用日志记录,引发邮件发送
还是去中间件里面触发这是个未登录验证,此时根据过滤器设置,需要将DEBUG设为FALSE
logging.getLogger('seriouslog').error(msg)
下面第一个是include html为 false的,第二个是为true的