麟の随笔

  • 游戏
  • 影视
  • Tech
  1. 首页
  2. 科技
  3. 正文

利用bat与vbs监控网址能否正常访问并发送邮件

2021年6月6日 1564点热度 1人点赞 0条评论

PS:

  1. 由于使用了vbs脚本,故本文中的功能仅限在windows环境下使用
  2. 本代码利用curl监测获取所需的网址状态,故需要配置curl环境

本文代码

立即下载

代码解析

本代码总共分为3个模块,monitor.bat、reset.bat、mail2.vbs

1.监听服务monitor.bat

本文件为判断和处理网址是否连通的代码

请将第二行的set url=后面的网址换为你想要监听的网址

 

monitor.bat

@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

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","")中的参数分别代表

  1. 发送邮件的邮箱(有搭建smtp服务器的邮箱)
  2. 发送邮件的邮箱密码(对于国内的smtp邮箱可使用一次性密码保证安全性)
  3. 要发送的第一个邮箱
  4. 要发送的第二个邮箱(可不填)
  5. 发送标题(邮件标题)
  6. 预设的发送内容(现在代码已改为优先使用文件中的内容,若文件不存在则使用本内容,后面会详细说明)
  7. 附件(未测试)

 

mail2.vbs

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.流程说明

  1. 运行monitor.bat,判断指定网址是否返回200正常代码
  2. 如果返回非200代码,会先判断上一次执行结果产生的log文件
  3. 如果log文件不存在则生成一个log文件,否则判断为已发送,为避免频繁发送被定为垃圾邮箱,直接跳过
  4. 若生成log文件,则向其中写入访问的地址和请求时间(可改为自己想要的内容,在monitor.bat中)
  5. 执行发送邮件方法
  6. 若下次执行monitor.bat时网址可访问,将会删除log下的文件
  7. reset.bat文件可将log下的文件删除,打到可以继续发送的目的

2.建议设定

  • 利用windows计划任务,设定monitor.bat每5分钟执行一次
  • 设定reset.bat每1小时执行一次

 

 

标签: 暂无
最后更新:2021年6月6日

晓虎

必须有人浴血奋战,世上才有自由可言!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

文章目录
  • 代码解析
    • 1.监听服务monitor.bat
    • 2.重启服务reset.bat
    • 3.邮件发送脚本mail2.vbs
  • 说明
    • 1.流程说明
    • 2.建议设定

COPYRIGHT © 2024 kirinz.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

闽ICP备19013981号