件名で送信先ドメインを固定No.44967
stone さん 13/09/17 16:02
 

件名に「発注」とかの文字がある場合に、送信先のドメインを(特定のドメイン.
co.jpのような)固定もしくは警告メッセージを出すようなマクロはありませんか。
ご存知の方教えてください。
送信前に、宛先を確認するのは見つけたのですが、件名とからめて、送信先や送
信元を制限するようなものを見つけられませんでした。

--
stone

[ ]
RE:44967 件名で送信先ドメインを固定No.44969
秀まるお2 さん 13/09/17 16:30
 
 ライブラリの中を探した訳ではないのですが、たぶん目的のことをするには
マクロを作るしか無いと思います。

 マクロの内容はそんなには難しくないと思います。例えば、

    loaddll "tkinfo.dll";
    $subject = dllfuncstr("CurrentHeader", "Subject");
    $to = dllfuncstr("CurrentHeader", To");

    if( $subject == "テスト" ) {
        if( $to != "xxx@xxx.xx" ) {
            message "件名がテストですが宛先がxxx@xx.xxじゃありません。";
            #n = dllfunc("SetCancel", 1);
        }
    }

 みたいな感じで、Subject:ヘッダの内容とTo:ヘッダの内容をチェックしてエ
ラーメッセージを表示させつつ、SetCancel関数でメールの送信を抑止してしま
えばいいです。そういうマクロを「マクロ・マクロ登録...」の「自動起動」
ページ中の「あとで送信/今すぐ送信時」に登録すれば、送信する時点でチェッ
クしてくれます。

 あと他に、「特定件名+特定宛先のメールを頻繁に使う」ってことだと、そう
いうのはテンプレートの仕事になります。

 テンプレートの例としては、例えば

$(NoWarningHeaderUpdate)$-
$(SetHeader,Subject,"テスト")$-
$(SetHeader,To,"xxx@xx.xx")$-

 みたいな命令を入れておく形になります。テンプレートを呼び出す方法として
は、ツールバーの「新規メール」アイコン右側の「▼」ボタンから呼び出す方法
や、アカウント毎設定/フォルダ毎設定/アドレス帳のメンバーに登録しておく方
法、マクロから呼び出す方法、などがあります。

[ ]
RE:44969 件名で送信先ドメインを固定No.44973
stone さん 13/09/18 10:24
 

]     if( $subject == "テスト" ) {
]         if( $to != "xxx@xxx.xx" ) {

ありがとうございます。早速使ってみましたが、上記の形では、「今日はテスト
です」ではすんなり送信できてしまいます。"テスト"を含む件名すべてを対象に
したいのです。 また、宛先も"xxx@xxx.xx"だけでなく@xxx.xxを含むアドレスす
べてを対象にしたいのですが、どうしたらよいでしょうか。よろしくお願いしま
す。

--
stone

[ ]
RE:44973 件名で送信先ドメインを固定No.44974
秀まるお2 さん 13/09/18 11:16
 
> "テスト"を含む件名すべてを対象にしたいのです。

 "テスト"を含む場合すべてにしたい場合は、

    if( strstr( $subject, "テスト" ) >= 0 ) {

 のような条件判定にすればいいです。

 もしも大文字/小文字の区別無しで検索したい場合、例えば

    Test
    test
    TEST

 のどれでもヒットするようにってことなら、

    $subject = dllfuncstr("ToLower", $subject);
    if( strstr( $subject, "test" ) >= 0 ) {

 のようにすればいいです。

> また、宛先も"xxx@xxx.xx"だけでなく@xxx.xxを含むアドレスすべてを対象にしたい

 @xxx.xxだとわかりにくいので"@xxx.yy"の例でお返事させていただきますと…

 少し不正確でも良ければ、

    $to = dllfuncstr("ToLower", $to);
    if( strstr( $to, "@xxx.yy" ) >= 0 ) {

 のような判定にする作戦があります。ただしこれだと、"@xxx.yy"の文字列を
含む物すべてが対象になるので、例えば「@xxx.yy.zz」のようなドメインが別に
あったとすると、それもヒットします。あと、もしかして名前の部分に
「@xxx.yy」があるとそれもヒットするので、例えば

   "Aさん@xxx.yy" <xxxx@xxx.xx.xx.xx>

 のような名前の人がいるとそれも間違ってヒットします。

 そういう不完全な所があっても良ければ上記strstr作戦でいけます。

 完全に正しくマッチングが必要でしたらもっと長いマクロになります。必要で
したらそれもお返事可能です。

 あと1つありました。To:ヘッダがもしも:

  To: aaa
  To: bbb
  To: ccc

 のようになっている時にも対応するには、

    $to = dllfuncstr("CurrentHeader", To");

 の所を

    $to = dllfuncstr("CurrentHeaderUnited", To");

 にしないとダメです。ただ、このCurrentHeadedrUnited関数はVersion 6.16β
でないと使えないです。あと、cc:/bcc:ヘッダも含めてテストするなら、

    $to = dllfuncstr("CurrentHeaderUnited", To") + ","
        + dllfuncstr("CurrentHeaderUnited", Cc") + ","
        + dllfuncstr("CurrentHeaderUnited", Bcc");

 とすればいいです。

 ということでどうでしょうか。

[ ]
RE:44974 件名で送信先ドメインを固定No.44975
stone さん 13/09/18 11:51
 

    loaddll "tkinfo.dll";
    $subject = dllfuncstr("CurrentHeader", "Subject");
    $to = dllfuncstr("CurrentHeader", "To");

    if( strstr( $subject, "テスト" ) >= 0 ) {
         $to = dllfuncstr("ToLower", $to);
    if( strstr( $to, "@xxx.yy" ) >= 0 ) {
            message "件名がテストを含みますが宛先が@xxx.yyではない相手に
なっています。";
            #n = dllfunc("SetCancel", 1);
           
件名のなかの対象は日本語の単語なので、上記で大丈夫ですが、宛先(To)に関し
ては、@xxx.yy含んでいない場合、

件名:テスト の単語を含む
宛先:@xxx.yy を含まない宛先の時

に"件名がテストを含みますが宛先が@xxx.yyではない相手になっています。"
と言うメッセージを出したいのです。

上記では、宛先に@xxx.yyを含む場合にメッセージが出てしまいます。

あと、贅沢をいいますが、送信キャンセルで終わるのではなく、強行送信できる
バージョンがあると助かります。

--
stone

[ ]
RE:44975 件名で送信先ドメインを固定No.44976
stone さん 13/09/18 12:03
 

] 件名のなかの対象は日本語の単語なので、上記で大丈夫ですが、宛先(To)に関
] し
] ては、@xxx.yy含んでいない場合、
]
] 件名:テスト の単語を含む
] 宛先:@xxx.yy を含まない宛先の時
]
] に"件名がテストを含みますが宛先が@xxx.yyではない相手になっています。"
] と言うメッセージを出したいのです。

すいません。もう少し補足させていただきます。

To:xxx@xxx.yy,xxx@xxx.yy,xxx@xxx.yy,xxx@zzz.yy

のように、@xxx.yyでない@zzz.yyが含まれた場合は、メッセージを出してほしい
です。要は、テストの文字を含む件名の場合は、@xxx.yyドメイン以外の宛先に
出したくないと言うことです。

--
stone


---以下の内容はコミュニテックス会議室システムにより付加されました。
本文中のメールアドレスは伏せ字に変換されました。伏せ字にしたくない場合
はメールアドレスを""で囲んで書き込んでください。

[ ]
RE:44976 件名で送信先ドメインを固定No.44977
秀まるお2 さん 13/09/18 13:51
 
> To:xxx@xxx.yy,xxx@xxx.yy,xxx@xxx.yy,xxx@zzz.yy
>
> のように、@xxx.yyでない@zzz.yyが含まれた場合は、メッセージを出してほしい
> です。

 すみません。最初の話を忘れてました。

 メールアドレスを1つ1つ正確に判断する作戦でないと無理そうな気がするの
で、その例を書かせていただきます。Subjectの判定をする部分も含めて全部書
いてみます。

--------------------------------------------------------------------
    loaddll "tkinfo.dll";
    $subject = dllfuncstr("CurrentHeader", "Subject");
    if( strstr( $subject, "テスト" ) < 0 ) {
        // 件名に"テスト"を含まない場合はそのままマクロ終了。
        endmacro;
    }
    $to = dllfuncstr("CurrentHeader", "To");
    #count = dllfunc("CountEmailList", $to);
    #i = 0;
    #found = 0;
    while( #i < #count ) {
        $email = dllfuncstr("GetEmailList", $to, #i);
        $email = dllfuncstr("SetEmailOnly", $email);
        $email = dllfuncstr("ToLower", $email);
        $domain = midstr( $email, strstr($email,"@") );
        if( $domain != "@xxx.yy" ) {
            #found = 1;
            break;
        }
        #i = #i + 1;
    }
    if( #found == 0 ) {
        //宛先が@xxx.yyのみならマクロ終了。
        endmacro;
    }
    #n = dllfunc("Bypass_MessageBox", hidemaruhandle(0)
          , "件名に「テスト」を含んでいて、宛先に@xxx.yy以外" +
            "のメールアドレスが存在します。中止ボタンを押して" +
            "宛先を確認してください。"
          , "宛先確認マクロの警告メッセージ"
          , 0x10 + 2 );
    if( #n == 5 ) {
        //無視ボタンを押した場合
        question "警告を無視して送信してもかまいませんか?\n" +
                 "(最終確認)";
        if( result != yes ) {
            #n = dllfunc("SetCancel", 1);
        }
        endmacro;
    }
    // 中断 / 再試行ボタンを押した場合
    #n = dllfunc("SetCancel", 1);
    endmacro;
--------------------------------------------------------------------

 という感じでどうでしょうか。

 dllfunc/dllfuncstrで呼び出してる関数については、「ヘルプ」メニューの
「秀丸メール・マクロヘルプ」の方に意味が書いてあるので、それが参考になる
と思います。


 あと、前回の話にあった

To: aaa
To: bbb
To: ccc

 のような書き方をされてる場合対応するなら、上記マクロの

    $to = dllfuncstr("CurrentHeader", "To");

 の所を

    $to = dllfuncstr("CurrentHeaderUnited", "To");

 にすればいいです。(ただし秀丸メールはV6.16β以上でないとダメ)

[ ]
RE:44977 件名で送信先ドメインを固定No.44978
stone さん 13/09/18 14:46
 

ありがとうございます。バッチリ思うような機能になりました。秀丸メールを使
っていてほんとに良かったと思います。特に、機種移行の時などはほんとに楽で
すし、最近は、持ち出しキットを使ってUSBで使っていて、ほんとに便利です。

] To: aaa
] To: bbb
] To: ccc

この使い方は、まずしないので大丈夫です。

--
stone

[ ]