用邮件及时获取变更的公网IP--------python爬虫+打包成exe文件

参考获取PC机公网IP并发送至邮箱

零、找一个发送邮件的邮箱

本文用QQ邮箱为发送邮箱,网易等邮箱一般也有这个功能,代码也是通用的。
第一步:在设置中找到账户,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击获取授权码
在这里插入图片描述在这里插入图片描述第二步:选择其他方式验证-手机接收验证码验证。
在这里插入图片描述第三步:得到授权码,复制到下面的代码里。

一、在pycharm里创建py文件,代码直接复制进去

# -*- coding: utf-8 -*-
from smtplib import SMTP_SSL
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Headerfrom urllib.request import urlopen
import threading
import datetime
import sys
# smtplib模块主要负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容)。
# email模块主要负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等。
# https://blog.csdn.net/Lin_Hv/article/details/110861669这个博客里有更多获取ip的地址链接,如https://api.ipify.org/。一旦http://ip.42.pl/raw失效就可以替换。
my_ip = urlopen('http://ip.42.pl/raw',timeout=5).read()
my_ip = my_ip.decode(encoding='utf-8')
sender_qq ='xxxx@qq.com'  # 发送邮箱
receiver = ['xxxx@qq.com','xxxx@qq.com']  # 接收邮箱
pwd = "xxxxx"   # 授权码
def send_email(my_ip,time=None):  host_server = 'smtp.qq.com'  #qq邮箱smtp服务器mail_title = 'Python自动发送的邮件' #邮件标题mail_content = "外网IP:{}\n发送时间:{}".format(my_ip,time) #邮件正文内容# 初始化一个邮件主体msg = MIMEMultipart()msg["Subject"] = Header(mail_title,'utf-8')msg["From"] = sender_qq# msg["To"] = Header("测试邮箱",'utf-8')msg['To'] = ";".join(receiver)# 邮件正文内容msg.attach(MIMEText(mail_content,'plain','utf-8'))smtp = SMTP_SSL(host_server) # ssl登录# login(user,password):# user:登录邮箱的用户名。# password:登录邮箱的密码,像笔者用的是网易邮箱,网易邮箱一般是网页版,需要用到客户端密码,需要在网页版的网易邮箱中设置授权码,该授权码即为客户端密码。smtp.login(sender_qq,pwd)# sendmail(from_addr,to_addrs,msg,...):# from_addr:邮件发送者地址# to_addrs:邮件接收者地址。字符串列表['接收地址1','接收地址2','接收地址3',...]或'接收地址'# msg:发送消息:邮件内容。一般是msg.as_string():as_string()是将msg(MIMEText对象或者MIMEMultipart对象)变为str。smtp.sendmail(sender_qq,receiver,msg.as_string())# quit():用于结束SMTP会话。smtp.quit()def ip_render():global my_ipglobal timertry:date_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')new_ip = urlopen('http://ip.42.pl/raw').read()new_ip = new_ip.decode(encoding='utf-8')if new_ip != my_ip:my_ip = new_ipsend_email(my_ip,time=date_time)print('IP changed:{} -time:{}'.format(my_ip,date_time))else:sys.stdout.write("\rIP doesn't change -time:{}".format(date_time))sys.stdout.flush()except Exception as e:print("Exception:{}".format(e))timer = threading.Timer(30, ip_render)  # 30s 获取IP一次timer.start()
if __name__ == "__main__":print('IP:{}'.format(my_ip))timer = threading.Timer(5, ip_render)  # 5s后开始循环线程timer.start()

二、PyInstaller把py文件打包成exe文件

1.下载PyInstaller介绍:在cmd里执行命令
pip install pyinstaller。
2.有了待打包脚本后,打开cmd,切换到该py脚本所在目录,执行打包命令pyinstaller find_ip.py
3.完毕后会发现该目录生成了build和dist文件夹,可执行exe文件find_ip.exe就在dist文件夹里,可以打包build和dist文件夹成一个压缩包。
三、使用方法
解压打包build和dist文件夹后的压缩包到需要获取ip地址的电脑上,在dist文件夹最里面有find_ip.exe文件,双击出现黑框后敲击回车,出现ip地址就是运行成功了。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HttpRunner的测试用例分层机制

测试用例分层介绍: 在接口自动化测试维护过程中,由于测试用例的增加和需求变更导致测试用例的调整,使自动化测试用例的维护非常麻烦,直接关系到自动化测试能否持续有效地在项目中开展。 概括来说,测试用例分层机制的核…

C语言基础知识(6):UDP网络编程

UDP 是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。 1.UDP协议的主要特点: &#xf…

c#调试程序一次启动两个工程(多个工程)

概述 c# - Visual Studio : debug multiple projects at the same time? 以在解决方案中设置多个启动项目(右键单击解决方案,转到设置启动项目,选择多个启动项目),并为包含在解决方案(无、开始、不调试就开始)。如果您将多个项目设置为开始…

