PS:
- 由于使用了vbs脚本,故本文中的功能仅限在windows环境下使用
- 本代码利用curl监测获取所需的网址状态,故需要配置curl环境
本文代码
立即下载代码解析
本代码总共分为3个模块,monitor.bat、reset.bat、mail2.vbs
1.监听服务monitor.bat
本文件为判断和处理网址是否连通的代码
请将第二行的set url=后面的网址换为你想要监听的网址
@echo off
set url=http://www.baidu.com
set requestTime=%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%
set SourceFile=%~dp0\logs\log.log
echo %url%
for /f %%z in ('curl -so /dev/null -w %%{http_code} %url%') do (
set result=%%z
echo %%z
)
if %result% NEQ 200 (
::echo %date%%time% %url% 无法打开 错误代码 %result% >>C:log%date:~0,4%%date:~5,2%%date:~8,2%ERROR.log
rem cd logs
echo %date%%time% %url% 接口请求失败 即将发送邮件 %SourceFile%
rem 先将时间信息和文件信息写入日志
rem 显判断是否存在
if not exist %SourceFile% (
rem 如果不存在写入文件信息
echo %url% %requestTime% Request Failed ! >> %SourceFile%
Wscript mail2.vbs
)
) else (
::echo %date%%time% %url% 网页可以打开 代码 %result% >>C:log%date:~0,4%%date:~5,2%%date:~8,2%SUCCESS.log
echo %date%%time% %url% 网页可以打开 删除日志文件
cd logs
del /f /s /q *.log
)
2.重启服务reset.bat
@echo off
set SourceFile=%~dp0\logs\log.log
if exist %SourceFile% (
del /f /s /q %SourceFile%
)
3.邮件发送脚本mail2.vbs
Send_Mail("@qq.com","mima","@163.com","","1234","Some code from vbs","")中的参数分别代表
- 发送邮件的邮箱(有搭建smtp服务器的邮箱)
- 发送邮件的邮箱密码(对于国内的smtp邮箱可使用一次性密码保证安全性)
- 要发送的第一个邮箱
- 要发送的第二个邮箱(可不填)
- 发送标题(邮件标题)
- 预设的发送内容(现在代码已改为优先使用文件中的内容,若文件不存在则使用本内容,后面会详细说明)
- 附件(未测试)
function Send_mail(You_Account,You_Password,Send_Email,Send_Email2,Send_Topic,Send_Body,Send_Attachment)
'code by NetPatch
'VBS发送邮件参数说明
'You_Account:你的邮件帐号
'You_Password:你的邮件密码
'Send_Email:
'主要邮件地址
'Send_Email2: 备用邮件地址
'Send_Topic:
'邮件主题
'Send_Body:
'邮件内容
'Send_Attachment:邮件附件
You_ID=Split(You_Account, "@", -1, vbTextCompare)
'帐号和服务器分离
MS_Space = "http://schemas.microsoft.com/cdo/configuration/"
'这个是必须要的,不过可以放心的事,不会通过微软发送邮件
Set Email = CreateObject("CDO.Message")
Email.From = You_Account
'这个一定要和发送邮件的帐号一样
Email.To = Send_Email
'主要邮件地址
x="logs\log.log" '发信内容写在logs\log.log中
Set fso=CreateObject("Scripting.FileSystemObject")
'先判断文件是否存在
If fso.fileExists(x) Then
Set myfile=fso.OpenTextFile(x,1,Ture)
'如果存在就是用传入参数的值
Send_Body=myfile.readall
myfile.Close
End If
If Send_Email2 <> "" Then
Email.CC = Send_Email2
'备用邮件地址
End If
Email.Subject = Send_Topic
'邮件主题
Email.Textbody = Send_Body
'邮件内容
If Send_Attachment <> "" Then
Email.AddAttachment Send_Attachment
'邮件附件
End If
With Email.Configuration.Fields
.Item(MS_Space&"sendusing") = 2
'发信端口
.Item(MS_Space&"smtpserver") = "smtp."&You_ID(1)
'SMTP服务器地址
.Item(MS_Space&"smtpserverport") = 25
'SMTP服务器端口
.Item(MS_Space&"smtpauthenticate") = 1
'cdobasec
.Item(MS_Space&"sendusername") = You_ID(0)
'你的邮件帐号
.Item(MS_Space&"sendpassword") = You_Password
'你的邮件密码
.Update
End With
Email.Send
'发送邮件
Set Email=Nothing
'关闭组件
Send_Mail=True
'如果没有任何错误信息,则表示发送成功,否则发送失败
If Err Then
Err.Clear
Send_Mail=False
End If
End Function
'以下是利用上面的函数发送带附件的邮件例子
If Send_Mail("@qq.com","mima","@163.com","","1234","Some code from vbs","")=True Then
'Wscript.Echo "发送成功"
Else
'Wscript.Echo "发送失败"
End If
说明
1.流程说明
- 运行monitor.bat,判断指定网址是否返回200正常代码
- 如果返回非200代码,会先判断上一次执行结果产生的log文件
- 如果log文件不存在则生成一个log文件,否则判断为已发送,为避免频繁发送被定为垃圾邮箱,直接跳过
- 若生成log文件,则向其中写入访问的地址和请求时间(可改为自己想要的内容,在monitor.bat中)
- 执行发送邮件方法
- 若下次执行monitor.bat时网址可访问,将会删除log下的文件
- reset.bat文件可将log下的文件删除,打到可以继续发送的目的
2.建议设定
- 利用windows计划任务,设定monitor.bat每5分钟执行一次
- 设定reset.bat每1小时执行一次
文章评论