スター付きメールNo.03285
3da さん 18/04/26 15:11
 
これまで、gmail+outlookの組み合わせで使用していて、最近、outlookから
秀丸メールへの乗り換えを検討しております。

gmailとはimapでメールのやり取りをしていて、outlook上でメールに
フラグを立てるとgmail上でマークが付けられ、マーク付きフォルダにも
このメールが表示されるようになり便利に使えていたのですが、
秀丸メールにはこのような機能はないでしょうか?

[ ]
RE:03285 スター付きメールNo.03286
秀まるお2 さん 18/04/26 16:22
 
 秀丸メールの場合も似たようなことは可能です。

 まず、スターを付ける/付けないに相当する機能として、「マーク」ってのがあり
まして、標準のキー割り当てだと、'M'キーを押すことで、マークのON/OFF切り替え
が可能です。

 マークの他には色付けとメモ付けがあります。色付けは、「編集 - 色」メニュー
から指定します。メモは、「編集 - メールのプロパティ」から指定します。

 マーク/色付け/メモ付けしたメールだけ抽出するには検索フォルダを使います。
「検索」メニューの中にある「検索フォルダの作成...」で検索フォルダを作るんで
すが、その時の「検索条件および対象フォルダの指定...」の先で、

 検索文字列:空のまま

 としつつ、「追加の条件」をONにして、

  □ マークされたメール
  □ メモ付きメール
  □ 色つき

 辺りを適当に指定すると、それらのメールだけを検索フォルダの方で一覧表示でき
ます。

 それぞれダイアログボックスにヘルプボタンがあるので、その辺も参照ください。

[ ]
RE:03286 スター付きメールNo.03294
3da さん 18/04/27 08:48
 
ご回答ありがとうございます。

マークについては認識しておりました。色付け、メモ付けについては
知らなかったので参考にさせて頂きます。

一番聞きたかったのは、秀丸メール側でマークをつけると、Gmail上でも
(ブラウザーやスマホで閲覧していても)反映されてマークが付き、
Gmailのスター付きフォルダー内にもメールが表示できるようになる、
という機能はあるでしょうか?ということなのですが、いかがでしょうか?

[ ]
RE:03294 スター付きメールNo.03296
秀まるお2 さん 18/04/27 09:21
 
> 一番聞きたかったのは、秀丸メール側でマークをつけると、Gmail上でも
> (ブラウザーやスマホで閲覧していても)反映されてマークが付き、
> Gmailのスター付きフォルダー内にもメールが表示できるようになる、
> という機能はあるでしょうか?ということなのですが、いかがでしょうか?

 調べてみたんですが、まず、gmail(のWebメール)上で「スター」を付けて、秀丸
メールからIMAPの受信をすると、受信フォルダにあったスター付きメールが、[Gmai
l]/スター付き のフォルダにも現れるようになりました。

 つまり、単純に「スター付き」のフォルダにコピーされただけのように見えます。

 逆のことをしてみました。つまり、秀丸メールの受信フォルダにあるメールを「ス
ター付き」にコピーして、その後受信を1回実行します。その後GmailのWebメールを
見ると、先ほどスター付きにコピーしたメールにスターが付きました。

 つまり、「スター付き」にコピーすれば、Webメール上でもスターが付くって仕組
みのようです。

 そういうことで、スターを付けたい場合は「スター付き」にコピーするってことで
どうでしょうか。

 スターをもっと簡単に付けたり外したりしたいとか、またはスター付きメールを受
信フォルダ上で何か分かるように表示させたいってことでしたら、それ用のマクロを
考えてみてもいいですけども。

[ ]
RE:03296 スター付きメールNo.03297
3da さん 18/04/27 10:18
 
早速調べて頂きありがとうございます。

> そういうことで、スターを付けたい場合は「スター付き」にコピーするってこと
>でどうでしょうか。

そうですね。そのような使い方で私の希望のかなりの部分は達成されそうです。
もう少し欲を言えば、Gmail上でマークを付けると、どのフォルダーに
置いてあってもそのメールにマークが付くようになるとありがたいです。
Gmail+Outlookではそのようになっていました。


> スターをもっと簡単に付けたり外したりしたいとか、またはスター付きメールを
>受信フォルダ上で何か分かるように表示させたいってことでしたら、それ用のマク
>ロを考えてみてもいいですけども。

