【要望】転送時のアドレス重複確認方法にNo.01013
TATE2 さん 08/05/10 15:24
 
秀まるおさん

TATEです。

最近、メールの使い方が少し変わってきて、複数人に向けて送られて
くるメールを、またあるグループ全員に転送するようなことがよくあ
ります。

この時、最初に送られてきたメールがあるグループの人にも送られて
いることがあり、小生が転送するとその人はメールを重複して受け取
ることになります。

このような場合、送られてきたメールの送付先アドレスと、下名が
転送しようとする送付先アドレスを比較し、重複している人を見つけ
られるような技(マクロ等)はないものでしょうか?

具体的には、仮に送られてきたメールは50人に送付されていて、
小生の転送先が10人とした場合、その50人の中に10人の中の
3人はいっていれば、その3人のアドレスをピックアップしたいと考
えていますが、いかがなものでしょうか?
何かよい方法があればよいのですが。。。。

よろしくお願いします。


[ ]
RE:01013 【要望】転送時のアドレス重複確No.01020
秀まるお さん 08/05/12 09:14
 
 マクロでなんとか出来るとは思います。

 CurrentHeaderのTo:とRootHeaderのTo:を比較して、何か共通するメールアド
レスがあれば、それをCurrentHeaderのTo:から除外するとかって処理をすればい
いんじゃないかと思います。

 誰かそういうのを作ってくれたらいいんじゃないかと思いますけど。

 僕が作ってもいいですけど。

[ ]
RE:01020 【要望】転送時のアドレス重複確No.01027
siniti さん 08/05/12 20:47
 
> マクロでなんとか出来るとは思います。
>
> CurrentHeaderのTo:とRootHeaderのTo:を比較して、何か共通するメールアド
>レスがあれば、それをCurrentHeaderのTo:から除外するとかって処理をすればい
>いんじゃないかと思います。
>
> 誰かそういうのを作ってくれたらいいんじゃないかと思いますけど。
>
> 僕が作ってもいいですけど。

あれば、私も使いたいです。

[ ]
RE:01020 【要望】転送時のアドレス重複確No.01029
TATE2 さん 08/05/12 21:13
 
TATEです。

小生にもう少し時間とセンスがあればマクロもチャレンジしたい
ですが、ここは有志の方にお任せしたいところです。

メールアドレスの比較としては、送られてきたメールのToとCc
のメールアドレスとアドレス帳のあるグループのメールアドレスとを
比較し、重複しているアドレスだけを表示するという機能もいいかな
と思います。

個人的な要望ですが、いかがでしょうか?



[ ]
RE:01029 【要望】転送時のアドレス重複確No.01030
秀まるお さん 08/05/13 10:58
 
 マクロ作ってみました。ちょっと長いですけど。

 自動整形もします。

 アドレス帳のGroup(/...)のような形式には対応していませんけど。


    loaddll "tkinfo.dll";
    call RetrieveRootEmail, "To";
    $root = $$return;
    call RetrieveRootEmail, "Cc";
    $root = $root + $$return;
    call CheckEmail, "To";
    call CheckEmail, "Cc";
    endmacro;

