[ 新規に投稿する ]

返信済フラグを付けるマクロNo.13268
しんめ さん 25/02/03 20:18 [ コメントを投稿する ]
  初心者なものですからマクロを作成する力がありませんので、ご教授をお願いします。
外出中はスマホのメーラーで受信したメールに返信をしていまして、帰宅後、秀丸メールで受信しなおしますが、その時に返信済のメールに返信済のフラグが付いていませんので、マクロで返信済のフラグを付けたいのです。
メールサーバーはIMAPで運用しています。
よろしくお願いいたします。
[ ]
RE:13268 返信済フラグを付けるマクロNo.13271
秀まるお2 さん 25/02/04 08:54 [ コメントを投稿する ]
  「返信済み」のフラグをON/OFF切り替えするマクロは以下のようになります。

    loaddll "tkinfo.dll";
    #reply = dllfunc("GetMailFlag", "reply");
    if( #reply == 0 ) {
        //OFFならONにする
        #n = dllfunc("SetMailFlag", "reply", 1);
    } else {
        //ONならOFFにする
        #n = dllfunc("SetMailFlag", "reply", 0);
    }

単純にONするだけなら、

    loaddll "tkinfo.dll";
    #n = dllfunc("SetMailFlag", "reply", 1);

の2行だけでもいいです。

返信済みをONにしてさらに既読にするなら

    loaddll "tkinfo.dll";
    #n = dllfunc("SetMailFlag", "reply", 1);
    #n = dllfunc("SetMailFlag", "unread", 0);

みたいなマクロになります。
[ ]
RE:13271 返信済フラグを付けるマクロNo.13274
しんめ さん 25/02/05 09:29 [ コメントを投稿する ]
  私の言葉が足りなくて申し訳ありません。
出先で返信したメールと返信していないメールがあり、帰宅後に一個一個のメールを確認してフラグを付けるのが大変なので、秀丸メールでsentフォルダーにあるメールの元の受信メールに一括で返信済みフラグを付けるマクロがあると助かるのですが。
よろしくお願いいたします。
[ ]
RE:13274 返信済フラグを付けるマクロNo.13275
秀まるお2 さん 25/02/05 12:33 [ コメントを投稿する ]
  マクロを作るのは可能だとは思うんですが、かなり面倒な処理を作らないといけなさそうな気がします。

1つ不明な点があります。「sentフォルダ」があるとのことですが、これは秀丸メールにある「送信済み」フォルダじゃなくて、IMAPの同期によって作成されたフォルダでしょうか。例えばGmailの場合だと、アカウントの直下に

    [Gmail]
       + 送信済みメール

ってフォルダがあるんですが、そういうフォルダだったりしますでしょうか。だとしたら、もっと具体的なフォルダ名を教えて欲しいです。Gmailだと上記のような名前になりますが、Outlook.comだとアカウント直下に「Outbox」って名前になるようです。Yahoo!メールだとアカウント直下に「Sent」って名前のフォルダになります。

そこにあるメールを1通ずつ調べて、それの返信元メールを探してフラグを書き換える、ということなら出来るかなぁとは思いますけども。
[ ]
RE:13275 返信済フラグを付けるマクロNo.13276
しんめ さん 25/02/05 13:40 [ コメントを投稿する ]
  >1つ不明な点があります。「sentフォルダ」があるとのことですが、これは秀丸メールにある「送信済み」フォルダじゃなくて、IMAPの同期によって作成されたフォルダでしょうか。

その通りです。@Niftyを使っていまして、アカウント直下に「Sent」フォルダです。

Gmailも使っていまして、アカウント直下に[Gmail] + 送信済みメールというフォルダです。

よろしくお願いいたします。

[ ]
RE:13276 返信済フラグを付けるマクロNo.13277
秀まるお2 さん 25/02/05 14:14 [ コメントを投稿する ]
  マクロ作ってみました。Sendフォルダを選択してから実行してもらうマクロにしました。
(なのでフォルダ名が何かは聞かなくても大丈夫でした。失礼しました)

