foldrr's weblog

旧ブログ http://d.hatena.ne.jp/foldrr/

Windows XMailCFG へコマンド エイリアスを設定する

環境

  • Windows XP Professional SP3
  • XMail 1.26
  • XMailCFG 2.36a

問題

メール受信時にプログラムを実行したい。

解決方法

コマンド定義のプロセス優先度は 0 が標準値となる。
タイムアウトを 0 にしてしまうとコマンド起動時にはテンポラリ ファイルが削除されてしまう。
タイムアウトは 1 以上に設定すること。
コマンドでは @@FILE でテンポラリ ファイルのパスを参照できる。

@@FILE のパスに注意

Windows の場合 @@FILE の先頭4文字には無効な文字が入っている。

空メール受信による起動スクリプトを作成する場合

前述の @@FILE のパスに注意しながら、ラッパー スクリプトで @@FILE の内容を読み込み、標準入力へ流し込んで、主処理のスクリプトを起動する。

ラッパー スクリプトのサンプル

XMail から「php @@FILE ラッパスクリプト名 実行スクリプト名」で呼び出すことを前提にしたラッパー スクリプトのサンプル。

<?php
define('LOG_PATH', 'c:\xmail.log');

$log = fopen(LOG_PATH, "a");

$data_path = substr($argv[1], 4);
$prog_path = join(' ', array_slice($argv, 2));
fputs($log, "$argv[0]: $prog_path: $data_path\n");

$stdout = '';
exec("$prog_path < $data_path", $stdout, $r);
fputs($log, "$argv[0]: r = $r\n");

fclose($log);
?>