2013年6月27日木曜日

【VBS】メール送信

障害通知だったり、業務要求でメールを送信したいケースってありますよね。

メール送信機能が付いているジョブ実行管理ツールは多くあり、最も簡単な手段だと思います。
しかし、ツールによっては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