python监控网站运行异常并发送邮件的方法

  • Post category:Python

Python监控网站运行异常并发送邮件的方法,通常分为以下几个步骤:

1. 安装依赖库

在Python中实现邮件发送需要用到SMTP库,可以使用pip安装,命令如下:

pip install smtplib

2. 监控网站运行状态

在Python中,监控网站运行状态可以使用requests库实现,通过向目标服务器发送HTTP请求,判断返回结果是否正常来判断网站是否异常。

以下是一个示例代码:

import requests

def check_website(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        return True
    except:
        return False

在上述代码中,我们向目标URL发送了GET请求,如果返回的状态码是400以上,则会抛出异常。

3. 发送邮件

当我们判断到网站出现异常时,需要及时通过邮件的方式通知相关人员,可以使用Python内置库smtplib实现邮件发送。

以下是一个示例代码:

import smtplib
from email.mime.text import MIMEText

def send_email(receiver, subject, content):
    mail_host = 'smtp.xxx.com' # 邮箱服务器地址,根据实际情况填写
    mail_port = 465 # 邮箱服务器端口号,根据实际情况填写
    mail_user = 'your-email@qq.com' # 发送邮件的邮箱账号
    mail_pass = 'your-email-password' # 发送邮件的邮箱密码

    sender = mail_user
    message = MIMEText(content,'html','utf-8')
    message['From'] = sender
    message['To'] = receiver
    message['Subject'] = subject

    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
        smtpObj.login(mail_user,mail_pass)
        smtpObj.sendmail(sender, receiver, message.as_string())
        smtpObj.quit()
        print('邮件发送成功')
    except smtplib.SMTPException as e:
        print('邮件发送失败,错误信息:', e)

在上述代码中,我们设置了邮件发送服务器的地址、端口号、登录信息等,然后通过MIMEText来创建邮件正文,再通过SMTP_SSL连接服务器并发送邮件。

示例

以下是一个完整的代码示例,通过监控www.baidu.com的状态来检测网站是否异常并发送邮件通知。

import requests
import smtplib
from email.mime.text import MIMEText

def check_website(url):
    try:
        r = requests.get(url)
        r.raise_for_status()
        return True
    except:
        return False

def send_email(receiver, subject, content):
    mail_host = 'smtp.xxx.com' # 邮箱服务器地址,根据实际情况填写
    mail_port = 465 # 邮箱服务器端口号,根据实际情况填写
    mail_user = 'your-email@qq.com' # 发送邮件的邮箱账号
    mail_pass = 'your-email-password' # 发送邮件的邮箱密码

    sender = mail_user
    message = MIMEText(content,'html','utf-8')
    message['From'] = sender
    message['To'] = receiver
    message['Subject'] = subject

    try:
        smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
        smtpObj.login(mail_user,mail_pass)
        smtpObj.sendmail(sender, receiver, message.as_string())
        smtpObj.quit()
        print('邮件发送成功')
    except smtplib.SMTPException as e:
        print('邮件发送失败,错误信息:', e)

if __name__ == '__main__':
    url = 'https://www.baidu.com'
    if check_website(url):
        print('网站正常')
    else:
        print('网站异常')
        receiver = 'receiver-email@qq.com' # 接收邮件的邮箱
        subject = '网站异常' # 邮件主题
        content = '网站{}异常,请尽快处理'.format(url) # 邮件内容
        send_email(receiver, subject, content)

在上述示例中,我们首先根据URL检查网站状态,若异常则发送邮件通知相关人员。