Python 自动获取外网IP 并发送到邮箱

该代码实现了一个功能,定期检查IP地址并对比上一次获取的IP,如果发现变化,则通过邮件通知。使用requests库从网页抓取IP,BeautifulSoup解析HTML,再通过SMTP发送邮件。邮件标题提示IP更新,程序每小时检查一次。
摘要由CSDN通过智能技术生成
  1. 定义get_ip的函数
def get_ip():
    try:
        url = 'https://2021.ip138.com/'
        kv = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}
        par = {"prd": "resoukuang"}
        html = requests.get(url=url, headers=kv, params=par).text
        soup = BeautifulSoup(html, 'html.parser')
        title = soup.title.string
        return title
    except:
        return ""

通过requests请求 https://2021.ip138.com/ , 因为它的标题刚好就返回了你的IP 那么我们直接bs4去取到title的值 返回即可
2. 定义发送邮件的函数

def mail(content):
    # 发送者的邮箱地址
    sender = '发送者的邮箱地址'
    # 接收者的邮箱地址
    receivers = ['接收者的邮箱地址1', '接收者的邮箱地址2']  
    # content是你要发送的内容, 我这里是调用函数穿过来的参数content
    message = MIMEText(content, _subtype='plain', _charset='utf-8')
    # 邮件的发送者
    message['From'] = Header(sender, 'utf-8')
    # 邮件的接收者
    message['To'] = Header('coolwoow', 'utf-8')
    # 邮件的标题
    message['Subject'] = Header('主人, 你家里面的IP又变了:', 'utf-8') 
    smtper = SMTP('smtp.qq.com')
    # QQ邮箱smtp的授权码
    smtper.login(sender, 'QQ邮箱smtp的授权码')  
    smtper.sendmail(sender, receivers, message.as_string())
  1. 完整代码, 建立相应的线程去一直循环就可以了, 我使用的时候是定义的1小时检测一次IP是否发生变化
import requests
import threading
from bs4 import BeautifulSoup
from smtplib import SMTP
from email.header import Header
from email.mime.text import MIMEText
import time

def get_ip():
    try:
        url = 'https://2021.ip138.com/'
        kv = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36'}
        par = {"prd": "resoukuang"}
        html = requests.get(url=url, headers=kv, params=par).text
        soup = BeautifulSoup(html, 'html.parser')
        title = soup.title.string
        return title
    except:
        return ""
def mail(content):
    # 发送者的邮箱地址
    sender = '发送者的邮箱地址'
    # 接收者的邮箱地址
    receivers = ['接收者的邮箱地址1', '接收者的邮箱地址2']  
    # content是你要发送的内容, 我这里是调用函数穿过来的参数content
    message = MIMEText(content, _subtype='plain', _charset='utf-8')
    # 邮件的发送者
    message['From'] = Header(sender, 'utf-8')
    # 邮件的接收者
    message['To'] = Header('coolwoow', 'utf-8')
    # 邮件的标题
    message['Subject'] = Header('主人, 你家里面的IP又变了', 'utf-8') 
    smtper = SMTP('smtp.qq.com')
    # QQ邮箱smtp的授权码
    smtper.login(sender, 'QQ邮箱smtp的授权码')  
    smtper.sendmail(sender, receivers, message.as_string())
# 这里我用一个txt存放上次获取到的值得, 你可以事先把上面get_ip()的结果存在里面
f = open('ip.txt', 'r', encoding='utf-8')
old_ip = f.read()
f.close()
def main():
    global old_ip
    while True:
        if get_ip() != "":
            if old_ip != get_ip():
                old_ip = get_ip()
                mail(old_ip)
                with open('ip.txt', 'w') as f:
                    f.write(old_ip)
        time.sleep(120)

thread_run = threading.Thread(target=main)
thread_run.start()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值