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


2013年5月31日金曜日

【流通小売知識】日配

一言でいうと毎日配送される商品。
発注が止まるとかなり焦る。

以下、Wikipediaより抜粋
日配食品(にっぱいしょくひん)とは、主に流通業界で使われる用語で、ある種の食品を総称する言葉である。デイリーフーズデイリー食品デイリー日配品日配等とも呼ばれる。 近い意味を持つ語として「チルドグロサリー」(略してチルド)がある。
具体的にどのような食品を指すのかは業者によって異なるが、牛乳乳製品、畜産加工品、チルド飲料豆腐コンニャク納豆漬物練物、生麺類、生菓子など、
  • メーカーによって生産され
  • 冷蔵を要し
  • あまり日持ちのしない
食品のことを指すことが多い。 青果、鮮魚などの生鮮食品は含まれない。
ただし、冷蔵を要しないものの、賞味期限が数日間しか設定されていないパンや、畜産物であるなどが含まれる場合も多く、モヤシのような(工場で生産される)青果や、日持ちのする冷凍食品が含まれる場合もある。
また、ハムソーセージなどの畜産加工食品を除外し、生鮮食品として扱う場合もある。
特に牛乳や乳製品、パンといったものを「洋日配」、豆腐や納豆、練物といったものを「和日配」と呼ぶ。

ウィンドウ非表示でプログラムを実行する

ウィンドウを表示しないでバッチやプログラムを実行する方法について。

◆背景

  1. 誰かが操作する可能性のあるマシンでバッチやプログラムを実行する場合、ウィンドウを表示させたくない。
  2. 最小化はSTARTコマンドのMINオプションで簡単にできるが、最小化してても誤操作でウィンドウを閉じるケースがある。
  3. システムをよく知らない人からすると開いた覚えのないウィンドウがウィルスみたいで怖いので、やっぱりウィンドウを閉じる。

  こんなことがあるので、できればウィンドウは最小化すらせず非表示にしたいもの。


◆方法
  VBSを使う。

  【イメージ】

    [VBS実行用バッチファイル]
     ↓
    [プログラム非表示実行用VBS]
     ↓
    [動かしたいプログラム]

  【ソース例】

    [VBS実行用バッチファイル]   …C:\実行用.BAT
    [プログラム非表示実行用VBS] …C:\実行用.VBS
    [動かしたいプログラム]      …C:\work\対象.EXE

[VBS実行用バッチファイル]

      Cscript C:\実行用.VBS C:\work\対象.EXE


    [プログラム非表示実行用VBS]

      CreateObject("WScript.Shell").Run WScript.Arguments(0) , 0