[ 新規に投稿する ]

返信時、元メールの宛先から差出人アドレスを自動設定する方法No.11776
おじさん さん 23/09/11 18:18 [ コメントを投稿する ]
  Yahooメールのセーフティーアドレスをを使用し
相手によって自分のメアドを使い分けています。

どのメアドにするかは、新規にメールを作成する際は
自分で選択するしかありませんが、
返信メール・転送メールの際は、元メールの宛先から
返信・転送メールの差出人メアドを自動設定できると
ありがたいと考えています。

具体的には、
返信メール・転送メール作成のボタンを押した際、
元メールのto,ccにあるメアドから自分の物であるメアド
(アカウントの設定〜個人情報〜詳細〜自分用のメールアドレスの別名で登録されているもの、あるいはマクロ等で保持してもよい)を探索し、
合致した物があればそれを差出人メアドに設定する
のような動作を想定しています。

このような機能あるいはマクロ等はありますでしょうか。

どうぞよろしくお願いします。

秀丸メール7.20
W10home
[ ]
RE:11776 返信時、元メールの宛先から差出人アドレスを自動設No.11777
秀まるお2 さん 23/09/11 18:50 [ コメントを投稿する ]
   Yahooのその「セーフティーアドレス」を僕も作ってテストしてみました。これは便利かもしれません。

 マクロは僕の方で作ってみます。

 その前に、「アカウント毎の設定」の「個人情報 - 詳細」のページに「自分用メールアドレスの別名」って設定があります。そこにセーフティーアドレスを登録しておくのがお勧めです。マクロもそこに登録してある前提で作ろうかなぁと思います。完成したらここに書き込みさせていただきます。少々お待ちください。
[ ]
RE:11777 返信時、元メールの宛先から差出人アドレスを自動設No.11778
おじさん さん 23/09/12 09:35 [ コメントを投稿する ]
  早速ご対応いただけるとのこと、毎々ありがとうございます。

> 「アカウント毎の設定」の「個人情報 - 詳細」のページに「自分用メールアドレスの別名」って設定があります。そこにセーフティーアドレスを登録しておくのがお勧めです。

登録済みです。

> マクロもそこに登録してある前提で作ろうかなぁと思います。

その方法のほうが、自分のメアドをマクロ内に保持するよりも扱いやすく、
助かります。

どうぞよろしくお願いいたします。
[ ]
RE:11778 返信時、元メールの宛先から差出人アドレスを自動設No.11779
秀まるお2 さん 23/09/12 11:00 [ コメントを投稿する ]
   マクロできました。「マクロ - マクロ登録...」の「自動起動」ページの「送信用のエディタ起動時」の所に登録するか、または返信用/転送用のテンプレートに

   $(ExecMacro,"From書き換え.mac")$-

 みたいな命令を入れて使ってみてほしいです。

 うまく動かない場合は、

   //message "....";

 となってる所の「//」を取ってメッセージ表示させると、何か解決のヒントが分かると思います。

                #n = dllfunc("SetHeader", "From", $from);

 の所は、

                #n = dllfunc("SetHeader", "From", $hit);

 のようにしてもいいかもしれません。そうするとFrom:ヘッダはメールアドレスのみになります。あえてそういう返信の仕方をした方がいいかもしれません。


