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检查网站状态,若异常则发送邮件通知相关人员。