まさに後者のようなことができるとありがたいです。

[ ]
RE:03297 スター付きメールNo.03298
秀まるお2 さん 18/04/27 11:22
 
 とりあえず、スター付きにするだけ=スター付きフォルダにコピーするだけでした
ら、以下のマクロになります。

    loaddll "tkinfo.dll";
    #n = dllfunc("Copy", "", "User\\[Gmail]\\スター付き");

 スターを付ける方は上記の方法でいいのですが、スターを消す方はうまくいかない
ようです。スター付きフォルダからメールを削除しても、なぜかWebメール上ではス
ターが取れてくれないです。

 ということで、それは出来ないというか、スターを外すのはWeb上でしか出来ない
って制限になってしまうと思います。

 Outlookの場合はどうなのか分かりませんが。

 それと、もう1つ必要なこととして、スター付きフォルダにあるメールを受信フォ
ルダ(およびその他のフォルダ)上で色分けか何かの見分けをしたいってとなんだと
思いますけども、それも必要ですよね。しかし、これをマクロでやるのはなかなか大
変です。

 今からやり方を考えてみます。

[ ]
RE:03298 スター付きメールNo.03300
秀まるお2 さん 18/04/27 15:41
 
 スター付きメールに対して「赤」の色付けをするマクロの例を作ってみました。と
りあえず手作業でマクロ実行してやるタイプになってます。

 色付けじゃなくてマーク付けがいいとかメモ付けがいいとか、他の色がいいとかあ
りましたらマクロ直しますので、また連絡ください。あるいは受信後に自動実行した
いとかでしたら、対象アカウントをマクロの中で指定して動作するように直さないと
いけないとかあります。



    loaddll "tkinfo.dll";
    #n = dllfunc("SetJapaneseCodePageMode", 1);
    $folder = dllfuncstr("CurrentFolder");
    #n = dllfunc("DisableDraw", 1);
    $find = dllfuncstr("GetFindPack");

    //まず最初に「赤」の色つきメールを全部色無しに変更する。
    #n = dllfunc("SetFindPack", "flag=color&colortarget=1, inmail=2, subfold
