アカウント越しのメール振り分け補助マクNo.00654
龍朋 さん 05/11/10 00:09
 
便利に使わせていただいております。
アカウントA
  +SpamA
アカウントB
  +SpamB
アカウントC
  +SpamC
アカウントD
  +SpamD
簡単に説明しますと、SpamAからSpamCまでをSpamDに振り分けております。
・・・
ところが、いつの頃からか(秀丸メールとなった頃?)、「受信が一段落した時」に
処理がなされないことが頻繁におきるようになりました。
そこで、「受信が一段落した時」の登録を削除し、メール本体に登録して様子をみま
すと、すんなり振り分けできる時もあれば、SpamAの最初の1件のみの時もあり、Spa
mBだけが振り分けられない時もありと、症状がバラバラになっております。
エラー表示はありません。

何かご教示いただけますでしょうか?

[ ]
RE:00654 アカウント越しのメール振り分けNo.00655
capa さん 05/11/10 10:40
 
capa です。

SpamAからSpamCまでのフォルダの表示範囲が「全体」でないとまずいか
もしれません。一度ご確認下さい。これが原因だった場合はマクロの不
備ですので修正版をアップロードしたいと思います。

[ ]
RE:00655 アカウント越しのメール振り分けNo.00656
龍朋 さん 05/11/10 13:28
 

[ X-Mailer:HidemaruMail 4.58 (WinNT,500) ]

お世話になっております。
龍朋 です。

******** capa <54480xxxxxxxxxxxxxx@maruo.co.jp> さん wrote
******** [ turukame.5:00655| RE 00654 アカウント越しのメール振り分け補助マク
ロ ]
******** [ Thu, 10 Nov 2005 10:40:55 +0900 ]

>SpamAからSpamCまでのフォルダの表示範囲が「全体」でないとまずいか
>もしれません。一度ご確認下さい。これが原因だった場合はマクロの不
>備ですので修正版をアップロードしたいと思います。

メール一覧の上部にある範囲のことでしょうか?
全フォルダとも「全体」になっていおります。

あと、手動マクロで何度かSpamDに振り分けたあと、ドラッグ&ド
ロップでSpamAやSpamBに戻してから、再度手動させても発生しませ
ん(発生しにくいだけ?)。

また、フォルダが折りたたまれていても、開いていても発生します。
SpamAの任意の1件を選択した状態であっても、なくても発生します。
受信直後を充分に避けた後でも発生するときがあります。

ちょっと、再現手順がはっきりしなくて、申し訳有りません。

--
龍朋(Ryuhou)  

[ ]
RE:00656 アカウント越しのメール振り分けNo.00657
capa さん 05/11/10 15:17
 
capa です。

うまく動作するケースもあるとのことで、設定等の問題でもないし…
ということで、原因切り分けのために末尾のマクロにて動作確認しても
らってもよろしいでしょうか。

マクロ名はtest.macとでもしてマクロ用のフォルダに登録し、手動実行
や受信時の自動起動マクロとしてテストしてみてください(iniファイル
は現在のものを使用しますので新たに設定する必要はありません)。

このマクロに変更してエラーメッセージが表示されるようになった場合
はその内容を教えてください。このマクロでもエラーメッセージが表示
されず、なおかつ振り分けられないケースがあるようでしたら…、ごめ
んなさい、ちょっとお手上げです。

あまり参考にならないかもしれませんが、念のためOSの種類や秀丸メー
ルのバージョンも教えてください。あとはGDS連携を使っているとかホー
ムディレクトリがリモートマシン上にあるとかキー入力をさらうような
特殊な常駐ソフトを組み込んでいるとか…、何かちょっと普通とは違う
かなぁと思われるような環境があれば何かヒントになるかもしれません。

お手数かけてすみませんがよろしくお願いします。


---BypassFolder.mac ver.1.02b
// アカウント越しのメール振り分け補助マクロ ver.1.02b
//                                 2005/11/10  presented by capa

$McrJName = "アカウント越しのメール振り分け補助マクロ";
$McrName = "BypassFolder";

loaddll "tkinfo.dll";
if(!result) {
  call McrMsg "tkinfo.dll のロードに失敗しました";
  endmacro;
}

if(!dllfunc("IsHidemaruMailMain")){
  call McrMsg "秀丸メール本体から実行してください";
  endmacro;
}

