|
K'zawaさん、みなさん、こんにちは。JR0LPLです。
ご指摘を受けた点を修正してみました。
while( dllfunc( "SelectRecvMail" ) ) {
……
}
に関しまして勘違いしていました。
「最初の新着メールをチェックしたら終わる」
と思い込んでいましたが、マクロヘルプをよく読んだら、新着メール数だけLoop
するんですね。
>>3番の後、Bアドレスで受信した自動返信に、BアドレスからAアドレスに「手動」
>>で返信すると「Prefereces: auto」が消えてしまい、Aアドレスから、再び自動
>>返信されてしまいました。
この件も検証してみましたが、やはり、「手動」返信をすると
「Precedence: auto」
がヘッダーから消えてしまうようです。秀丸メールで消えているのか、ISPの
サーバーが削除してしまっているのか、いますぐ判断出来ないのが残念な点です。
ISPにも問い合わせしてみます。
修正したマクロを示したいと思います。if文の羅列でド素人みたいな作りですが、
解りやすさを優先して書いてみました。
//----------------------------------------------------------
// メインルーチン
//----------------------------------------------------------
loaddll "tkinfo.dll";
$Dir = dllfuncstr("HomeDir")+"AutoReplay\\";
$ini = $Dir + "Addr.ini";
#n = dllfunc( "DoFilter", 3, 2, 0 ); // メールの振り分け
// 自動返信機能のON/OFF判定
$a = getinistr( $ini, "Flag" , "AutoReplay" );
if ( $a != "Y" ) endmacro;
while( dllfunc( "SelectRecvMail" ) ) {
// text/plain かつ iso-2022-jp の判定
// その他の日本語メール方式もあるが、しばらくは
// このメール形式のみマクロが反応するようにする
$s = dllfuncstr("CurrentHeader" , "Content-Type:");
$s = dllfuncstr("ToLower", $s); // $s を小文字に変換
if ( strstr( $s , "text/plain" ) < 0 ) goto next;
if ( strstr( $s , "iso-2022-jp" ) < 0 ) goto next;
// 自動返信して良いか判定
$s = dllfuncstr("CurrentHeader", "Precedence:");
$s = dllfuncstr("ToLower", $s);
if ($s == "bulk") goto next;
if ($s == "junk") goto next;
if ($s == "auto") goto next;
// 新着メッセージから From: の抽出
$From = dllfuncstr("CurrentHeader", "From");
// iniファイルで指定したメールアドレス=$From なら自動返信
$From = dllfuncstr( "SetEmailOnly" , $From );
#n = getininum( $ini, "Addr" , $From );
if (#n == 1) call SendMail;
// 対象となったメールを未読にする
#n = dllfunc( "SwitchUnread" );
next:
}
// 全般的な設定の標準アカウントにフォーカスを戻す
openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
$account = getregstr( "DefaultUser" );
closereg;
#n = dllfunc( "SelectFolder" , $account , "受信" );
endmacro;
//----------------------------------------------------------------
// サブルーチン(自動返信用)
//----------------------------------------------------------------
// 文面及び Subject をセットして送信
//----------------------------------------------------------------
SendMail:
// iniファイルから指定メッセージの抽出
$a = str ( getininum( $ini, "Flag", "ReplayMsg" ) );
$Subject = getinistr( $ini, "ReplyMsg" , $a );
// メッセージ作成
#n = dllfunc( "SetQuietMode" , 1 );
#n = dllfunc( "MakeReply" );
#n = dllfunc( "SetHeader" , "Subject" , $Subject);
#n = dllfunc("SetHeader", "Precedence", "auto" );
gofiletop; // 元々ある文章をALL削除
beginsel; // "
gofileend; // "
delete; // "
insertfile $Dir+$Subject+".txt"; // 文面挿入
#n = dllfunc("SendNow"); // Message Send
#n = dllfunc( "SetQuietMode" , 0 );
#handle = hidemaruhandle(0); //editor Window Close
#n = dllfunc("SetMainWndTop"); // "
closehidemaruforced #handle; // "
return;
|
|