個別アカウントをまたいでの、個別メールNo.08798
ym さん 21/11/06 17:54
 
アカウントが非常に多い場合、アカウントを跨いで同メールの削除のマクロはあるの
でしょうか?

お忙しいところ申し訳ございません。

[ ]
RE:08798 個別アカウントをまたいでの、個No.08801
秀まるお2 さん 21/11/08 08:48
 
 マクロ作ってみました。

 現在選択してるメールのMesage-idと同じメールを検索して、見つかったメールを
すべて削除というか、ゴミ箱に移動するマクロになります。ゴミ箱への移動じゃなく
て「完全に削除」としたい場合は、dllfunc("Delete",0);としてる部分をコメントじ
ゃないようにして、「ゴミ箱に移動する処理」の方をコメントアウトすればいいです。

-------------------------------------------------------------------------------
    //同じメールをすべてのアカウントから検索して削除するマクロ
    loaddll "tkinfo.dll";
    #n = dllfunc("AutoRestoreFindPack");
    $messageid = dllfuncstr("CurrentHeader", "Message-Id");
    if( $messageid == "" ) {
        message "現在選択してるメールのMessage-Idが不明です。";
        endmacro;
    }
    #x = strstr( $messageid, "<" );
    if( #x >= 0 ) {
        $messageid = midstr( $messageid, #x + 1 );
    }
    #x = strstr( $messageid, ">" );
    if( #x > 0 ) {
        $messageid = leftstr( $messageid, #x );
    }
    $messageid = dllfuncstr("YenEncode", $messageid);
    #n = dllfunc("SetFindPack", "(\"" + $messageid + "\", casesense, word, t
arget=person), messageidtarget=messageid");
    #n = dllfunc("DoGrep", "", "受信+送信済み+ユーザー", 0 );
    #n = dllfunc("SetGrepWndTop");
    #n = sendmessage( hidemaruhandle(0), 0x0111, 40008, 0);     //すべて選択

    //削除する処理
    //#n = dllfunc("Delete", 0 );

    //ゴミ箱に移動する処理
    question "選択したメールをゴミ箱に移動してもいいですか?";
    if( result == yes ) {
        #n = sendmessage( hidemaruhandle(0), 0x0111, 40010, 0);     //メール
を削除する
    }

    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("CloseGrepWnd");

[ ]
RE:08801 個別アカウントをまたいでの、個No.08807
ym さん 21/11/08 12:52
 
ありがとうございました。

[ ]
RE:08807 個別アカウントをまたいでの、個No.08808
ym さん 21/11/08 13:06
 
ありがとうございました。
実行したところ、選択メールのみをゴミ箱へ入れることで終了してしまいます。
メールの題名のみで良いのかも知れませんが、その場合、先ほどのマクロの【\"" +
$messageid + "\",】削除すればよろしいのでしょうか?
すみません。

[ ]
RE:08808 個別アカウントをまたいでの、個No.08810
秀まるお2 さん 21/11/08 15:56
 
 検索結果の一覧上で、マクロの処理として、

    #n = sendmessage( hidemaruhandle(0), 0x0111, 40008, 0);     //すべて選択

 ってのをやってるんですが、それがうまく働いてないってことなのかと思います。

 例えば上記命令の後に

    endmacro;

 って1行を入れて、たしかに「すべて選択」が実行されてるかどうか1回確認してみ
てほしいです。

 もし「すべて選択」が機能してないようでしたら、例えば以下のマクロは「Home
キー押してShift+Endキーを押す」って方式ですべて選択するマクロになりますが、
それでどうでしょうか。

----------------------------------------------------------------------------
    //同じメールをすべてのアカウントから検索して削除するマクロ
    loaddll "tkinfo.dll";
    #n = dllfunc("AutoRestoreFindPack");
    $messageid = dllfuncstr("CurrentHeader", "Message-Id");
    if( $messageid == "" ) {
        message "現在選択してるメールのMessage-Idが不明です。";
        endmacro;
    }
    #x = strstr( $messageid, "<" );
    if( #x >= 0 ) {
        $messageid = midstr( $messageid, #x + 1 );
    }
    #x = strstr( $messageid, ">" );
    if( #x > 0 ) {
        $messageid = leftstr( $messageid, #x );
    }
    $messageid = dllfuncstr("YenEncode", $messageid);
    #n = dllfunc("SetFindPack", "(\"" + $messageid + "\", casesense, word, t
arget=person), messageidtarget=messageid");
    #n = dllfunc("DoGrep", "", "受信+送信済み+ユーザー", 0 );
    #n = dllfunc("SetGrepWndTop");
    //#n = sendmessage( hidemaruhandle(0), 0x0111, 40008, 0);     //すべて選択
    //キー操作で「すべて選択」してみる?
    #wnd = dllfunc("GrepListWnd");
    #n = dllfunc( "SimulateKeyStroke2", #wnd, 0x24,0,0,0 );
    #n = dllfunc( "SimulateKeyStroke2", #wnd, 0x23,1,0,0 );


    //削除する処理
    //#n = dllfunc("Delete", 0 );

    //ゴミ箱に移動する処理
    question "選択したメールをゴミ箱に移動してもいいですか?";
    if( result == yes ) {
        #n = sendmessage( hidemaruhandle(0), 0x0111, 40010, 0);     //メール
を削除する
    }

    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("CloseGrepWnd");

[ ]
RE:08810 個別アカウントをまたいでの、個No.08811
ym さん 21/11/08 18:55
 
お忙しいところ申し訳けございません。
@
>    endmacro;
>
> って1行を入れて、たしかに「すべて選択」が実行されてるかどうか1回確認して
>みてほしいです。

やはり駄目でして最初に選択した1件のみゴミ箱に移しました。

> もし「すべて選択」が機能してないようでしたら、例えば以下のマクロは「Home
>キー押してShift+Endキーを押す」って方式ですべて選択するマクロになりますが、
>それでどうでしょうか。

同じで、これは@アドレスグループ内で処理は止まります。

一度既読処理しているとだめなのでしょうか・・・

[ ]
RE:08811 個別アカウントをまたいでの、個No.08814
秀まるお2 さん 21/11/09 09:10
 
 そちらで起きてる症状がどういう物なのかちょっと僕の想像と違うのかもしれませ
ん。とりあえず、別の作戦に変更したマクロを作ってみたので、これで試してみてほ
しいです。もしかして秀丸メールのバージョンが古いと期待通り動作しないかもしれ
ないので、もし古い場合は最新版に入れ替えてほしいです。最新版はVersion 7.00と
なってます。「ヘルプ - 秀丸メールのバージョン情報/送金登録...」の所から確認
できます。

 マクロは以下のようになります。


----------------------------------------------------------------------------
-------------
    //同じメールをすべてのアカウントから検索して削除するマクロ
    loaddll "tkinfo.dll";
    #n = dllfunc("AutoRestoreFindPack");
    $messageid = dllfuncstr("CurrentHeader", "Message-Id");
    if( $messageid == "" ) {
        message "現在選択してるメールのMessage-Idが不明です。";
        endmacro;
    }
    #x = strstr( $messageid, "<" );
    if( #x >= 0 ) {
        $messageid = midstr( $messageid, #x + 1 );
    }
    #x = strstr( $messageid, ">" );
    if( #x > 0 ) {
        $messageid = leftstr( $messageid, #x );
    }
    $messageid = dllfuncstr("YenEncode", $messageid);
    #n = dllfunc("SetFindPack", "(\"" + $messageid + "\", casesense, word, t
arget=person), messageidtarget=messageid");
    #n = dllfunc("DoGrep", "", "受信+送信済み+ユーザー", 0 );
    #n = dllfunc("SetGrepWndTop");

    //ゴミ箱に移動する処理
    question "選択したメールをゴミ箱に移動してもいいですか?";
    if( result == yes ) {
        while(1) {
            #n = dllfunc("SetMailIndex", 0);
            #n = sendmessage( hidemaruhandle(0), 0x0111, 40010, 0);     //
メールを削除する
            if( dllfunc("MailCount") == 0 ) {
                break;
            }
        }
    }

    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("CloseGrepWnd");

[ ]
RE:08814 個別アカウントをまたいでの、個No.08817
ym さん 21/11/09 14:18
 
バージョン6.8?だったので、上げてやってみましたが

全く変わりません。

違いと言えば、
1番目と3番目は同じに「選択したメールをゴミ箱へ移動してもいいですか?」メッ
セージがでることです。

[ ]
RE:08817 個別アカウントをまたいでの、個No.08818
秀まるお2 さん 21/11/09 15:37
 
 なら以下のマクロではどうでしょうか。

 検索結果にちゃんと複数のメールが一覧表示されてるんですよね。今回のマクロは、
とにかくその検索結果のウィンドウ上で「ゴミ箱へ移動」コマンドを20回実行します。

 それでもダメだとしたら、とりあえず、「選択したメールをゴミ箱へ移動してもい
いですか?」の表示されてる状態で、裏側にある検索結果の一覧の様子が分かるよう
に画面ハードコピーを取って、それを送ってほしいです。送り先は"maruo@mitene.or.
jp"になります。さらに、

    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("CloseGrepWnd");

 の所を

    //#n = dllfunc("SetMainWndTop");
    //#n = dllfunc("CloseGrepWnd");

 のようにコメントアウトしてマクロ実行した後に残る結果ウィンドウの画面ハード
コピーも欲しいです。

 よろしくお願いします。

---------------------------------------------------------------------
    //同じメールをすべてのアカウントから検索して削除するマクロ
    loaddll "tkinfo.dll";
    #n = dllfunc("AutoRestoreFindPack");
    $messageid = dllfuncstr("CurrentHeader", "Message-Id");
    if( $messageid == "" ) {
        message "現在選択してるメールのMessage-Idが不明です。";
        endmacro;
    }
    #x = strstr( $messageid, "<" );
    if( #x >= 0 ) {
        $messageid = midstr( $messageid, #x + 1 );
    }
    #x = strstr( $messageid, ">" );
    if( #x > 0 ) {
        $messageid = leftstr( $messageid, #x );
    }
    $messageid = dllfuncstr("YenEncode", $messageid);
    #n = dllfunc("SetFindPack", "(\"" + $messageid + "\", casesense, word, t
arget=person), messageidtarget=messageid");
    #n = dllfunc("DoGrep", "", "受信+送信済み+ユーザー", 0 );
    #n = dllfunc("SetGrepWndTop");


    //削除する処理
    //#n = dllfunc("Delete", 0 );

    //ゴミ箱に移動する処理
    question "選択したメールをゴミ箱に移動してもいいですか?";
    if( result == yes ) {
        #count = 20;
        while( #count > 0 ) {
            #n = dllfunc("SetMailIndex", 0);
            #n = sendmessage( hidemaruhandle(0), 0x0111, 40010, 0);     //
メールを削除する
            #count = #count - 1;
        }
    }

    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("CloseGrepWnd");

[ ]
RE:08818 個別アカウントをまたいでの、個No.08827
秀まるお2 さん 21/11/10 17:21
 
 画面ハードコピー送っていただきありがとうございます。

 うまく動いてない理由ですが、そもそも「同メール」と解釈されてるメールが、秀
丸メール的には同メールと解釈できてないんだろうと思います。

 たぶん、メールの件名や差出人のメールアドレスは同じなんだと思いますが、Mess
age-Id:ヘッダの内容が違ってるんだと思います。

 対象となる複数のメールの、Message-Id:ヘッダの中身を見比べていただければそ
の辺はっきりすると思います。「表示」メニューの「メールのヘッダ」の中の「すべ
て表示」とするとヘッダがすべて出てきます。その中から探してみて、中身を比べて
みて欲しいです。

 同一じゃない場合は、とりあえず、「差出人と件名が同じメールを探して、それら
を一括して削除する」って風なマクロに直すことは可能です。そういう作戦でも良け
ればそういう作戦で対処させていだたきます。

[ ]
RE:08827 個別アカウントをまたいでの、個No.08832
ym さん 21/11/11 12:43
 
お手数掛け申し訳ございません。

> たぶん、メールの件名や差出人のメールアドレスは同じなんだと思いますが、Mes
>sage-Id:ヘッダの内容が違ってるんだと思います。

はいその通りです。
Subject: ********** は同じ。

Message-ID: <1131329299.33074131636019620306.JavaMail.root@mail-i147*****>
Message-ID: <2106931841.33073411636019614960.JavaMail.root@mail-i147*****>
でした。

>「差出人と件名が同じメールを探して、それらを一括して削除する」って風なマク
>ロに直すことは可能です。そういう作戦でも良ければそういう作戦で対処させてい
>だたきます。

はい、よろしくお願いします。

[ ]
RE:08832 個別アカウントをまたいでの、個No.08833
秀まるお2 さん 21/11/11 15:16
 
 マクロ作ってみました。

 1.差出人のメールアドレスが同じ。
 2.件名が同じ。
 3.メールの日付が同じ

 の3つのAND条件にてメールを探します。

 メール本文は比較しないので、もしかして文面のまったく違うメールが同一視され
てしまう可能性もあります。

----------------------------------------------------------------------------
----------
    //件名と差出人が同じメールを探して削除するマクロ。日付も同じ日に限定。
    loaddll "tkinfo.dll";
    #n = dllfunc("AutoRestoreFindPack");
    #n = dllfunc("SetJapaneseCodePageMode", 1);
    $subject = dllfuncstr("CurrentHeader", "Subject");
    $from = dllfuncstr("CurrentHeader", "From");
    $from = dllfuncstr("SetEmailOnly", $from);
    $date = dllfuncstr("FormatDate", dllfuncstr("CurrentHeader","Date"), "YY
YY/MM/DD");
    if( $subject == "" || $from == "" || $date == "" ) {
        message "現在選択してるメールの件名または差出人または日時が不明です。";
        endmacro;
    }
    $subject = dllfuncstr("YenEncode", $subject);
    $from = dllfuncstr("YenEncode", $from);
    $pack = "(\"" + $from + "\", casesense, word, target=person)and" +
       "(\"" + $subject + "\", casesense, target=subject)," +
       "flag=!send&date=" + $date + "-" + $date +
       ", persontarget=from";
    #n = dllfunc("SetFindPack",$pack );
    #n = dllfunc("DoGrep", "", "受信+送信済み+ユーザー", 0 );
    #n = dllfunc("SetGrepWndTop");
    #n = sendmessage( hidemaruhandle(0), 0x0111, 40008, 0);     //すべて選択

    //削除する処理
    //#n = dllfunc("Delete", 0 );

    //ゴミ箱に移動する処理
    question "選択したメールをゴミ箱に移動してもいいですか?";
    if( result == yes ) {
        #n = sendmessage( hidemaruhandle(0), 0x0111, 40010, 0);     //メール
を削除する
        #n = dllfunc("SetMainWndTop");
        #n = dllfunc("CloseGrepWnd");
    }

[ ]
RE:08833 個別アカウントをまたいでの、個No.08837
ym さん 21/11/11 20:30
 
削除できました。
何回もありがとうございました。

[ ]