美文网首页
树莓派 | 使用Node.js实现轮询公网IP并在变化时发送邮件

树莓派 | 使用Node.js实现轮询公网IP并在变化时发送邮件

作者: StAndres | 来源:发表于2020-01-11 16:26 被阅读0次

前言

在跟电信要到公网IP之后一个额外的问题随之而来:每次断网/重启路由器时我的公网IP都会发生变化。
为了解决这个问题在网上看了很多文章,发现大多数都在提用花生壳之类的内网穿透+域名解析,还有一些提到用DNSPod配合他们官方的api,可以方便+省钱。
但是我本着能白嫖就绝不花钱科研的精神发现了另一种思路,简单讲一下就是

轮询自己的公网IP,并在IP发生变化时给自己发一封邮件

实现流程

# 首先是装包,慎防有人像我一样菜到甚至没装过包
npm install email --save
npm install request --save

.js

var request = require('request')
var email   = require("emailjs")

var currentIp, originIp
var emailServ = email.server.connect({
    user: "test@163.com", // 邮箱账号
    password: "xxx", // 授权码,不是邮箱密码
    host: "smtp.163.com",
    ssl: true
})

function getIp () { // 查询公网IP
    request('http://ip.taobao.com/service/getIpInfo.php?ip=myip', (error, response, body) => {
    if (!error && response.statusCode == 200) {
        var ip = JSON.parse(body).data.ip;
        currentIp = ip
    }})
}

function sendEmail (ipaddr) { // 发送邮件方法
    emailServ.send({
        text: ipaddr,
        from: "xxx@163.com", // 寄件人
        to: "xxx@163.com", // 收件人
        subject: "IpAddress" // 主题
    }, (err, message) => {
        console.log(err || message)
    })
}

function mainInterval () {
    getIp()

    if (currentIp != originIp) {
        console.log(originIp, '->', currentIp)
        sendEmail(currentIp)
        originIp = currentIp
    }
}

setInterval(mainInterval, 600000) // 每10分钟轮询一次

#记得跑
node ip.js

就可以了。

Node刚入门,自认为上述代码还有很大的优化空间,恳请各位大佬指教!

相关文章

网友评论

      本文标题:树莓派 | 使用Node.js实现轮询公网IP并在变化时发送邮件

      本文链接:https://www.haomeiwen.com/subject/babvactx.html