障害通知だったり、業務要求でメールを送信したいケースってありますよね。
メール送信機能が付いているジョブ実行管理ツールは多くあり、最も簡単な手段だと思います。
しかし、ツールによってはSMTPポート(25)で固定されていて、
かつ実際のメールサーバーはセキュリティ上の理由でデフォルトポートを使っていない場合があります。
また、有償でかつ保守契約できる製品でないと導入できなかったり、
高価すぎて予算と合わなかったりと言った理由で、
ジョブ実行管理ツールを入れたくない場合もあります。
そんな状況になったので、とりあえず作ったのがVBSでメール送信するバッチです。
以下、簡単ですが纏めておきます。
本文がほぼ定型ですが…。
■構成
SendMail.bat … VBSを実行するバッチ
↓
SendMail.vbs … メール送信するVBS
■送信メール仕様
・件名は固定
・本文もほぼ固定
・エラー内容をテキストファイル出力してあり、メール添付する
・メールのFrom、Toは同じ
■ソース
[SendMail.bat]
wscript mailSendTool.vbs
または
Cscript mailSendTool.vbs
[SendMail.vbs]
strAccount = "acount" 'アカウント
strPassword = "password" 'アカウントパスワード
strDomain = "mailServer.com" 'ドメイン
strServer = strDomain 'メールサーバー(ドメインを設定)
strMailAddr = strAccount & "@" & strDomain 'メールアドレス(アカウント@ドメイン)
intSmtpPort = 25 'ポート:左記はSMTPポート
'メールタイトル
strMailTitle = "ABCシステムエラー"
'メール本文
strMailBody1 = "ABCシステムでエラーが発生しました。"
strMailBody2 = ""
strMailBody3 = "【参考情報】"
strMailBody4 = " ○日時 :" & Now '※Nowは日付時刻
strMailBody5 = " ○マシン名:" & WScript.CreateObject("WScript.Network").ComputerName '※コンピュータ名
'設定情報を反映
Set oMsg = CreateObject("CDO.Message") 'CDOオブジェクト
oMsg.From = strMailAddr 'Fromアドレス
oMsg.To = strMailAddr 'Toアドレス
'oMsg.Cc = strMailAddr 'Ccアドレス
oMsg.Subject = strMailTitle 'メールタイトル
'メール本文
oMsg.TextBody = strMailBody1 & vbCrLf & _
strMailBody2 & vbCrLf & _
strMailBody3 & vbCrLf & _
strMailBody4 & vbCrLf & _
strMailBody5
'添付ファイル
oMsg.AddAttachment("file://C:\ErrorMail\添付ファイル.txt")
'SMTP認証
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = strAccount
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = strPassword
'メールサーバー設定
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strServer
oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = intSmtpPort 'SMTPポート
oMsg.Configuration.Fields.Update
'メール送信
oMsg.Send