er=1");
    #n = dllfunc("SelectFolder", "", "");
    #n = dllfunc("FindDown");
    while( #n != 0 ) {
        #n = dllfunc("SetMailColor", 0);
        #n = dllfunc("FindDown");
    }

    #n = dllfunc("SelectFolder", "", "User\\[Gmail]\\スター付き");
    if( #n == 0 ) {
        #n = dllfunc("EnableDraw");
        #n = dllfuncstr("SetFindPack", $find);
        message "スター付きフォルダが選択できませんでした。";
        endmacro;
    }
    if( dllfunc("IsThreadView") != 0 ) {
        #n = dllfunc("SetThreadView", 0);
    }
    if( dllfunc("ViewArea") != 0 ) {
        #n = dllfunc("SetViewArea", 0);
    }
    #count = dllfunc("MailCount");
    if( #count == 0 ) {
        #n = dllfunc("SelectFolder", "", $folder);
        endmacro;
    }
    #i = 0;
    #idcount = 0;
    while( #i < #count ) {
        #n = dllfunc("SetMailIndex", #i);
        $id = dllfuncstr("CurrentHeader", "Message-Id");
        if( $id != "" ) {
            if( leftstr($id, 1) == "<" && rightstr($id, 1) == ">" ) {
                $id = midstr( $id, 1, strlen($id) - 2 );
            }
        }
        if( $id != "" ) {
            $id[#idcount] = $id;
            #idcount = #idcount + 1;
        }
        #i = #i + 1;
    }
    if( #idcount != 0 ) {
        #i = 0;
        while( #i < #idcount ) {
            $id = dllfuncstr("YenEncode", $id[#i]);
            #n = dllfunc("SetFindPack", "(\"" + $id + "\", target=person), m
essageidtarget=messageid, inmail=2, subfolder=1, ");
            #n = dllfunc("SelectFolder", "", "");
            #n = dllfunc("FindDown");
            while( #n != 0 ) {
                #n = dllfunc("SetMailColor", 1);
                #n = dllfunc("FindDown");
            }
            #i = #i + 1;
        }
    }
    #n = dllfunc("SelectFolder", "", $folder);
    #n = dllfunc("SetFindPack", $find);
    #n = dllfunc("EnableDraw");


[ ]
RE:03300 スター付きメールNo.03304
3da さん 18/04/27 18:48
 
迅速にご対応頂きましてありがとうございます。

マクロによってスター付きメールを赤色に変えることには成功しました。
ただ、保存してあるメールが膨大なため、それなりに時間がかかって
しまいます。

Outlook上で「フラグを付ける」ことがGmail上のスターを付ける
ことに対応していて、フラグを付けると程なく(数秒から1分程で)、
Gmail上でもスターが付いて、スター付きフォルダーにも表示される
ようになります。
逆にOutlook上でフラグを外すと、程なくGmail上でも反映されます。

OutlookとGmailの間で何らかの簡単な命令をやり取りをしているだけ
のようにも思えますが。。。

[ ]
RE:03304 スター付きメールNo.03312
秀まるお2 さん 18/04/30 08:56
 
 OutlookはGmail APIってのを使ってスターのコントロールをしてるのかなぁと思い
ます。

    https://developers.google.com/gmail/api/guides/?hl=ja

 そこに「Label management」って項目もあるので、APIからコントロール可能なよ
うです。

 秀丸メールでもそのAPIを使ってなんとかするのは技術的には可能かとは思います
が、プログラミングの手間が非常に大変だろうと思います。

> マクロによってスター付きメールを赤色に変えることには成功しました。
> ただ、保存してあるメールが膨大なため、それなりに時間がかかって
> しまいます。

 マクロの方でもっと改良して高速に出来るかもしれないので・・・、ちょっと時間
のある時に考えてみます。

[ ]
RE:03312 スター付きメールNo.03317
3da さん 18/05/01 10:32
 
調べて頂きありがとうございます。
やはり一筋縄では行かないようですね。

作って頂いたマクロについて要望を出させていただくと、

・赤色よりもマークの方がありがたいです。
・マクロを実行した後、各フォルダーのカーソル位置がマークを付けた
メールの最も古いものに移動してしまうので、元々のカーソル位置に
戻してもらえるとありがたいです。

> マクロの方でもっと改良して高速に出来るかもしれないので・・・、ちょっと時
>間のある時に考えてみます。

ありがとうございます。

[ ]
RE:03317 スター付きメールNo.03320
秀まるお2 さん 18/05/01 18:59
 
> ・赤色よりもマークの方がありがたいです。
> ・マクロを実行した後、各フォルダーのカーソル位置がマークを付けた
> メールの最も古いものに移動してしまうので、元々のカーソル位置に
> 戻してもらえるとありがたいです。

 そういう風にマクロを直してみましたが、見栄えはちょっと悪いです。

 検索コマンドだとどうしても選択してるメールが狂ってしまうので、それを使わず
に、「検索して一覧作成」を使うようにしました。これでメールの選択状態は壊れな
いんですが、代わりに、マクロ実行中に検索結果が出たり消えたりの点滅をします。
それが欠点ですけども、一応動作速度は高速にはなっています。

 一回試してみて欲しいです。


----------------------マクロ内容---------------------------------

    loaddll "tkinfo.dll";
    #n = dllfunc("SetJapaneseCodePageMode", 1);
    $folder = dllfuncstr("CurrentFolder");
    #n = dllfunc("DisableDraw", 1);
    $find = dllfuncstr("GetFindPack");

    #n = dllfunc("SelectFolder", "", "User\\[Gmail]\\スター付き");
    if( #n == 0 ) {
        #n = dllfunc("EnableDraw");
        #n = dllfuncstr("SetFindPack", $find);
        message "スター付きフォルダが選択できませんでした。";
        endmacro;
    }
    if( dllfunc("IsThreadView") != 0 ) {
        #n = dllfunc("SetThreadView", 0);
    }
    if( dllfunc("ViewArea") != 0 ) {
        #n = dllfunc("SetViewArea", 0);
    }
    #count = dllfunc("MailCount");
    if( #count == 0 ) {
        #n = dllfunc("SelectFolder", "", $folder);
        endmacro;
    }
    #i = 0;
    #idcount = 0;
    while( #i < #count ) {
        #n = dllfunc("SetMailIndex", #i);
        $id = dllfuncstr("CurrentHeader", "Message-Id");
        if( $id != "" ) {
            if( leftstr($id, 1) == "<" && rightstr($id, 1) == ">" ) {
                $id = midstr( $id, 1, strlen($id) - 2 );
            }
        }
        if( $id != "" ) {
            $id[#idcount] = $id;
            #idcount = #idcount + 1;
        }
        #i = #i + 1;
    }

    //マークされたメールの一覧を「検索して一覧作成」する。
    #n = dllfunc("SetFindPack", "flag=mark, subfolder=1");
    #n = dllfunc("DoGrep", "\\CurrentAccount", "受信+送信済み+ユーザー,exclu
de=" + dllfuncstr("CurrentAccount") + "\\User\\[Gmail]\\スター付き");
    #n = dllfunc("SetGrepWndTop");
    #markcount = dllfunc("MailCount");

    //一回全部のマークを取る。
    #n = dllfunc("SimulateKeyStroke", 0x23, 0, 0, 0);       //Homeキー
    #n = dllfunc("SimulateKeyStroke", 0x24, 1, 0, 0);       //Shift+Endキー
    #n = dllfunc("SetMailFlag", "mark", 0);

    #i = 0;
    while( #i < #idcount ) {
        #n = dllfunc("SetFindPack", "(\"" + dllfuncstr("YenEncode", $id[#i])
 + "\",target=person),messageidtarget=messageid");
        #n = dllfunc("SetMailIndex", 0);
        #n = dllfunc("FindDownInclude");
        if( #n != 0 ) {
            $id[#i] = "";
            #n = dllfunc("SetMailFlag", "mark", 1);
        }
        #i = #i + 1;
    }
    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("CloseGrepWnd", 1);

    #i = 0;
    #first = 1;
    while( #i < #idcount ) {
        $id = $id[#i];
        if( $id != "" ) {
            //マークしないといけないメールが見つかった。
            #n = dllfunc("SetFindPack", "(\"" + dllfuncstr("YenEncode", $id)
 + "\",target=person),messageidtarget=messageid, subfolder=1");
            if( #first ) {
                #first = 0;
                #n = dllfunc("DoGrep", "\\CurrentAccount", "受信+送信済み+
ユーザー,exclude=" + dllfuncstr("CurrentAccount") + "\\User\\[Gmail]\\スター
付き");
            } else {
                #n = dllfunc("DoGrepAppend", "\\CurrentAccount", "受信+送信
済み+ユーザー,exclude=" + dllfuncstr("CurrentAccount") + "\\User\\[Gmail]\\
スター付き");
            }
        }
        #i = #i + 1;
    }
    if( dllfunc("GrepWnd") != 0 ) {
        #n = dllfunc("SetGrepWndTop");
        #n = dllfunc("SimulateKeyStroke", 0x23, 0, 0, 0);       //Homeキー
        #n = dllfunc("SimulateKeyStroke", 0x24, 1, 0, 0);       //Shift+Endキー
        #n = dllfunc("SetMailFlag", "mark", 1);
        #n = dllfunc("SetMainWndTop");
        #n = dllfunc("CloseGrepWnd");
    }
    #n = dllfunc("SelectFolder", "", $folder);
    #n = dllfunc("SetFindPack", $find);
    #n = dllfunc("EnableDraw");


[ ]
RE:03320 スター付きメールNo.03321
3da さん 18/05/02 09:25
 
ありがとうございます。

改善点はうまく動作しているように思いますが、別の問題点がで出てきて
しまったようです。
「受信」フォルダー内にあるメールはマークされますが、それ以外の
フォルダー(Gmail上のフィルター機能でラベルを付けたものが格納される)
に入っているメールにはマークされません。

もう少し詳しく説明しますと、1回目にマクロを実行した時にはマークされた
のですが、前回のマクロで赤く色づけされたメールを手作業で色無しに
戻し、Gmail上でいくつかスターを外した後にマクロを再実行したところ、
「受信」フォルダー以外に格納されているメールにマークが付かなくなって
しまいました。

[ ]
RE:03321 スター付きメールNo.03322
秀まるお2 さん 18/05/02 10:15
 
 このマクロですが、高速化のために、同じメールが複数存在してるケースを配慮し
てませんでした。しかし、gmailの場合だと「すべてのメール」ってフォルダがある
のでどうしても複数存在してしまいます。

 で、今直しました。

 直したんですが、そんなに遅くはなりませんでした。あと、スター付きメールが0
通の時にうまく動いてないバグも直しました。

 こんなもんでどうでしょうか。

--------------------------------------------------------------------
    loaddll "tkinfo.dll";
    #n = dllfunc("SetJapaneseCodePageMode", 1);
    $folder = dllfuncstr("CurrentFolder");
    #n = dllfunc("DisableDraw", 1);
    $find = dllfuncstr("GetFindPack");

    #n = dllfunc("SelectFolder", "", "User\\[Gmail]\\スター付き");
    if( #n == 0 ) {
        #n = dllfunc("EnableDraw");
        #n = dllfuncstr("SetFindPack", $find);
        message "スター付きフォルダが選択できませんでした。";
        endmacro;
    }
    if( dllfunc("IsThreadView") != 0 ) {
        #n = dllfunc("SetThreadView", 0);
    }
    if( dllfunc("ViewArea") != 0 ) {
        #n = dllfunc("SetViewArea", 0);
    }
    #count = dllfunc("MailCount");
    #i = 0;
    #idcount = 0;
    while( #i < #count ) {
        #n = dllfunc("SetMailIndex", #i);
        $id = dllfuncstr("CurrentHeader", "Message-Id");
        if( $id != "" ) {
            if( leftstr($id, 1) == "<" && rightstr($id, 1) == ">" ) {
                $id = midstr( $id, 1, strlen($id) - 2 );
            }
        }
        if( $id != "" ) {
            $id[#idcount] = $id;
            #idcount = #idcount + 1;
        }
        #i = #i + 1;
    }

    //マークされたメールの一覧を「検索して一覧作成」する。
    #n = dllfunc("SetFindPack", "flag=mark, subfolder=1");
    #n = dllfunc("DoGrep", "\\CurrentAccount", "受信+送信済み+ユーザー,exclu
de=" + dllfuncstr("CurrentAccount") + "\\User\\[Gmail]\\スター付き");
    #n = dllfunc("SetGrepWndTop");

    //一回全部のマークを取る。
    #n = dllfunc("SimulateKeyStroke", 0x23, 0, 0, 0);       //Homeキー
    #n = dllfunc("SimulateKeyStroke", 0x24, 1, 0, 0);       //Shift+Endキー
    #n = dllfunc("SetMailFlag", "mark", 0);

    #n = dllfunc("SetMainWndTop");

    #i = 0;
    #first = 1;
    while( #i < #idcount ) {
        $id = $id[#i];
        #n = dllfunc("SetFindPack", "(\"" + dllfuncstr("YenEncode", $id) + "
\",target=person),messageidtarget=messageid, subfolder=1");
        if( #first ) {
            #first = 0;
            #n = dllfunc("DoGrep", "\\CurrentAccount", "受信+送信済み+ユー
ザー,exclude=" + dllfuncstr("CurrentAccount") + "\\User\\[Gmail]\\スター付き");
        } else {
            #n = dllfunc("DoGrepAppend", "\\CurrentAccount", "受信+送信済み+
ユーザー,exclude=" + dllfuncstr("CurrentAccount") + "\\User\\[Gmail]\\スター
付き");
        }
        #i = #i + 1;
    }
    if( #first == 0 ) {
        #n = dllfunc("SetGrepWndTop");
        #n = dllfunc("SimulateKeyStroke", 0x23, 0, 0, 0);       //Homeキー
        #n = dllfunc("SimulateKeyStroke", 0x24, 1, 0, 0);       //Shift+Endキー
        #n = dllfunc("SetMailFlag", "mark", 1);
    }
    #n = dllfunc("SetMainWndTop");
    #n = dllfunc("CloseGrepWnd");
    #n = dllfunc("SelectFolder", "", $folder);
    #n = dllfunc("SetFindPack", $find);
    #n = dllfunc("EnableDraw");

[ ]
RE:03322 スター付きメールNo.03323
3da さん 18/05/02 10:51
 
迅速なご対応ありがとうございます。

今度は上手く動いています。動作も十分に速いです。
しばらくこれで使ってみます。
重ね重ね感謝いたします。

[ ]