---------------------------------------------Fromヘッダを別名に変更.mac-----------------------
    loaddll "tkinfo.dll";
    #n = dllfunc("LoadAccountProp", dllfuncstr("CurrentAccount"));
    $alias = dllfuncstr("GetAccountProp", "szEmailAlias");
    if( $alias == "" ) {
        message "このマクロを実行するには「アカウント毎の設定・個人情報・詳細」の「自分用メールアドレスの別名」にご自身のセーフティーアドレスを登録してください。";
        endmacro;
    }
    $alias = "," + dllfuncstr("GetAccountProp", "szEmail") + "," + $alias + ",";        //自分自身のメールアドレスを前後にコンマが入る形の文字列にする。
    $to = dllfuncstr("RootHeaderUnited", "To") + "," + dllfuncstr("RootHeaderUnited", "Cc");
    if( $to == "," ) {
        //返信メールでも転送メールでも無い場合
        //message "返信メールでも転送メールでも無い";
        endmacro;
    }
    #i = 0;
    #count = dllfunc("CountEmailList", $to);
    while( #i < #count ) {
        $one = dllfuncstr("GetEmailList", $to, #i);
        $one = dllfuncstr("SetEmailOnly", $one);
        $one = "," + $one + ",";
        #x = strstr( $alias, $one );
        if( #x >= 0 ) {
            if( #x == 0 ) {
                //メインのメールアドレスなら何もしない。
                //message "メインのメールアドレス";
            } else {
                //message "From:ヘッダ書き換え";
                $hit = midstr( $alias, #x + 1 );
                $hit = leftstr( $hit, strstr( $hit, "," ) );
                $name = dllfuncstr("SetNameOnly", dllfuncstr("CurrentHeader", "From"));
                if( $name == "" ) {
                    $from = $hit;
                } else {
                    $from = $name + " <" + $hit + ">";
                }
                #n = dllfunc("SetHeader", "From", $from);
            }
            endmacro;;
        }
        #i = #i + 1;
    }
    //message "自分のメールアドレス見つからず。";
[ ]
RE:11779 返信時、元メールの宛先から差出人アドレスを自動設No.11780
おじさん さん 23/09/12 17:29 [ コメントを投稿する ]
  早々とありがとうございます。

お作りいただいたもので、動作確認しました。
まさに希望通りの動作です!

#四半世紀以上前に4000円払っただけで
#素晴らしいエディタとメーラーが使え
#それらのバージョンアップと
#このような手厚いサポートまでしていただき
#本当に感謝しています。
[ ]
RE:11780 返信時、元メールの宛先から差出人アドレスを自動設No.11781
秀まるお2 さん 23/09/13 07:47 [ コメントを投稿する ]
   1つバグがありました。To:ヘッダの中のメールアドレスに大文字が混じってるとうまく動きませんでした。改良版を書き込みます。

----------------------------------------------------------------------------
    loaddll "tkinfo.dll";
    #n = dllfunc("LoadAccountProp", dllfuncstr("CurrentAccount"));
    $alias = dllfuncstr("GetAccountProp", "szEmailAlias");
    if( $alias == "" ) {
        message "このマクロを実行するには「アカウント毎の設定・個人情報・詳細」の「自分用メールアドレスの別名」にご自身のセーフティーアドレスを登録してください。";
        endmacro;
    }
    $alias = "," + dllfuncstr("GetAccountProp", "szEmail") + "," + $alias + ",";        //自分自身のメールアドレスを前後にコンマが入る形の文字列にする。
    $alias = dllfuncstr("ToLower", $alias);
    $to = dllfuncstr("RootHeaderUnited", "To") + "," + dllfuncstr("RootHeaderUnited", "Cc");
    $to = dllfuncstr("ToLower", $to);
    if( $to == "," ) {
        //返信メールでも転送メールでも無い場合
        //message "返信メールでも転送メールでも無い";
        endmacro;
    }
    #i = 0;
    #count = dllfunc("CountEmailList", $to);
    while( #i < #count ) {
        $one = dllfuncstr("GetEmailList", $to, #i);
        $one = dllfuncstr("SetEmailOnly", $one);
        $one = "," + $one + ",";
        #x = strstr( $alias, $one );
        if( #x >= 0 ) {
            if( #x == 0 ) {
                //メインのメールアドレスなら何もしない。
                //message "メインのメールアドレス";
            } else {
                //message "From:ヘッダ書き換え";
                $hit = midstr( $alias, #x + 1 );
                $hit = leftstr( $hit, strstr( $hit, "," ) );
                $name = dllfuncstr("SetNameOnly", dllfuncstr("CurrentHeader", "From"));
                if( $name == "" ) {
                    $from = $hit;
                } else {
                    $from = $name + " <" + $hit + ">";
                }
                #n = dllfunc("SetHeader", "From", $from);
            }
            endmacro;;
        }
        #i = #i + 1;
    }
    //message "自分のメールアドレス見つからず。";
[ ]
RE:11781 返信時、元メールの宛先から差出人アドレスを自動設No.13795
おじさん さん 25/09/09 10:43 [ コメントを投稿する ]
  古い話ですみません。
以前作っていただいた、
「返信・転送時に差出人を元メールの宛先に書き換える」
マクロについて、
「添付ファイルとして転送」時にも有効となるようにできないでしょうか。

「添付ファイルとして転送」時には新規メールのテンプレが使われるとのことで、
新規メールのテンプレにいただいたマクロを登録したところ、
下記の部分で"返信メールでも転送メールでも無い"となってしまいます。

>    $to = dllfuncstr("RootHeaderUnited", "To") + "," + dllfuncstr("RootHeaderUnited", "Cc");
>    if( $to == "," ) {
>        //返信メールでも転送メールでも無い場合
>        //message "返信メールでも転送メールでも無い";

添付ファイルとして転送時には、転送元メールは複数添付可能なため、
「どの転送元メールの宛先を使うか?」となるかもしれませんが、
最初に「添付ファイルとして転送」とした際の元メールの宛先で
良いと思います。

よろしくご検討のほどお願いいたします。

[ ]
RE:13795 返信時、元メールの宛先から差出人アドレスを自動設No.13798
秀まるお2 さん 25/09/09 13:01 [ コメントを投稿する ]
  「添付ファイルとして転送」の場合に転送元メールのTo:ヘッダを認識することは困難です。

「添付ファイルとして転送」の場合、転送元メールのTo:ヘッダなどをdllfuncで簡単に取得する仕組みが無いです。しいてやるとしたら、添付ファイルをテキストデータとして読み込んでその中から文字列を探して処理するしか無いと思います。

「添付ファイルとして転送」で生成される添付ファイルは、いわゆる「エンコード」がかかってしまってるのと、あと、文字コードもJISとかUTF-8とかどっちもありえます。そういうファイルの中のTo:ヘッダを認識してってのはちょっと難しいです。

やってやれないことは無いですが、技術的に困難なのと、たぶんメールによってはうまく動かないケースも起きるような中途半端なマクロしか作れない気がします。

とりあえず大変なので僕が作るのはご勘弁ください。
[ ]
RE:13798 返信時、元メールの宛先から差出人アドレスを自動設No.13799
秀まるお2 さん 25/09/09 13:22 [ コメントを投稿する ]
  っと書いた所ですが、無理矢理To:ヘッダを見て動くマクロにしてみました。ただ、ちゃんと動くかどうかは怪しいです。

ダメモトで試していただくといいかもしれません。

-----------------------------------------------------------------------------------------
    #n = dllfunc("LoadAccountProp", dllfuncstr("CurrentAccount"));
    $alias = dllfuncstr("GetAccountProp", "szEmailAlias");
    if( $alias == "" ) {
        message "このマクロを実行するには「アカウント毎の設定・個人情報・詳細」の「自分用メールアドレスの別名」にご自身のセーフティーアドレスを登録してください。";
        endmacro;
    }

    if( dllfunc("MailType") == 6 ) {        //添付ファイルとして転送の場合
        $attach = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") + "\\" + dllfuncstr("CurrentHeader", "X-Attach");
        $text = dllfuncstr("LoadStringFromFile", $attach );
        if( strlen($text) > 0 ) {
            $text = dllfuncstr("ToLower", $text);
            #to = strstr( $text, "\nto:" );
            if( #to != 0 ) {
                $text = midstr( $text, #to + 4 );
                #end = strstr( $text, "\n" );
                if( #end > 0 ) {
                    $text = leftstr( $text, #end );
                }
                #x = strstr( $text, $alias );
                if( #x >= 0 ) {
                    //別名が見つかった場合
                    $name = dllfuncstr("SetNameOnly", dllfuncstr("CurrentHeader", "From"));
                    if( $name == "" ) {
                        $from = $alias;
                    } else {
                        $from = $name + " <" + $alias + ">";
                    }
                    #n = dllfunc("SetHeader", "From", $from);
                }
            }
        }
        endmacro;
    }

    $alias = "," + dllfuncstr("GetAccountProp", "szEmail") + "," + $alias + ",";        //自分自身のメールアドレスを前後にコンマが入る形の文字列にする。
    $alias = dllfuncstr("ToLower", $alias);
    $to = dllfuncstr("RootHeaderUnited", "To") + "," + dllfuncstr("RootHeaderUnited", "Cc");
    $to = dllfuncstr("ToLower", $to);
    if( $to == "," ) {
        //返信メールでも転送メールでも無い場合
        //message "返信メールでも転送メールでも無い";
        endmacro;
    }

    #count = dllfunc("CountEmailList", $to);
    while( #i < #count ) {
        $one = dllfuncstr("GetEmailList", $to, #i);
        $one = dllfuncstr("SetEmailOnly", $one);
        $one = "," + $one + ",";
        #x = strstr( $alias, $one );
        if( #x >= 0 ) {
            if( #x == 0 ) {
                //メインのメールアドレスなら何もしない。
                //message "メインのメールアドレス";
            } else {
                //message "From:ヘッダ書き換え";
                $hit = midstr( $alias, #x + 1 );
                $hit = leftstr( $hit, strstr( $hit, "," ) );
                $name = dllfuncstr("SetNameOnly", dllfuncstr("CurrentHeader", "From"));
                if( $name == "" ) {
                    $from = $hit;
                } else {
                    $from = $name + " <" + $hit + ">";
                }
                #n = dllfunc("SetHeader", "From", $from);
            }
            endmacro;
        }
        #i = #i + 1;
    }
    //message "自分のメールアドレス見つからず。";
[ ]

[ 新規に投稿する ]