マクロの動作を説明させていただきますと・・・・選択したフォルダの中のメール全部を対象にすると時間がとんでもなくかかると思うので、とりあえず「範囲」を「最近の分」とした時に出てくるメールのみを対象にしました。それで出てくるメールの一番下にあるメールから順番に処理するようにしました。その辺は要望があれば簡単に直せます。

「最近の分」にした一番下のメールから順番に選択して、そのメールの返信元をMessage-Id検索で探して、1通だけ見つかったら、そのメールが既に返信済みフラグONかどうか見て、OFFならONにします。それを繰り返します。0通の場合は何もせず、2通以上あったらマクロを中断します。


---------------------------------------------------------------------------------------------------
    loaddll "tkinfo.dll";
    if( dllfunc("IsThreadView") ) {
        #n = dllfunc("SetThreadView", 0);
    }
    #viewarea = dllfunc("ViewArea");
    if( #viewarea != 1 ) {
        #n = dllfunc("SetViewArea", 1);     //最近の分のみ対象にする。
    }
    #i = dllfunc("MailCount") - 1;
    if( #i < 0 ) {
        //メールなし
    } else {
        #mailcount_notreply = 0;        //返信メールじゃないメール数
        #mailcount_reply = 0;           //返信メールのトータル数
        #mailcount_rootfound = 0;       //返信元が見つかったメール数
        #maiilcount_rootupdated = 0;    //返信元メールのフラグを書き換えた数

        while( #i >= 0 ) {
            #n = dllfunc("SetMailIndex", #i);
            call SetRootMailReply;
            #i = #i - 1;
        }
        if( #maiilcount_rootupdated != 0 ) {
            message str(#maiilcount_rootupdated) + " 通のメールを返信済みに書き換えました。";
        } else if( #mailcount_rootfound != 0 ) {
            message str(#mailcount_rootfound) + " 通の返信元メールを見つけましたが、すべて返信済みフラグがONになっていました。";
        }
    }
    if( #viewarea != 1 ) {
        #n = dllfunc("SetViewArea", #viewarea);     //範囲を元に戻す。
    }
    endmacro;

SetRootMailReply:
    $$id = dllfuncstr("CurrentHeader", "In-Reply-To");
    if( $$id == "" ) {
        $$id = dllfuncstr("CurrentHeader", "References");
    }
    if( $$id == "" ) {
        #mailcount_notreply = #mailcount_notreply + 1;      //返信メールじゃない
        return;
    }
    #mailcount_reply = #mailcount_reply + 1;        //返信メールを見つけた。
    if( leftstr( $$id, 1 ) == "<" ) {
        $$id = midstr( $$id, 1 );
        ##x = strstr( $$id, ">" );
        if( ##x > 0 ) {
            $$id = leftstr( $$id, ##x );
        }
    }
    $$id = dllfuncstr("YenEncode", $$id);
    #n = dllfunc("AutoRestoreFindPack");
    #n = dllfunc("SetFindPack", "(\"" + $$id + "\",target=person),flag=!send,subfolder=1,inmail=2,messageidtarget=messageid");
    #n = dllfunc("DoGrep", "\\CurrentAccount","受信+送信済み+ユーザー");
    #n = dllfunc("SetGrepWndTop");
    ##count = dllfunc("MailCount");
    if( ##count == 1 ) {
        #mailcount_rootfound = #mailcount_rootfound + 1;
        if( dllfunc("GetMailFlag", "reply") == 0 ) {
            #n = dllfunc("SetMailFlag", "reply", 1);
            #maiilcount_rootupdated = #maiilcount_rootupdated + 1;
        }
    } else if( ##count > 1 ) {
        #mailcount_rootfound = #mailcount_rootfound + 1;
        question "返信元メールが複数見つかりました。処理を中断しますか?";
        if( result == yes ) {
            endmacro;
        }
    } else {
        //message "返信元メールは見つかりませんでした。";
    }
    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("CloseGrepWnd");
    return;

[ ]
RE:13277 返信済フラグを付けるマクロNo.13280
しんめ さん 25/02/06 09:03 [ コメントを投稿する ]
  ありがとうございました。
「範囲」ですが、「最近の分」ではなく、「Sent]フォルダで自分が選択したメール以降の分を処理してくれるようになれば良いと思いました。

よろしくお願いいたします。

[ ]
RE:13280 返信済フラグを付けるマクロNo.13281
秀まるお2 さん 25/02/06 09:53 [ コメントを投稿する ]
  現在選択してるメールから新しいメールの方向にスキャンしていくようにしてみました。

------------------------------------------------------------------------------
    loaddll "tkinfo.dll";
    #mailcount = dllfunc("MailCount");
    if( #mailcount == 0 ) {
        message "Sentフォルダの何かのメールを選択してから実行してください。";
        endmacro;
    }
    if( dllfunc("IsThreadView") ) {
        #n = dllfunc("SetThreadView", 0);
    }
    #sortmethod = dllfunc("SortMethod");
    if( #sortmethod <= 11
     || (#sortmethod >= 140 && #sortmethod <= 144) ) {
        //古いのが一番上で新しいのが一番下
        #downloop = 1;
    }
    #i = dllfunc("MailIndex");
    #i_start = #i;
    #mailcount_notreply = 0;        //返信メールじゃないメール数
    #mailcount_reply = 0;           //返信メールのトータル数
    #mailcount_rootfound = 0;       //返信元が見つかったメール数
    #maiilcount_rootupdated = 0;    //返信元メールのフラグを書き換えた数

    while(1) {
        #n = dllfunc("SetMailIndex", #i);
        call SetRootMailReply;
        if( #downloop ) {
            #i = #i + 1;
            if( #i >= #mailcount ) {
                break;
            }
        } else {
            #i = #i - 1;
            if( #i < 0 ) {
                break;
            }
        }
    }
    #n = dllfunc("SetMailIndex", #i_start);
    if( #maiilcount_rootupdated != 0 ) {
        message str(#maiilcount_rootupdated) + " 通のメールを返信済みに書き換えました。";
    } else if( #mailcount_rootfound != 0 ) {
        message str(#mailcount_rootfound) + " 通の返信元メールを見つけましたが、すべて返信済みフラグがONになっていました。";
    }
    endmacro;

SetRootMailReply:
    $$id = dllfuncstr("CurrentHeader", "In-Reply-To");
    if( $$id == "" ) {
        $$id = dllfuncstr("CurrentHeader", "References");
    }
    if( $$id == "" ) {
        #mailcount_notreply = #mailcount_notreply + 1;      //返信メールじゃない
        return;
    }
    #mailcount_reply = #mailcount_reply + 1;        //返信メールを見つけた。
    if( leftstr( $$id, 1 ) == "<" ) {
        $$id = midstr( $$id, 1 );
        ##x = strstr( $$id, ">" );
        if( ##x > 0 ) {
            $$id = leftstr( $$id, ##x );
        }
    }
    $$id = dllfuncstr("YenEncode", $$id);
    #n = dllfunc("AutoRestoreFindPack");
    #n = dllfunc("SetFindPack", "(\"" + $$id + "\",target=person),flag=!send,subfolder=1,inmail=2,messageidtarget=messageid");
    #n = dllfunc("DoGrep", "\\CurrentAccount","受信+送信済み+ユーザー");
    #n = dllfunc("SetGrepWndTop");
    ##count = dllfunc("MailCount");
    if( ##count == 1 ) {
        #mailcount_rootfound = #mailcount_rootfound + 1;
        if( dllfunc("GetMailFlag", "reply") == 0 ) {
            #n = dllfunc("SetMailFlag", "reply", 1);
            #maiilcount_rootupdated = #maiilcount_rootupdated + 1;
        }
    } else if( ##count > 1 ) {
        #mailcount_rootfound = #mailcount_rootfound + 1;
        question "返信元メールが複数見つかりました。処理を中断しますか?";
        if( result == yes ) {
            endmacro;
        }
    } else {
        //message "返信元メールは見つかりませんでした。";
    }
    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("CloseGrepWnd");
    return;
[ ]
RE:13281 返信済フラグを付けるマクロNo.13282
しんめ さん 25/02/06 11:17 [ コメントを投稿する ]
  メール件数が多いものですから、返信済みかどうか確認するのが大変でしたが本当に助かりました。

ありがとうございました!
[ ]

[ 新規に投稿する ]