転送コマンド MakeForward につきましてNo.09749
せいぞう さん 22/06/06 16:09
 
はじめまして。

秀丸メールのマクロ  MakeForward  について質問させてください。
つまずいているのは、下記のシンプルなコードです。

//------------------------------------------
loaddll "tkinfo.dll";
while(1) {
 #n = dllfunc( "SelectRecvMail");
 if( #n == 0 ) {
  endmacro;
 }else{
  #n = dllfunc("MakeForward");
 }
}
//------------------------------------------

これを秀丸メールの
  [マクロ]→[マクロ登録]→[自動起動]→[受信が一段落した時]
にセットしています。


メールを受信すると、転送用のウインドウが立ち上がるのですが
同時に、次のエラーメッセージがポップアップして来るのです。

  -------------------------------------------------------
  TKINFO.DLL エディタ上で実行できないTKInfo.dll呼び出しが行われました。
  関数コード = 21
  -------------------------------------------------------

ご助言いただけましたら幸いです。
よろしくお願いします。

[ ]
RE:09749 転送コマンド MakeForward につNo.09751
秀まるお2 さん 22/06/06 16:28
 
 MakeForwardを実行すると、マクロがその「転送メール」のエディタ・ウィンドウ
上で動作しつづけます。そうすると、そのエディタ・ウィンドウ上でSelectRecvMail
が呼び出されてエラーになります。

 マクロを直すとしたら、

    loaddll "tkinfo.dll";
    while(1) {
        #n = dllfunc( "SelectRecvMail");
        if( #n == 0 ) {
            endmacro;
        } else {
            #n = dllfunc("MakeForward");
            #n = dllfunc("SetMainWndTop");
        }
    }


 みたいにMakeForwardした後に秀丸メール本体ウィンドウに戻せばいいです。ただ、
受信したメールが大量にあると、MakeForwardが途中で失敗すると思います。エディ
タ・ウィンドウの数は上限があります。それについてどう解決するかは難しいです。

 MakeForwardしてから草稿フォルダに保存してウィンドウを閉じて続行するとか、
何か工夫が必要なんじゃないかと思います。

 例えば草稿フォルダに保存してエディタ終了して続行するなら、以下のようなマク
ロになります。

    loaddll "tkinfo.dll";
    while(1) {
        #n = dllfunc( "SelectRecvMail");
        if( #n == 0 ) {
            endmacro;
        } else {
            #n = dllfunc("MakeForward");
            #n = dllfunc("SaveDraft");
            #handle = hidemaruhandle(0);
            #n = dllfunc("SetMainWndTop");
            closehidemaru #handle;
        }
    }

[ ]
RE:09751 転送コマンド MakeForward につNo.09752
せいぞう さん 22/06/06 16:38
 
早速 ご助言いただき、ありがとうございます。
エラーが出るプロセスがよくわかりました。
また、先程 改善案を試し、エラー無く動作することを確認致しました。


大量の受信メールについては、現時点では対処する必要はなさそうですが
頂いたサンプルを試して、備えておこうと思います。

本当に助かりました。
ありがとうございました。<(_ _)>

[ ]
RE:09752 転送コマンド MakeForward につNo.09756
せいぞう さん 22/06/06 19:42
 
恐縮ですが、もうひとつだけ質問させてください。

上でアドバイス頂いたプログラムは、草稿に保存する案も含め
全てうまく動作しています。

そこで、もう一歩進め・・・
   (1)草稿に保存ではなく、すぐに宛先をセットして送信
   (2)元のメールは「処理済」というフォルダに移動
という改造を試みました。
下記のとおりです。(★印が追加した行です)


------------------------------------------------------
loaddll "tkinfo.dll";
while(1) {
    #n = dllfunc( "SelectRecvMail");
    if( #n == 0 ) {
        endmacro;
    } else {
        #n = dllfunc("MakeForward");
  #n = dllfunc("SetOrDeleteHeader", "To",  "aaaaao@bbbbb.com"); //★
  #n = dllfunc("SendNow");    //★SendNowに変えた
        #handle = hidemaruhandle(0);
        #n = dllfunc("SetMainWndTop");
        closehidemaru #handle;

  //元のファイルを処理済フォルダに移す
  #n = dllfunc( "Move", "", "処理済" ); //★
    }
}
------------------------------------------------------

しかし、"Move"コマンドはうまく機能せず、ゼロの戻り値を返しています。

全ての処理が完了した時点で、本体ウインドウでは 移動を試みている
「元メール」を選択している状態なので、なぜ移動してくれないのかが
わからないでいます。

誠に恐縮ですが、再びご助言頂けましたら幸いです。
よろしくお願いします。



[ ]
RE:09756 転送コマンド MakeForward につNo.09757
さん 22/06/06 20:07
 
 こんばんは、1ユーザーの陸と申します。
 横からすみません。

 「Move」関数のヘルプにもありますが、フォルダ名は「User\\処理済」のように指
定する必要があります。
 ということで、下記でうまくいかないでしょうか。

  #n = dllfunc( "Move", "", "User\\処理済" ); //★

 以上、参考になれば幸いです。

 それでは。

[ ]
RE:09757 転送コマンド MakeForward につNo.09759
せいぞう さん 22/06/07 00:05
 
陸様、ご助言ありがとうございます。

昨日は、すぐに御礼の投稿を行ったのですが
一日に投稿できる件数(3回)を超えたとのことで御礼をお伝えできませんでした。
改めまして、御礼申し上げます。<(_ _)>

アドバイス頂いた 「User¥¥ABC」 の記述方法で問題は解決いたしました。 ありが
とうございます。

全くの余談ですが・・・
実を言うと、昨日のアドバイスを受けて、
 「User¥¥ABC」 と修正すべきところ、私のケアレスミスで
 「¥¥User¥¥ABC」 と書いて 試し、問題解決になかなか至りませんでした。
もしも、会議室の投稿制限(3回)が無ければ、安易に追加の質問を投稿していたか
もしれません。
「自分でじっくり考えなさい」 というサイトの設計思想が バッチリ機能した出来事
でした。<(_ _)>

最後に 秀まるお2様、陸様、
重ね重ね 御礼申し上げます。

[ ]