CheckEmail:
    ##c = dllfunc("CountCurrentHeader", $$1);
    ##i = 0;
    while( ##i < ##c ) {
        $$to = dllfuncstr("CurrentHeader2", $$1, ##i);
        ##iEmail = 0;
        ##cEmail = dllfunc("CountEmailList", $$to);
        while( ##iEmail < ##cEmail ) {
            $$one = dllfuncstr("GetEmailList", $$to, ##iEmail );
            $$email = dllfuncstr("SetEmailOnly", $$one );
            if( $$email != "" ) {
                if( strstr( $root, "{" + $$email + "}" ) >= 0 ) {
                    question "同じ人に転送しようとしています。\n"
                        + "メールアドレス = " + $$email + "\n\n"
                        + "この人を宛先から除去しますか?";
                    if( result == yes ) {
                        call DeleteEmail $$1, ##i, $$one;
                    }
                }
            }
            ##iEmail = ##iEmail + 1;
        }
        ##i = ##i + 1;
    }
return;

DeleteEmail:
    $$to = dllfuncstr("CurrentHeader2", $$1, ##2);
    ##x = strstr( $$to, $$3 );
    if( ##x >= 0 ) {
        $$to1 = leftstr( $$to, ##x );
        $$to2 = midstr( $$to, ##x + strlen($$3), 9999);
        while( leftstr( $$to2, 1 ) == " " ) {
            $$to2 = midstr( $$to2, 1, 9999);
        }
        if( leftstr( $$to2, 1 ) == "," ) {
            $$to2 = midstr( $$to2, 1, 9999);
        }
        while( leftstr( $$to2, 1 ) == " " ) {
            $$to2 = midstr( $$to2, 1, 9999);
        }
        $$to = $$to1 + $$to2;
        while( rightstr( $$to, 1 ) == " " ) {
            $$to = leftstr( $$to, strlen($$to) - 1 );
        }
        if( rightstr(  $$to, 1 ) == "," ) {
            $$to = leftstr( $$to, strlen($$to) - 1 );
        }
        while( rightstr( $$to, 1 ) == " " ) {
            $$to = leftstr( $$to, strlen($$to) - 1 );
        }
        ##n = dllfunc("SetHeader2", $$1, $$to, ##2);
    }
return;


RetrieveRootEmail:
    ##c = dllfunc("CountRootHeader", $$1);
    ##i = 0;
    while( ##i < ##c ) {
        $$to = dllfuncstr("RootHeader2", $$1, ##i);
        ##iEmail = 0;
        ##cEmail = dllfunc("CountEmailList", $$to);
        while( ##iEmail < ##cEmail ) {
            $$email = dllfuncstr("GetEmailList", $$to, ##iEmail );
            $$email = dllfuncstr("SetEmailOnly", $$email );
            if( $$email != "" ) {
                $$ret = $$ret + "{" + $$email + "}";
            }
            ##iEmail = ##iEmail + 1;
        }
        ##i = ##i + 1;
    }
return $$ret;

[ ]
RE:01030 【要望】転送時のアドレス重複確No.01032
TATE2 さん 08/05/13 19:12
 
TATEです。

ご多忙の折、お手数をお掛けし恐縮です。
今まで1つ1つチェックしていたことを考えれば、はるかに
楽で間違いも起きないので大変助かります。


早々にご対応いただき誠にありがとうございました。
このマクロを利用させていただきます。



[ ]
RE:01030 【要望】転送時のアドレス重複確No.01034
siniti さん 08/05/14 00:26
 
> マクロ作ってみました。ちょっと長いですけど。

ありがとうございます。
「送信用エディタ起動時」に早速マクロ登録しました。
これは便利です。
いちいちアドレスの重複をチェックする必要がなくなりました。

[ ]
RE:01034 【要望】転送時のアドレス重複確No.01036
秀まるお さん 08/05/14 09:29
 
 ちなみにですけど、このマクロは転送メールで実行される前提になってしまっ
てるので、返信メールで実行すると余計な警告が出たりするかもしれません。

 マクロの先頭のloaddllの次に、

    if( dllfunc("MailType") != 2 ) {
        endmacro;
    }

 を入れた方がいいかもしれません。

[ ]
RE:01032 【要望】転送時のアドレス重複確No.01039
TATE2 さん 08/05/14 19:39
 
秀まるおさん

TATEです。

マクロを便利に使用させていただいています。
1つ要望なのですが、ご検討いただければ助かります。

現在のマクロは、アドレスが重複していた場合、送付先から入力
要求によっては削除していただいていますが、後から念のため確認
したいこともありますので、できれば削除せず、例えばBccに
移動するようなことは可能でしょうか?


マクロをご提供いただき恐縮なのですが、ご検討よろしくお願い
します。




[ ]
RE:01039 【要望】転送時のアドレス重複確No.01041
秀まるお さん 08/05/15 13:48
 
 ならば、こんな風にしたらいいかと思います。

    loaddll "tkinfo.dll";
    if( dllfunc("MailType") != 2 ) {
        endmacro;
    }
    call RetrieveRootEmail, "To";
    $root = $$return;
    call RetrieveRootEmail, "Cc";
    $root = $root + $$return;
    call CheckEmail, "To";
    call CheckEmail, "Cc";
    if( $bcc != "" ) {
        #n = dllfunc("AddHeader", "Bcc:", $bcc );
    }
    endmacro;

CheckEmail:
    ##c = dllfunc("CountCurrentHeader", $$1);
    ##i = 0;
    while( ##i < ##c ) {
        $$to = dllfuncstr("CurrentHeader2", $$1, ##i);
        ##iEmail = 0;
        ##cEmail = dllfunc("CountEmailList", $$to);
        while( ##iEmail < ##cEmail ) {
            $$one = dllfuncstr("GetEmailList", $$to, ##iEmail );
            $$email = dllfuncstr("SetEmailOnly", $$one );
            if( $$email != "" ) {
                if( strstr( $root, "{" + $$email + "}" ) >= 0 ) {
                    question "同じ人に転送しようとしています。\n"
                        + "メールアドレス = " + $$email + "\n\n"
                        + "この人を宛先から除去しますか?";
                    if( result == yes ) {
                        if( $bcc == "" ) {
                            $bcc = $$one;
                        } else {
                            $bcc = $bcc + ", " + $$one;
                        }
                        call DeleteEmail $$1, ##i, $$one;
                    }
                }
            }
            ##iEmail = ##iEmail + 1;
        }
        ##i = ##i + 1;
    }
return;

DeleteEmail:
    $$to = dllfuncstr("CurrentHeader2", $$1, ##2);
    ##x = strstr( $$to, $$3 );
    if( ##x >= 0 ) {
        $$to1 = leftstr( $$to, ##x );
        $$to2 = midstr( $$to, ##x + strlen($$3), 9999);
        while( leftstr( $$to2, 1 ) == " " ) {
            $$to2 = midstr( $$to2, 1, 9999);
        }
        if( leftstr( $$to2, 1 ) == "," ) {
            $$to2 = midstr( $$to2, 1, 9999);
        }
        while( leftstr( $$to2, 1 ) == " " ) {
            $$to2 = midstr( $$to2, 1, 9999);
        }
        $$to = $$to1 + $$to2;
        while( rightstr( $$to, 1 ) == " " ) {
            $$to = leftstr( $$to, strlen($$to) - 1 );
        }
        if( rightstr(  $$to, 1 ) == "," ) {
            $$to = leftstr( $$to, strlen($$to) - 1 );
        }
        while( rightstr( $$to, 1 ) == " " ) {
            $$to = leftstr( $$to, strlen($$to) - 1 );
        }
        ##n = dllfunc("SetHeader2", $$1, $$to, ##2);
    }
return;


RetrieveRootEmail:
    ##c = dllfunc("CountRootHeader", $$1);
    ##i = 0;
    while( ##i < ##c ) {
        $$to = dllfuncstr("RootHeader2", $$1, ##i);
        ##iEmail = 0;
        ##cEmail = dllfunc("CountEmailList", $$to);
        while( ##iEmail < ##cEmail ) {
            $$email = dllfuncstr("GetEmailList", $$to, ##iEmail );
            $$email = dllfuncstr("SetEmailOnly", $$email );
            if( $$email != "" ) {
                $$ret = $$ret + "{" + $$email + "}";
            }
            ##iEmail = ##iEmail + 1;
        }
        ##i = ##i + 1;
    }
return $$ret;

[ ]
RE:01041 【要望】転送時のアドレス重複確No.01042
TATE2 さん 08/05/15 18:01
 
TATEです。

> ならば、こんな風にしたらいいかと思います。

 早々にご対応ありがとうございました。
 作業性もよくなり、とても便利になりました。




[ ]