RE:11781 返信時、元メールの宛先から差出No.13795
おじさん さん 25/09/09 10:43
 
古い話ですみません。
以前作っていただいた、
「返信・転送時に差出人を元メールの宛先に書き換える」
マクロについて、
「添付ファイルとして転送」時にも有効となるようにできないでしょうか。

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

>    $to = dllfuncstr("RootHeaderUnited", "To") + "," + dllfuncstr("RootHead
>erUnited", "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("CurrentHea
der", "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("RootHeade
rUnited", "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 "自分のメールアドレス見つからず。";

[ ]
RE:13799 返信時、元メールの宛先から差出No.13810
おじさん さん 25/09/14 14:29
 
秀まるお2様

早速のお返事ありがとうございます。

ご教示いただいた方法をもとにいろいろ試してみましたが、
やはり難しそうです。

まず、下記を変更しました。
18:                 $text = leftstr( $text, #end );
→                  $text = leftstr( $text, #end - 1 );

20:              #x = strstr( $text, $alias );
→               #x = strstr( $alias, $text );

25:                     $from = $alias;
→                      $from = $text;

27:                     $from = $name + " <" + $alias + ">";
→                      $from = $name + " <" + $text + ">";

元メールの宛先が、1つだけ かつ メアドのみの場合(xx@xx.com)はうまく動作します。
ただ、複数あったり、不等号で囲まれていたり名前等がついている場合(<xx@xx.com>
 や Hoge <xx@xx.com> や "Hoge" <xx@xx.com>)は
20行目のstrstrで見つけられず、動作しません。

これらを文字列処理で対応するのも大変そうな気がします。
今回は諦めます。

お忙しいところありがとうございました。
♯秀丸(鶴亀)エディタを使い始めて今年で30年が経ちました。感謝感謝です!

[ ]
RE:13810 返信時、元メールの宛先から差出No.13811
秀まるお2 さん 25/09/15 10:40
 
マクロいろいろ試してもらっても限界があるということで・・・

次の秀丸メールのVersion 7.41β7にて、「添付ファイルとして転送」の時でも、転
送するメールが1通だけの場合に限って、RootHeaderUnitedなどを使えるようにして
みます。

「添付ファイルとして転送」で転送するメール(選択してるメール)が2通以上だと
ダメですけども。

マクロは元のマクロのままで一応うまく動くようになると思います。

転送するメールが2通以上ある場合でも、その中のランダムに1通だけ選択してそれ
を転送元とするような処理なら簡単に対応可能ではありますが、そんな変な仕様でも
いいのかという気もします。なのでとりあえずやめときます。

[ ]