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 协议端口号 为 25
, SSL 协议端口号 为 465/994
2.2 本地测试
运行此脚本:
$ python test_smtphandler.py
然后你应该就会收到一封包含应用程序出错信息的邮件: