バッチファイルでメールを送る

  • 2010/03/14追記
    • SMailみたいな専用のコンソールアプリを使うほうが簡単です。どうしてもバッチファイル(&JScript)だけで実行したい時に以下の方法が使えます。


ひとつのバッチファイルで、Jscriptを動かす(msdnブログ)

http://blogs.msdn.com/joshpoley/archive/2008/01/15/running-jscript-in-a-cmd-file.aspx
http://d.hatena.ne.jp/p-nix/20080116

メールを送るバッチファイル(mail.bat)だと次のような感じ。

@set @tekitou=1 /*
@ECHO OFF
SET @tekitou=
CSCRIPT //E:JSCRIPT "%~dpnx0" %*
PAUSE
GOTO :eof
*/

if( WScript.Arguments.Count() != 3 ) {
  WScript.Echo("引数:送信先アドレス、タイトル、本文");
  WScript.Quit();
}
oMsg = new ActiveXObject("CDO.Message");
oMsg.From = "from@hoge.moge.jp";
oMsg.To = WScript.Arguments.Item(0);
oMsg.Subject = WScript.Arguments.Item(1);
oMsg.TextBody = WScript.Arguments.Item(2)  + "\r\n" + new Date();
oMsg.Send();
WScript.Echo("メールを送信しました");

mail.bat "to@foo.bar.jp" "テスト" "メール本文です"

上部がバッチコマンドで、下部がJScriptになります。バッチコマンドをJScriptのブロックコメントで囲み、バッチファイルから自分自身を引数にJScriptを呼び出すのがミソ(コマンドプロンプトJScriptの両方で有効な@set構文を使ってる)のようです。
@ITの記事VBScriptJScriptに移しただけですが問題なく動きました。VBScriptJScriptにコンバートするサイト(IEのみ動作)を使えば、比較的簡単に書けると思います。

http://slingfive.com/pages/code/scriptConverter/demo.html

ちょっとトリッキーですが、人に渡したり、タスクから呼び出したりするスクリプトだと、ひとつのファイルのほうが管理しやすいことも多いので、便利かもしれません。

(参考)バッチファイルでZIPファイルを作成する例

http://scripting.cocolog-nifty.com/blog/2007/04/zip_4d41.html