Q:ISO-2022-JPの判定方法No.00454
JR0LPL さん 07/07/19 14:51
 
お世話になります。JR0LPLです。

識者の方々がお作りになられたマクロを拝見させて頂いているので
すが+マクロヘルプを見ても解らなかったので質問させてください。

text/plain; charset=ISO-2022-JP の形式のみに自動返信させよう
と実装を考えたのですが、メーラーによって、Content-Type: の書
式が多種多様でして、

$s = dllfuncstr("CurrentHeader", "Content-Type:");

で取得した場合、一筋縄では行きませんでした。outlookexpress の
書式を見た段階で挫折しました。

text/plain かつ charset=ISO-2022-JP の判定を簡単に実現するには
どのようにしたら宜しいでしょうか?

個人的な事でこの会議室をお騒がせしていて、大変申し訳なく、気が
引けるのですが、宜しくお願い致します。

[ ]
RE:00454 Q:ISO-2022-JPの判定方法No.00455
秀まるお さん 07/07/19 15:15
 
 秀丸メールはマルチパートの場合の本文パートのContent-Type:ヘッダをX-
Body-Content-Type:ってヘッダに入れます。なので、

   $cont = dllfuncstr("CurrentHeader", "X-Body-Content-Type:");
   if( $cont == "" ) {
       $cont = dllfuncstr("CurrentHeader", "Content-Type:");
   }
   $cont = dllfunc("ToLower", $cont);
   if( strstr( $cont, "text/plain" ) >= 0
    && strstr( $cont, "iso-2022-jp" ) >= 0 ) {
       // 目的の処理
   }

 みたいにすればいいと思います。(上記マクロは即興で書いた物なのでテスト
して動くことは保証出来ませんけど)

 日本語のメールかどうかという判定をしたいなら、iso-2022-jpかどうか見れ
ばいい訳じゃなくて、例えばeuc-jpとかshift_jisとかも見ないとダメかもしれ
ません。

 あと、RFCってドキュメントを見て勉強した方がいいかもしれません。最初は
RFC2822とか見るといいんじゃないかと思います。「電子メール RFC」とかの
キーワードでgoogle検索するといいかもしれません。

--------------
 あとあと、一応ご存じかとは思いますが、「返信メール」とかで作成したエデ
ィタ上で返信元メールのヘッダを参照するには、"RootHeader"という関数を使い
ます。

[ ]
RE:00454 Q:ISO-2022-JPの判定方法No.00456
Iranoan さん 07/07/19 15:23
 
 JR0LPL さん今日は、Iranoan です。
> text/plain かつ charset=ISO-2022-JP の判定を簡単に実現するには
> どのようにしたら宜しいでしょうか?
 私もどれだけの種類があるか解りませんが、ある程度置換を使えばよいので
はないでしょうか? 例を末尾に記載します。ただ Content-Type を見るだけで
は、添付ファイル付き、HTML メール、電子書名付きでも false になります。
loaddll "tkinfo.dll";
$$return = dllfuncstr("CurrentHeader", "Content-Type:");
$$return = dllfuncstr( "ToLower", $$return );
call ChangeCharacter $$return, "\t", "";
call ChangeCharacter $$return, "\n", "";
call ChangeCharacter $$return, "\r", "";
call ChangeCharacter $$return, " ", "";
call ChangeCharacter $$return, "\"", "";
if( $$return == "text/plain;charset=iso-2022-jp" )message "true";
else message "false";
freedll;
endmacro;

ChangeCharacter://buffer 中の文字列を置換
//$$1:buffer
//$$2:検索文字列
//$$3:置換文字列
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:00454 Q:ISO-2022-JPの判定方法No.00457
JR0LPL さん 07/07/19 16:19
 
秀まるおさん、Iranoan さん、こんにちは。JR0LPLです。

お返事ありがとうございました。まとめてお返事させて頂きます。

ご提案頂いた、strstr が僕の思っていた動作をしてくれるので、こ
れでやってみます。簡単に出来るのでビックリしました。

さっぱり解らなかったので、秀丸メールのエディタを開いて、
Content-Type: を貼り付けて目的文字列を検索して、その結果でどう
にかしようかと、馬鹿な事を考えていました。

また、Iranoan さんの提示してくださったマクロが、すごく高度な事
をされていて、今後に役立ちますし、勉強させて頂きます。

日本語メールが ISO-2022-JP 以外の形式で存在してるのは、知ってい
ました。とりあえず、text/plain かつ charset=ISO-2022-JP の時の
みマクロが反応する形で運用したいと思います。添付ファイルがあっ
たり、HTMLメールだった場合は、スパムの可能性も考えられますので
マクロが反応しないようにしてみます。

幸い、自動返信したい方は全員、ISO-2022-JP でして、しばらくは、
大丈夫そうです。

charset=ISO-2022-JP 以外の日本語メールに後日遭遇しましたら、順
次マクロを改造していきたいと思います。

また、アドバイス頂いた RFC2822 も読んでみます。

ありがとうございました。

余談:最近スパムメールの添付ファイルにPDFを用いたものが急増して
いますね。

[ ]