// 移動設定をINIファイルから取得
$path = dllfuncstr("HomeDir") + $McrName + ".ini";
if(!existfile($path)){
  call McrMsg "設定ファイル " + $path + " が見つかりません\n" +
    "処理を中止します";
  endmacro;
}

#i = -1;
#endflag = 0;
while(!#endflag){
  #i = #i + 1;
  #nullcnt = 0;
  call GetBFIni #i;
  if(#nullcnt > 0) #endflag = 1;
}
// 取得に失敗した場合の処理
if(#nullcnt < 4) goto INIERR;
if(#nullcnt == 4 && #i == 0) goto INIERR;

// 処理メイン
#CondNum = #i;
#iflag = 0;
#i = 0;
while(#i < #CondNum){
  // GetFolderMailCount実行前にフォルダ有無のチェック
  $fname = dllfuncstr("HomeDir") + "\\" + $FA[#i] + "\\" + $FF[#i];
  if(!existfile($fname)) goto FERR;
  // メールがあれば処理開始
  #mcnt = dllfunc("GetFolderMailCount",$FA[#i],$FF[#i]);
  if(#mcnt>0){
    // マクロ実行前の環境退避
    if(#iflag==0) call InitEnv;
    if(!dllfunc("SelectFolder",$FA[#i],$FF[#i])) goto FERR;
    // 表示範囲を全体に変更
    #va = dllfunc("ViewArea");
    #n = dllfunc("SetViewArea",0);
    // すべてのメール選択
    #n = sendmessage( hidemaruhandle(0), 0x0111, 40008, 0);
    // メールの移動
    if(#mcnt==dllfunc("SelectedMailCount")){
      if(!dllfunc("Move",$TA[#i],$TF[#i])) goto TERR;
    }else{
      call SelectErr;
    }
    // 表示範囲を元に戻す
    #n = dllfunc("SetViewArea",#va);
  }
  #i = #i + 1;
}

END:
  if(#iflag>0) call RecvEnv;
  endmacro;


// エラー処理部
INIERR:
  $keystr = "\n[MoveSet" + str(#i) + "]";
  if ($FA[#i] == "") $keystr = $keystr + "\n・FromAccount";
  if ($FF[#i] == "") $keystr = $keystr + "\n・FromFolder";
  if ($TA[#i] == "") $keystr = $keystr + "\n・ToAccount";
  if ($TF[#i] == "") $keystr = $keystr + "\n・ToFolder";
  call McrMsg "設定ファイルからの以下のキーの取得に失敗しました" + $keystr +
    "\n処理を中止します";
  goto END;
FERR:
  #idx = #i + 1;
  call McrMsg "設定ファイル(" + $McrName + ")の\n" +
    "FromAccount" + str(#idx) + "、FromFolder" + str(#idx) + "で指示された\n" +
    "以下のフォルダが見つかりません\n" +
    "アカウント名=" + $FA[#i] + "\nフォルダ名=" + $FF[#i] ;
  goto END;
TERR:
  #idx = #i + 1;
  call McrMsg "設定ファイル(" + $McrName + ")の\n" +
    "ToAccount" + str(#idx) + "、ToFolder" + str(#idx) + "で指示された\n" +
    "以下のフォルダが見つかりません\n" +
    "アカウント名=" + $TA[#i] + "\nフォルダ名=" + $TF[#i] ;
  goto END;


// 各種サブルーチン
GetBFIni:  // INIファイルからの情報抽出
  $$secstr = "MoveSet" + str(##1);
  $FA[##1] = getinistr($path, $$secstr, "FromAccount");
  if($FA[##1]=="") #nullcnt = #nullcnt + 1;
  $FF[##1] = getinistr($path, $$secstr, "FromFolder");
  if($FF[##1]=="") #nullcnt = #nullcnt + 1;
  $TA[##1] = getinistr($path, $$secstr, "ToAccount");
  if($TA[##1]=="") #nullcnt = #nullcnt + 1;
  $TF[##1] = getinistr($path, $$secstr, "ToFolder");
  if($TF[##1]=="") #nullcnt = #nullcnt + 1;
  return;

InitEnv:  // マクロ実行前の環境退避
  // アカウントごしのメールの移動でも確認画面を出さない設定にする
  openreg "CURRENTUSER","Software\\Hidemaruo\\TuruKame\\Config";
  if(result){
    #Confirm = getregnum("Confirm");
    writeregnum "Confirm",#Confirm & 0xFFFFFFDF;
  }
  else{
    message "レジストリのオープンに失敗しました";
    endmacro;
  }
  #n = dllfunc("EnvChanged");

  // 現在情報の退避
  $ca = dllfuncstr("CurrentAccount");
  $cf = dllfuncstr("CurrentFolder");
  #itv = dllfunc("IsThreadView");
  #n = dllfunc("DisableDraw",1);
  #n = dllfunc("SetThreadView",0);
  #mi = dllfunc("MailIndex");
  #iflag = 1;
  return;

RecvEnv:  // マクロ実行前環境の復元
  #n = dllfunc("SelectFolder",$ca,$cf);
  #n = dllfunc("SetMailIndex",#mi);
  #n = dllfunc("SetThreadView",#itv);
  #n = dllfunc("EnableDraw");
  writeregnum "Confirm",#Confirm;
  #n = dllfunc("EnvChanged");
  closereg;
  return;

SelectErr:
  call McrMsg "以下のフォルダの「すべて選択」コマンドが失敗しました\n" +
    "アカウント名=" + $FA[#i] + "\nフォルダ名=" + $FF[#i] ;
  return;

McrMsg:    // マクロ用メッセージ出力関数
  message $McrJName + "(" + $McrName + ".mac)\n" + $$1;
  return;

[ ]
RE:00657 アカウント越しのメール振り分けNo.00658
龍朋 さん 05/11/10 16:32
 

[ X-Mailer:HidemaruMail 4.58 (WinNT,500) ]

お世話になっております。
龍朋 です。

******** capa <54480xxxxxxxxxxxxxx@maruo.co.jp> さん wrote
******** [ turukame.5:00657| RE 00656 アカウント越しのメール振り分け補助マク
ロ ]
******** [ Thu, 10 Nov 2005 15:17:57 +0900 ]

>マクロ名はtest.macとでもしてマクロ用のフォルダに登録し、手動実行
>や受信時の自動起動マクロとしてテストしてみてください(iniファイル
>は現在のものを使用しますので新たに設定する必要はありません)。
>
>このマクロに変更してエラーメッセージが表示されるようになった場合
>はその内容を教えてください。このマクロでもエラーメッセージが表示
>されず、なおかつ振り分けられないケースがあるようでしたら…、ごめ
>んなさい、ちょっとお手上げです。

こちらこそ、お手数おかけしております。

さて、運良く?元のマクロで症状が出ました。
早速、ご教示のマクロを試しますと
  以下のフォルダの「すべて選択」コマンドが失敗しました
のエラーがでました。
結果的にエラーが出たフォルダの最初の1件だけが振り分けられま
した。
直後に、再度試しますと全フォルダの残っているメールが振り分け
られました。

つまり、何かの原因で「すべて選択」コマンドが失敗することがあ
ると言うわけですね。




>あまり参考にならないかもしれませんが、念のためOSの種類や秀丸メー
>ルのバージョンも教えてください。あとはGDS連携を使っているとかホー
>ムディレクトリがリモートマシン上にあるとかキー入力をさらうような
>特殊な常駐ソフトを組み込んでいるとか…、何かちょっと普通とは違う
>かなぁと思われるような環境があれば何かヒントになるかもしれません。

申し訳ございません。環境を明記し忘れておりました。

秀丸:4.58
OS:W2K SP4(実は XP Proでも発生します)
ホームディレクトリ:USB接続のHDD
常駐:ウィルスバスター2006


--
龍朋(Ryuhou)  

[ ]
RE:00658 アカウント越しのメール振り分けNo.00659
capa さん 05/11/10 17:39
 
capa です。

すみませんがもう1点だけテストをお願いします。
先ほどのマクロ末尾付近にある以下の部分を

---
SelectErr:
  call McrMsg "以下のフォルダの「すべて選択」コマンドが失敗しました\n" +
    "アカウント名=" + $FA[#i] + "\nフォルダ名=" + $FF[#i] ;
  return;
---

以下の内容に差し替えて、再度エラーを発生させてください。

---
SelectErr:
  call McrMsg "以下のフォルダの「すべて選択」コマンドが失敗しました\n" +
    "アカウント名=" + $FA[#i] + "\nフォルダ名=" + $FF[#i] +
    "\nGetFolderMailCount=" + str(#mcnt) +
    "\nMailCount=" + str(dllfunc("MailCount")) +
    "\nMailCountAll=" + str(dllfunc("MailCountAll"));
  return;
---

そのときに表示される

・GetFolderMailCount=
・MailCount=
・MailCountAll=

の内容を教えてください。この値の組み合わせ次第ではマクロ側ではど
うしようもない事象かもしれません…。

なんとなくウィルスバスターが怪しいような気もするので、もし可能で
あればリアルタイム検索機能をOFFにしたり、秀丸メール本体の[全般的
な設定-ウィルス対策-詳細]にある「アンチウィルス/ファイヤウォール
系ソフトとの相性問題」の設定をいろいろいじってもらって問題が発生
するか試してもらうと原因の切り分けができるかもしれません。

[ ]
RE:00659 アカウント越しのメール振り分けNo.00660
龍朋 さん 05/11/11 13:00
 

[ X-Mailer:HidemaruMail 4.58 (WinNT,500) ]

お世話になっております。
龍朋 です。

******** capa <54480xxxxxxxxxxxxxx@maruo.co.jp> さん wrote
******** [ turukame.5:00659| RE 00658 アカウント越しのメール振り分け補助マク
ロ ]
******** [ Thu, 10 Nov 2005 17:39:59 +0900 ]

>すみませんがもう1点だけテストをお願いします。
----- 省略 -----
>そのときに表示される
>
>・GetFolderMailCount=
>・MailCount=
>・MailCountAll=

やっと症状が発生しました。
アカウントA
  GetFolderMailCount=6
  MailCount=6
  MailCountAll=6
  実行前7件(未読)あり
  実行後6件が未読、先頭1件が既読に変わってしまった。
アカウントB
  GetFolderMailCount=2
  MailCount=2
  MailCountAll=2
  実行前3件(未読)あり
  実行後2件が未読、先頭1件が既読に変わってしまった。
アカウントC
  GetFolderMailCount=11
  MailCount=11
  MailCountAll=11
  実行前12件(未読)あり
  実行後11件が未読、先頭1件が既読に変わってしまった。
アカウントD
  GetFolderMailCount=6
  MailCount=6
  MailCountAll=6
  実行前7件(未読)あり
  実行後6件が未読、先頭1件が既読に変わってしまった。

引き続きマクロを実行したところ、すんなり振り分けられました。


>なんとなくウィルスバスターが怪しいような気もするので、もし可能で
>あればリアルタイム検索機能をOFFにしたり、秀丸メール本体の[全般的
>な設定-ウィルス対策-詳細]にある「アンチウィルス/ファイヤウォール
>系ソフトとの相性問題」の設定をいろいろいじってもらって問題が発生
>するか試してもらうと原因の切り分けができるかもしれません。

確かに、VB2006の迷惑フィルタ機能(SubjectにMEIWAKUを付加)を
疑いました。
しかし、上記の例ではアカウントCの先頭メール(なぜか既読になっ
てしまったメール)は、秀丸メールの spam word にひっかかった
メールでした。

あと気になるのは、振り分け先(移動先)を覗こうとすると、
    パス=TML\05******\index.html
が不正と出ることです。
今回は11回表示されました。
そこで、振り分け先のフォルダを確認すると、確かに11件のHTMLメー
ルがあります。
(10件がVB2006の迷惑メール機能、1件が秀丸メールのspam word)

そこで、当該メールを元のアカウントにドラッグ&ドロップすると
    パス=TML\05******\index.html
と表示され、その後、マクロを実行するとやはり
    パス=TML\05******\index.html
が表示されますが、振り分けはされております。

この動きに何かヒントがありますでしょうか?


--
龍朋(Ryuhou)  

[ ]
RE:00660 アカウント越しのメール振り分けNo.00661
龍朋 さん 05/11/11 13:20
 

[ X-Mailer:HidemaruMail 4.58 (WinNT,500) ]

お世話になっております。
龍朋 です。

続けて症状が発生しました。
アカウントA
  GetFolderMailCount=6
  MailCount=6
  MailCountAll=6
  実行前2件(未読)あり
  実行後2件とも既読に変わってしまった。

最初の1件目は spam wordで、2件目が迷惑メール機能のHTMLメール。
最初に見つけたメールの添付(HTML)のパスが不正なために発生す
るのかと思ったのですが、そうでもないようですね。




本音を言えば、秀丸メール自体がアカウント越しの振り分け機能を
持ってほしいですよね。

--
龍朋(Ryuhou)  

[ ]
RE:00661 アカウント越しのメール振り分けNo.00662
capa さん 05/11/11 13:31
 
capa です。

秀丸メール本体の[設定-全般的な設定]の設定の一覧にある[ウィルス対
策-詳細]の画面で、「アンチウィルスソフトのリアルタイム検索を高速
動作させる」のチェックを外したら症状がでなくなるかもしれません。

最近追加された機能なので、最近発生し始めたという龍朋さんの話とも
合致します。

どうでしょう??

メールが既読になってしまう件はたぶんマクロ側の問題なので修正した
いと思います。

[ ]
RE:00662 アカウント越しのメール振り分けNo.00663
龍朋 さん 05/11/12 09:30
 

[ X-Mailer:HidemaruMail 4.58 (WinNT,500) ]

お世話になっております。
龍朋 です。

******** capa <54480xxxxxxxxxxxxxx@maruo.co.jp> さん wrote
******** [ turukame.5:00662| RE 00661 アカウント越しのメール振り分け補助マク
ロ ]
******** [ Fri, 11 Nov 2005 13:31:02 +0900 ]

>秀丸メール本体の[設定-全般的な設定]の設定の一覧にある[ウィルス対
>策-詳細]の画面で、「アンチウィルスソフトのリアルタイム検索を高速
>動作させる」のチェックを外したら症状がでなくなるかもしれません。
>
>最近追加された機能なので、最近発生し始めたという龍朋さんの話とも
>合致します。

チェックを外しましたが・・・感覚的には発生頻度が低下したよう
な気がします(つまり、発生しているということです)。

dllfunc("SelectedMailCount")
これに何か原因があるのでしょうか?

--
龍朋(Ryuhou)  

[ ]
RE:00663 アカウント越しのメール振り分けNo.00664
龍朋 さん 05/11/12 17:18
 

[ X-Mailer:HidemaruMail 4.58 (WinNT,500) ]

お世話になっております。
龍朋 です。

******** 龍朋 <7xxxxxxxxxxxxxx@maruo.co.jp> さん wrote
******** [ turukame.5:00663| RE 00662 アカウント越しのメール振り分け補助マク
ロ ]
******** [ Sat, 12 Nov 2005 09:30:03 +0900 ]

>dllfunc("SelectedMailCount")
>これに何か原因があるのでしょうか?

振り分けに成功している時には、既読にならないようです。


--
龍朋(Ryuhou)  

[ ]
RE:00654 アカウント越しのメール振り分けNo.00665
龍朋 さん 05/11/16 17:25
 
[ X-Mailer:HidemaruMail 4.58 (WinNT,500) ]

お世話になっております。
龍朋 です。

「秀丸メール会議室」でご存知とは思いますが、こちらにも結果(
途中経過?)を報告しておきます。

>>    if( dllfunc("CurrentPane") >= 2 ) {
>>      #tmp = dllfunc("SelectPane", 1);
>>    }
>>    #n = sendmessage( hidemaruhandle(0), 0x0111, 40008, 0);

上記修正で、昨日から今までの間、振り分けされない現象は発生し
ておりません。

私自身も手動ではなく、自動側に登録しなおして様子をみてみます。
もし、再発することがあれば、こちらにもご報告いたします。

--
龍朋(Ryuhou)  

[ ]
RE:00665 アカウント越しのメール振り分けNo.00666
capa さん 05/11/16 18:29
 
capa です。

秀まるおさんの報告をもとに、メール内容枠を選択した状態では正常に
振り分けされないこと、および秀丸メールver.4.59beta7で追加されたマ
クロ関数を使えば同じ条件でも正常に振り分けされることを確認してい
ます。

あと、メールの一部が既読になってしまう件も手元のマクロでは修正し
ています。秀丸メールのver.4.59の正式版がでたらマクロもライブラリ
に登録し直す予定ですのでよろしくお願いします。

[ ]
RE:00654 アカウント越しのメール振り分けNo.00667
龍朋 さん 05/11/18 08:22
 
[ X-Mailer:HidemaruMail 4.59 (WinNT,500) ]

お世話になっております。
龍朋 です。
#「秀丸メール会議室」にも報告致しましたが・・・

「アカウント越しのメール振り分け補助マクロVer1.02」
で快適動作を確認致しました。

長い間、お付き合いくださいましてありがとうございました。

--
龍朋(Ryuhou)  


[ ]