Python监控公网IP变化发QQ邮件通知
本次分享的代码的主要作用是:获取本机(主机可以在内网)的公网IP,并将与上一次记录在文件中的公网IP做比较,如果两个IP不相同,则将新的公网IP记录在文件中,并发送一封包含新的公网IP的电子邮件到指定的QQ邮箱。
注意!代码的调试环境是Windows10、Python 3.10,不同的环境、版本可能会运行失败。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| import smtplib from email.mime.text import MIMEText from email.utils import formataddr import requests
my_sender = 'c******g@qq.com' my_pass = 'z******g' my_user = 'c******g@qq.com'
def mail(): ret = True try: msg = MIMEText(str(MyNewPublicIP), 'plain', 'utf-8') msg['From'] = formataddr(["告警邮箱", my_sender]) msg['To'] = formataddr(["告警邮箱", my_user]) msg['Subject'] = '******公网IP变更通知' server = smtplib.SMTP_SSL("smtp.qq.com", 465) server.login(my_sender, my_pass) server.sendmail(my_sender, [my_user, ], msg.as_string()) server.quit() except Exception: ret = False return ret
MyNewPublicIP = requests.get('http://api.ipify.org').text
with open('D:/MyPublicIP.txt', 'r') as f: MyOldPublicIP = f.read().strip()
if MyNewPublicIP != MyOldPublicIP: with open('D:/MyPublicIP.txt', 'w') as f: f.write(MyNewPublicIP) print('IP有变化。准备发邮件给QQ邮箱。') ret = mail() if ret: print("邮件发送成功。") else: print("邮件发送失败。")
else: print('IP无变化。退出程序。') exit()
|
可以把这段代码保存成脚本文件,用Windows的任务计划来定时执行,如下图所示。

最后,我把QQ邮箱绑定到我的手机微信中,这样就可以很方便地获取到公网IP变更的信息了,如下图所示。
