Python使用logging模块的SMTPHandler发送告警日志邮件

1. Phthon 的SMTPHandler

http://www.madmalls.com/blog/post/logging-for-python/#13-handler 中介绍了 Python 3 内置模块 logging 中的常用 Handler,如果我们既想将 logging.INFO 级别的日志保存到访问日志文件中,又想在应用出错时,将 logging.ERROR 及以上级别的日志通过邮件发送给管理员的话,就需要使用 logging.handlers.SMTPHandler()

2. 163邮箱非SSL(端口号25)

创建 test_smtphandler.py

import logging
from logging.handlers import SMTPHandler
import sys


def main():
    # 1. 创建 logger 实例
    logger = logging.getLogger('test-smtphandler')
    # 2. 设置 logger 实例的日志级别,默认是 logging.WARNING
    logger.setLevel(logging.INFO)
    # 3. 创建 Handler
    # 注意 163 邮箱要求 fromaddr 和你发送邮件的邮箱(即你的邮箱账号)要一致
    mail_handler = SMTPHandler(
        mailhost=('smtp.163.com', 25),
        fromaddr='xxx@163.com',
        toaddrs='接收报警邮件的地址',
        subject='[madmalls.com] 服务器出错了',
        credentials=('xxx@163.com', '客户端授权密码'))
    # 4. 单独设置 mail_handler 的日志级别为 ERROR
    mail_handler.setLevel(logging.ERROR)
    # 5. 将 Handler 添加到 logger 中
    logger.addHandler(mail_handler)

    # 6. 应用的业务代码(故意出错)
    try:
        x = 1 / 0
    except Exception:
        logger.error('[计算出错了] x = 1 / 0', exc_info=sys.exc_info())


if __name__ == '__main__':
    main()

2.1 开启 SMTP 服务

使用 stmp.163.com 的邮箱来发送邮件,需要开通 SMTP 功能。访问 https://mail.163.com,登录你的账号之后,依次单击 设置POP3/SMTP/IMAP,开启 SMTP 服务,如下图所示:

然后,你在 Python 3 代码中想使用 163 邮箱来发送邮件的话,认证的用户名就是你的邮箱地址,但是密码不是你的登录密码,而是 客户端授权密码,所以需要你先开启并生成这个密码,如下图所示:

163 邮箱的 SMTP 服务器地址为 smtp.163.com,其中 非 SSL 协议端口号25SSL 协议端口号465/994

2.2 本地测试

运行此脚本:

$ python test_smtphandler.py

然后你应该就会收到一封包含应用程序出错信息的邮件:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值