Python 脚本项目实例(一):获取外网 IP 地址并定时发送 QQ 邮件
用 Python 实现自动获取本机外网 IP 并定时发送到指定邮箱:requests 抓取 IP、smtplib+QQ 邮箱授权码发信、sched 定时循环,适合家庭服务器/远程设备的 IP 变动监控与告警。
Python 脚本项目实例(一):获取外网 IP 地址并定时发送 QQ 邮件
一、项目背景
家庭服务器、远程工控设备等场景经常遇到一个问题:设备接入的是动态公网 IP,一旦 IP 变化,用户就无法通过远程桌面、SSH 等方式访问设备。传统做法是"打开网页 → 百度 → 查 IP",繁琐且不及时。
本实例用 Python 实现自动化:脚本自动获取本机外网 IP 地址,并通过 QQ 邮箱定时发送到指定邮箱,让你随时掌握设备的 IP 变动情况。
二、技术方案:技术选型
| 模块 | 用途 |
|---|---|
| requests | 请求 IP 查询网页,抓取公网 IP |
| smtplib + email.mime.text | 通过 QQ 邮箱 SMTP 发送邮件 |
| re | 正则表达式从网页中提取 IP 地址 |
| sched + time | 定时调度,周期性执行任务 |
编程环境:Python 3.6。
三、系统架构:核心代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
import requests
import time, os, sched
import re
from email.mime.text import MIMEText
from email.utils import formataddr
# 发件人邮箱账号 / 授权码 / 收件人邮箱
my_sender = '**********@qq.com'
my_pass = 'mmmmmmaaaaaaaaaa'
my_user = '**********@qq.com'
# 获取外网IP地址
def get_out_ip():
print("读取IP地址=>")
url = r'http://www.net.cn/static/customercare/yourip.asp'
readT = requests.get(url)
Readtxt = readT.text
pattern = re.compile('<h2>[0-9]+.[0-9]+.[0-9]+.[0-9]+</h2>')
showv = pattern.search(Readtxt)
print(showv)
return Readtxt
# 发送邮件
def mail():
ret = True
try:
ipmsg = "当前IP地址是:" + get_out_ip()
msg = MIMEText(ipmsg, 'plain', 'utf-8')
msg['From'] = formataddr(["FromXGRobots", my_sender])
msg['To'] = formataddr(["XGmail", 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
schedule = sched.scheduler(time.time, time.sleep)
# 主循环:发送邮件并定时
while True:
ret = mail()
if ret:
print("邮件发送成功")
else:
print("邮件发送失败")
print("show time after 600 seconds:")
timming_exe("echo %time%", 600)
四、实施过程:关键配置说明
4.1 三个邮箱参数
my_sender = '发件人邮箱(你的QQ邮箱)'
my_user = '收件人邮箱(目标接收邮箱)'
my_pass = '发件人邮箱的授权码'
- my_sender:发件邮箱,即你的 QQ 邮箱;
- my_user:收件邮箱,即目标发送的邮箱(可与发件相同,实现自收自测);
- my_pass:授权码,不是 QQ 密码!需要在邮箱中"设置 → 账号设置"中生成 SMTP 授权码。
4.2 授权码获取步骤
QQ邮箱 → 设置 → 账号 → 开启POP3/SMTP服务 → 生成授权码
开启 SMTP 服务后,QQ 邮箱会生成一段授权码(如 16 位字母),填入 my_pass 即可。
4.3 运行与验证
程序点击运行 → 控制台输出"邮件发送成功"
邮箱查看 → 邮件正常发送并接收到,主题为"家庭服务器IP报告信息"
五、应用价值
- IP 变动监控:定期上报公网 IP,动态 IP 环境下远程访问不再"失联";
- 免人工值守:全自动定时发送,适合无人值守的服务器、NAS、工控设备;
- 低成本高复用:仅依赖 Python 标准库 + requests,代码量小,可轻松改造成"IP 变动才发送""多收件人群发"等变体;
- 扩展思路:将邮件内容替换为设备告警信息(温度、离线状态等),即可演变为通用告警通知脚本。
六、SEO关键词
Python脚本、外网IP、QQ邮箱、自动发邮件、smtplib、requests、sched定时、IP监控、家庭服务器、Python实例
推荐阅读
更多工业 AI、智能制造与技术实践文章
TRIO-Basic 从入门到精通(三):轴参数的含义
本文系统讲解 TRIO 运动控制器伺服轴参数表中各参数的含义与用途,涵盖单位当量 UNITS/AXIS_UNITS、增益参数、速度加减速、软件/硬件限位、原点信号、位置偏差报警、点动与色标捕捉等,并说明 UNITS 在 FRAME 坐标系开启前后的区别,是配置伺服轴与调试运动表现的必备基础。
手把手做ROS2机器人系统开发(一):开发环境搭建
机器人操作系统(ROS2)是当前机器人应用开发的主流平台,凭借分布式节点架构、丰富的生态组件和良好的实时性支持,被广泛用于工业机器人、移动机器人和智能装备的研发。本系列教程将带领大家从零开始,完成一套完整的ROS2机器人系统开发:以驱动常用工业机器人(SCARA)实现动态抓取目标为最终目标,既支持实
TRIO-Basic 从入门到精通(十七):设置连接TRIO运动控制器并输入激活码
本文介绍TRIO运动控制器的首次连接与功能激活方法:设置电脑IP与控制器同网段,通过Motion Profect V4以工具模式连接,在Enable Features界面输入商务提供的激活码,开通轴数、机器人、IEC等功能,并用EX命令验证激活结果,适用于控制器启用前的初始配置。
滴灌带打孔粘接程度智能评估:基于机器视觉、多特征融合与时序预测的在线检测方案
针对滴灌带滴头粘接质量人工抽检的痛点,本文介绍基于工业相机+VisionPro定位+OpenCV多特征融合(Sobel/Laplacian/EdgeSharpness)+Kalman/EMA时序平滑+2秒统计窗口的在线检测方案,输出0~100质量指数并支持趋势预警,可对接PLC/HMI/MES,实现从单张图片判定到全过程粘接质量持续评价的升级。
Qt 6.10 开发 Modbus TCP 通讯:从客户端、服务器到工业设备调度
本文以 Qt 6.10 + C++ + Qt SerialBus 为基础,介绍 Modbus TCP 客户端与服务端的实现方法,并结合 BagBreakerGatewayApp 拆袋机 AGV 调度项目,讲解 QModbusTcpClient/QModbusTcpServer 的使用、寄存器地址偏移问题、状态机调度、断线重连与分层架构设计,帮助开发者在工业网关、MES、设备联网场景中快速落地。
Linux系统篇(十九)——文件(三):底层存储入门:从机房硬件到 CHS/LBA 磁盘寻址全解析
从机房硬件层级讲到磁盘物理结构,再到 CHS 三维寻址与 LBA 线性寻址的转换原理,完整打通底层存储认知。
