功能流程
- 呼叫
ipseeker.cn 取得公網 IP。
- 使用
CDO.Message 透過 SMTP 發送郵件 (含 IP 內容)。
- 排程執行 (工作排程器) 實現 IP 變動通知。
完整程式碼
Function GetIPAddress()
Dim Flag, Source
Set GetIPObj = WScript.GetObject("https://ipseeker.cn/")
Flag = 0
For i = 1 To 10
If GetIPObj.readyState = "complete" Then
Flag = 1
Exit For
End If
WScript.Sleep 500
Next
If Flag = 0 Then
GetIPAddress = "Get IP Address Time Out ..."
Else
Source = GetIPObj.documentElement.innerText
Set Rep = New RegExp
Rep.Pattern = "(\d+)\.(\d+)\.(\d+)\.(\d+)"
For Each result In Rep.Execute(Source)
GetIPAddress = result
Exit For
Next
End If
End Function
Function MailTo(MailAddress)
Dim NameSpace, MailObject
NameSpace = "https://schemas.microsoft.com/cdo/configuration/"
Set MailObject = CreateObject("CDO.Message")
MailObject.From = "your@21cn.com"
MailObject.To = MailAddress
MailObject.Subject = "IP Address Information"
MailObject.Textbody = Now & ": " & GetIPAddress()
MailObject.Configuration.Fields.Item(NameSpace & "sendusing") = 2
MailObject.Configuration.Fields.Item(NameSpace & "smtpserver") = "smtp.21cn.com"
MailObject.Configuration.Fields.Item(NameSpace & "smtpserverport") = 25
MailObject.Configuration.Fields.Item(NameSpace & "smtpauthenticate") = 1
MailObject.Configuration.Fields.Item(NameSpace & "sendusername") = "your_account"
MailObject.Configuration.Fields.Item(NameSpace & "sendpassword") = "your_password"
MailObject.Configuration.Fields.Update
MailObject.Send
End Function
MailTo "target@qq.com"
CDO.Configuration 關鍵欄位對照
| 欄位 | 值 | 說明 |
| sendusing | 2 | SMTP 網路傳送 |
| smtpserver | smtp.xxx.com | SMTP 伺服器位址 |
| smtpserverport | 25/465/587 | 連接埠 (25/STARTTLS, 465/SSL, 587/Submission) |
| smtpauthenticate | 1 | 基本驗證 (0=匿名, 1=基本, 2=NTLM) |
| sendusername | 帳號 | SMTP 登入帳號 |
| sendpassword | 密碼 | SMTP 登入密碼 |
部署建議
- 將腳本存為
ip_notify.vbs。
- 建立 Windows 工作排程器任務:觸發條件「每日/每小時」,動作
cscript.exe ip_notify.vbs。
- 帳號密碼請勿硬編碼,建議讀取加密設定檔或環境變數。
- 支援 SSL (465) 需設定
smtpusessl = true (CDO 1.2.1+)。
來源
enun.net 原文