简洁Python程序运行异常邮件提醒

栏目: Python · 发布时间: 5年前

内容简介:文章目录有一天,你眼疾手快写好了一个Python程序来处理大批量的任务,然后信心满满地点击“Run”按钮,想着任务量巨大,可能需要计算机处理一段时间,于是带着还未消散的成就感,约上了三五好友把酒言欢……举杯邀明月,对饮成三人,把酒言欢后,全都没干成。

文章目录

一、前言

有一天,你眼疾手快写好了一个 Python 程序来处理大批量的任务,然后信心满满地点击“Run”按钮,想着任务量巨大,可能需要计算机处理一段时间,于是带着还未消散的成就感,约上了三五好友把酒言欢……

举杯邀明月,对饮成三人,把酒言欢后,全都没干成。

由于一个未知的异常,程序在运行不久后就挂掉了…………掉了…………了,在你把酒言欢的这段时间里,你以为计算机在埋头苦干,实则在闭目养神。

这时的你追悔莫及,恨不得给自己两耳巴子,但是真打自己是不可能的了,只能继续完善代码。除了对异常进行了处理,还加上了提醒功能,以便程序第一时间出状况的时候你能够知道。

二、邮件提醒

对程序加入提醒功能可以有很多种方式,比如短信、QQ消息、微信消息、邮件、飞信等等。

最及时的,当然是短信了,但是发送短信可能需要购买短信服务,对于个人而言并不是很划算。

QQ、微信、飞信等聊天软件也很不错,但是对接这些软件稍显麻烦,所以最后我们选择经典的电子邮件作为程序异常的提醒方式。

在Python中,已经有内置库支持电子邮件的发送和接收。其中:

  • 接收邮件使用poplib和imaplib这两个库;
  • 发送邮件使用smtplib这个库。

这3个库的具体使用方法在此就不做详细介绍,Python的官方文档里面已经有说明。

下面我们直接来编写这个邮件提醒函数。

三、代码实践

首先,我们引入所需的库:

import smtplib
from email.mime.text import MIMEText
import datetime
import traceback
 

其中:

  • smtplib:用于发送电子邮件;
  • MIMEText:用于处理电子邮件的正文内容;
  • datetime:用于获取时间;
  • traceback:用于获取异常的信息;

接着,创建一个名为send_email的函数,接收3个参数name,ex和ex_detail。

def send_email(name,ex,ex_detail):
    '''
    :param name:程序名
    :param ex: 异常名
    :param ex_detail: 异常详情
    :return:
    '''
 

在函数内定义一个变量now_time,赋值为当前的时间:

now_time = datetime.datetime.strftime(datetime.datetime.today(), "%Y-%m-%d %H:%M:%S:%f")  # 当前时间
 

在函数内定义电子邮箱相关变量:

msg_from = 'xxx@xxxxxx.com'  # 发件人邮箱
passwd = '666666'  # 发件人邮箱密码
msg_to = '你自己的邮箱'  # 收件人邮箱
s = smtplib.SMTP_SSL("smtp.exmail.qq.com", 465)  # 发件箱邮件服务器及端口号
 

继续在函数内定义邮件内容相关的变量,为了让邮件的正文更加地美观,我们使用HTML格式的文本作为内容:

subject = "【程序异常提醒】{name}-{date}".format(name=name, date=now_time)  #标题
content = '''<div class="emailcontent" style="width:100%;max-width:720px;text-align:left;margin:0 auto;padding-top:80px;padding-bottom:20px">
    <div class="emailtitle">
        <h1 style="color:#fff;background:#51a0e3;line-height:70px;font-size:24px;font-weight:400;padding-left:40px;margin:0">程序运行异常通知</h1>
        <div class="emailtext" style="background:#fff;padding:20px 32px 20px">
            <p style="color:#6e6e6e;font-size:13px;line-height:24px">程序:<span style="color:red;">【{name}】</span>运行过程中出现异常错误,下面是具体的异常信息,请及时核查处理!</p>
            <table cellpadding="0" cellspacing="0" border="0" style="width:100%;border-top:1px solid #eee;border-left:1px solid #eee;color:#6e6e6e;font-size:16px;font-weight:normal">
                <thead>
                    <tr>
                        <th colspan="2" style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;background:#f8f8f8">爬虫异常详细信息</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center;width:100px">异常简述</td>
                        <td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">{ex}</td>
                    </tr>
                    <tr>
                        <td style="padding:10px 0;border-right:1px solid #eee;border-bottom:1px solid #eee;text-align:center">异常详情</td>
                        <td style="padding:10px 20px 10px 30px;border-right:1px solid #eee;border-bottom:1px solid #eee;line-height:30px">{ex_detail}</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
</div>
    '''.format(ex=ex, ex_detail=ex_detail, name=name)  # 正文
msg = MIMEText(content, _subtype='html', _charset='utf-8')
msg['Subject'] = subject
msg['From'] = '程序小助手<xxx@xxxxxxxxxx.com>'
msg['To'] = msg_to
 

最后登录邮箱并发送邮件:

try:
    s.login(msg_from, passwd)
    s.sendmail(msg_from, msg_to, msg.as_string())
    print("发送成功")
except smtplib.SMTPException as e:
    print("发送失败")
finally:
    s.quit()
 

这样,我们的Python程序异常邮件提醒小功能就实现了。

为了看看效果,我们来试验一下:

if __name__ == '__main__':
    # 示例
    try:
        a = int("哈哈哈")
    except Exception as e:
        print(traceback.format_exc())
        send_email(name='州的先生程序测试', ex=repr(e), ex_detail=traceback.format_exc())
 

很快的,就收到了新邮件的提醒了:

简洁Python程序运行异常邮件提醒

打开邮件看看,异常时间、名称、异常详情一应俱全:

简洁Python程序运行异常邮件提醒

怎么样是不是很简单,欢迎留言讨论~


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

如何求解问题

如何求解问题

Zbigniew Michalewicz、David B.Fogel / 曹宏庆 / 中国水利水电出版社 / 2003-2-1 / 35.00元

《如何求解问题:现代启发式方法》通过一系列贯穿于章节间的有趣难题,《如何求解问题:现代启发式方法》深入浅出地阐述了如何利用计算机来求解问题的一些现代启发式方法。全书包括两部分,共分15章。一起来看看 《如何求解问题》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具