<返回更多

编写检测本机ipv6地址并发邮件的python程序

2022-10-03  今日头条  迷之折腾
加入收藏

上期有提到自己用Python/ target=_blank class=infotextkey>Python编写了检测本机ipv6的小程序,本期就详细讲解一下实现过程,大家也可以在此基础上修改,达到自己的目的

第一步导入需要用到的库

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

第二步,设置邮箱账号信息,这里用一个txt文件保存,名称定为“email_info.txt”,方便后期修改信息。username和send_mail都是发件箱的邮箱地址,receive_mail也可以设置成发件箱地址或者其他邮箱地址。mail_host和port和发件箱服务商有关,我这里直接以QQ为例,其他邮箱大家自己查询研究一下。mail_subject是指邮箱的标题,大家可以自己编写。最关键的password并不是指QQ邮箱密码,而是指POP3/SMTP服务的授权码,大家可以在QQ邮箱中设置上开通。

 

 

 

 

相关python代码如下

# 账号设置
f = open('email_info.txt', encoding='utf-8')
f_text = f.readlines()
f_list = []
for j in f_text:
    f_list.Append(j.split('=')[1].strip())
username = f_list[0]  # qq邮箱用户名
password = f_list[1]  # qq邮箱授权码
send_mail = f_list[2]  # 发送地址,可以同上用户名
receive_mail = f_list[3]  # 接受邮件的地址,可以用发件箱,自发自收
mail_host = f_list[4]  # QQ邮箱的mail host
port = int(f_list[5])  # 设置端口号
mail_subject = str(f_list[6])  # 设置邮件主题
f.close()

第三步,生成一个存储每次查询到的ip地址的文件,名称为“run_log.txt”,下面为示例图

 

 

相关python代码如下,主要是通过http://ipw.cn这个网站进行查询,下面代码直接请求的是网站的json地址

# 查找上次的ip地址,作为是否要发邮件的判断条件
f1 = open('run_log.txt')
former_ips = f1.readlines()
former_ip = former_ips[-1]
f1.close()

ip = ''
for i in range(3):
    # 获取IP地址
    url = "https://6.ipw.cn/api/ip/myip?json"
    response = requests.get(url, timeout=20)
    if response.status_code == 200:
        ip = json.loads(response.content)['IP']
        break

第四步,设置发送邮件,相关代码如下

if (ip != '') and (ip != former_ip):
    # 保存记录
    f2 = open('run_log.txt', mode='a+')
    f2.write('n'+ip)
    f2.close()

    # 内容设置
    mes = MIMEText(ip, 'plain', 'utf-8')
    mes['Subject'] = mail_subject
    mes['From'] = send_mail
    mes['To'] = receive_mail

    # 发送
    server = smtplib.SMTP(mail_host, port)
    server.ehlo() 
    server.starttls()
    server.login(username, password)
    server.sendmail(send_mail, receive_mail, mes.as_string())
    server.quit()

第五步,通过python的pyinstaller将代码打包成一个文件,pycharm可以在Terminal中输入“pyinstaller -F -w ip_reporter.py”进行打包,成功后,可以在名为“dist”文件夹中找到exe文件,如下图。将“email_info.txt”和“run_log.txt”放在ip_reporter.exe同文件夹下,就可以双击运行ip_reporter了。

 

 

最后一步,设置任务计划程序,新建txt文件,输入以下代码。最后将文件的后缀txt修改成bat,把文件放在第五步三个文件同文件目录下。并将这个文件夹放置在C盘任意目录下。以管理员权限运行bat文件,最后可以看到任务计划程序中就可以看到创建的任务计划,这个计划开机自启,并每5分钟会启动一次,每次启动会运行程序,如果发现ip与上次的ip发生了变化,就会自动发送邮件。手机接收的效果如图。

@ECHO OFF
REM https://msdn.microsoft.com/zh-cn/library/windows/desktop/bb736357(v=vs.85).aspx

SET RUNCMD="cmd /c 'cd %~dp0 & ip_reporter.exe'"

SET RUN_USER=%USERNAME%
WHOAMI /GROUPS | FIND "12288" > NUL && SET RUN_USER="SYSTEM"

ECHO Create task run as %RUN_USER%
schtasks /Create /SC MINUTE /MO 5 /TR %RUNCMD% /TN "IP_Reporter" /F /RU "%RUN_USER%"

PAUSE

 

 

本期内容结束,本次方法只限用于ipv6,ipv4地址需修改查询ipv4地址的网址,大家可以自行研究。欢迎留言、点赞、收藏、关注。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>