2021-08-04-DJ-027 django中发送邮件,QQ邮箱设置,日志记录器向管理员发送邮件


源码里面的密码和账号设置需要自己去添加 :做完这一节的源码

一、给特定人发邮件

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的
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Amoor123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值