Oracle文件自动“减肥”记

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

用通俗易懂的方式讲解:ChatGPT 开放的多模态的DALL-E 3功能,好玩到停不下来!

最近 ChatGPT 对 Plus 用户逐步开放一些多模态的功能,包括 (图像生成)、 GPT-4V(图像识别)等,很多网友乐此不疲地对这些新功能进行试用, 目前已经解锁了不少有趣的玩法,我将这些好玩…

C#,入门教程(09)——运算符的基础知识

上一篇: C#,入门教程(08)——基本数据类型及使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123906998 一、算术运算符号 算术运算符号包括:四则运算 加 , 减-, 乘*, 除/与取模%。 // 加法,运算 int va 1 …

CSS3 边框border、outline、box-shadow

1 border 语法:border: width style color 2 outline 语法:outline: width style color 2.1 outline-offet MDN解释:用于设置outline与一个元素边缘或边框之间的间隙 即:设置outline相对border外边缘的偏移,可以为…

C#不会循环响应的Action设计与实现

目录 一、简述二、测试代码三、测试的输出四、核心代码五、其它 一、简述 特点: 不光是能防止直接的死循环调用;还能防止间接的死循环调用;还支持对不同参数判定,不同参数的调用可以不当循环调用; 消息事件系统中必…

SpringBoot 调用mybatis报错:Invalid bound statement (not found):

启动SpringBoot报错:Invalid bound statement (not found): 参考此文排查 命中了第6条 记录一手坑爹的Invalid bound statement (not found)(六个方面) mapper文件路径配置错误 订正以后 问题解决

如何在Ubuntu安装SVN服务并结合cpolar实现公网TCP地址远程访问本地服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

冒泡排序数据结构实验报告

实验目的: 理解冒泡排序算法的原理和基本思路。熟悉冒泡排序在实际应用中的场景和优化方法。 实验内容(实验题目与说明) 编写一个双向冒泡排序算法,即在排序过程中以交替的正、反两个方向进行遍历。若第一趟把关键字最大的记录…

物联网产品中,终端、网关、协议、PaaS、SaaS之间的关系

在互联网产品中,经常提到的终端、网关、协议、PaaS、SaaS之间,到底有什么关系呢? 一、基本概念 在百度/其他地方搜集的信息中,对于终端、网关、协议、PaaS、SaaS的解释各有不同,整理如下: 终端&#xff1…

SSR 服务器端渲染:提升用户体验的新趋势(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Generator - JavaScript的异步颠覆者

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ 目录 ✨ 前言 什么是Generator 生成器函数的执行流程控制 异步编程应用 ✨ 结语 ✨ 前言 Java…

Gitee

Gitee码云 0. 笔记说明1. Gitee概述2. Gitee和GitHub3. 创建Git远程仓库4. 分享已有项目到Gitee5. 文件恢复和合并6. 文件push或pull冲突7. 添加项目成员 0. 笔记说明 该笔记以IDEA 2023专业版进行操作需提前注册好个人gitee账号安装好IDEA的相关gitee插件或者安装Git Bash软件…

【机器学习】循环神经网络(二)-LSTM示例(keras)国际航空乘客问题的回归问题...

使用 Keras 在 Python 中使用 LSTM 循环神经网络进行时间序列预测 国际航空乘客问题的回归问题 这个文件是一个CSV格式的数据集,它包含了从1949年1月到1960年12月的每个月的国际航空乘客的总数(以千为单位)。第一行是列名,分别是&…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK修改图像像素格式Mono8或者Mono10(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK修改图像像素格式Mono8或者Mono10(C) Baumer工业相机Baumer工业相机的图像像素格式的技术背景CameraExplorer如何查看修改相机图像像素格式信息在NEOAPI SDK里通过函数修改图像像素格式修改像素格式测试演示…

二刷Laravel 教程(用户注册)总结Ⅳ

一、显示用户信息 1)resource Route::resource(users, UsersController); 相当于下面这7个路由 我们先用 Artisan 命令查看目前应用的路由: php artisan route:list 2) compact 方法 //我们将用户对象 $user 通过 compact 方法转化为一个关联…

thinkphp6入门(15)-- 模型动态构建查询条件

背景 我使用thinkphp6的模型写数据库查询,有多个where条件,但是不确定是否需要添加某个where条件,怎么才能动态得生成查询 链式查询 在ThinkPHP 6中,可以使用链式查询方法来动态地构建查询条件。可以根据参数的值来决定是否添加…

使用 Maven 的 dependencyManagement 管理项目依赖项

使用 Maven 的 dependencyManagement 管理项目依赖项 介绍 在开发 Java 项目时&#xff0c;管理和协调依赖项的版本号是一项重要而繁琐的任务。 而 Maven 提供了 <dependencyManagement> 元素&#xff0c;用于定义项目中所有依赖项的版本。它允许您指定项目中每个依赖…