AS400の異常をメールで通知する方法を探していたが、外部のSMTPサーバーを利用してメールを送信する事はできない。SMTPサーバーを立てても日本語は扱えない。SMTPサーバーを立ててもユーザーが無いと送信できない
などの諸事情と自身のAS400に対するスキルの無さを踏まえた上で下記の方法を取った。
AS400自身からメールを送信することは諦めて、RUNRMTCMDを使う
こうしてしまえばあとはWindowsの領域に無理矢理引きずり出せる。VBScriptは起動時にcscript AS400Mail.vbs
としなくてはならないので、呼び出し用のbatファイルを組み合わせました。メールのSubjectとBodyをvbs内で設定するようにしたのは、batファイルから渡せなかった為の妥協です(汗)。
AS400Mail.vbs
Set a = CreateObject("CDO.Message")
a.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
a.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.xxx.xxx"
a.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
a.Configuration.Fields.Update
a.From = "xxxx@exsample.com"
a.To = "test@exsample.com"
a.Subject = "[AS400]エラー通知"
a.TextBody = "AS400にてエラーしました。" & vbCrLf
'// 送信パターン指定があるか?
If WScript.Arguments.Named.Exists("I") Then
iSendMode = 0
If WScript.Arguments.Named("I") <> "" Then
iSendMode = CInt(WScript.Arguments.Named("I"))
End If
SELECT CASE iSendMode
CASE "1"
' 01 ファイルロックモニタ用
a.Subject = "[AS400]ファイルロック発生通知"
a.TextBody = "AS400にてファイルロック発生通知が発生したようです。" & vbCrLf
CASE ELSE
a.Subject = "[AS400]エラー通知"
a.TextBody = "AS400にてエラーしました。" & vbCrLf
END SELECT
End If
'// 時刻を末尾に追加
a.TextBody = a.TextBody & Now
'// メール送信
a.Send
AS400MAIL.BAT
cscript D:cmdsAs400Mail.vbs /I:%1
Comments