マクロDelete関数のエラーメッセージNo.46195
まっちん さん 14/05/28 15:43
 

 マクロのDelete関数で引数として2を指定して、不要なメールと
その受信ログを削除しています。


「添付ファイル/HTMLメール用ファイルのパスが間違っていますが、
 処理を続行します。パス名 = TML\140528_02\index.htm」

といったメッセージが表示されることがあります。

結果、HTMLファイルやその親フォルダの削除に失敗します。

メッセージが表示されるようになったのは6.25βあたりからです。


 ログファイルも無くなっているので確かではありませんが、
削除対象は外国語のHTMLメールのようです。

パス名の先頭部分("受信HTML")が切れているのが少し気になりました。


削除前にヘッダの内容を書き出すようにしたところ、
 X-HTML が ??TML\140528_02\index.htm
 X-Body-Content-Type が "text/plain; charset=utf-8 (maybe)"
となっていました。

X-HTML,X-Attachの内容を取得する際に文字コード変換処理が入って、
変換エラーが発生しているように見えます。

[ ]
RE:46195 マクロDelete関数のエラーメッセNo.46196
秀まるお2 さん 14/05/28 18:23
 
 外国語メールをマクロで扱うと、いろいろ問題がおきてしまいます。

 それで、そういう、外国語メールを扱う場合用の関数ってのがあるので、それ
をマクロの先頭で一発呼んで欲しいです。

   SetJapaneseCodePageMode って関数になります。

 マクロの先頭に、

    loaddll "tkinfo.dll";
    #n = dllfunc( "SetJapaneseCodePageMode", 1 );

 の2行を入れるだけでいいはずです。

 それでどうでしょうか。

----------------------------

 こちらでもテストマクロ作ってテストしてみます。

[ ]
RE:46196 マクロDelete関数のエラーメッセNo.46197
秀まるお2 さん 14/05/28 18:51
 
 とりあえずこちらで簡単なマクロを作ってテストしてみたんですけど、僕の作
ったマクロだとうまく動くようでした。

 loaddll "tkinfo.dll";
    $dir = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") + "\\";

    $tempfile = "e:\\temp\\tempfile.$$$";       //書き換え必要。
    #n = dllfunc("Bypass_SetFileAttributes", $tempfile, 0 );
    #n = dllfunc("Bypass_DeleteFile", $tempfile );

    $attach = dllfuncstr("CurrentHeader", "X-Attach");
    if( $attach == "" ) {
        endmacro;
    }
    $path = $dir +  $attach;
    #n = dllfunc("Bypass_CopyFile", $path, $tempfile, 0 );
    if( #n == 0 ) {
        message "CopyFile失敗。\n\n" + $path;
    } else {
        message "CopyFile成功。\n\n" + $path;
    }

 とりあえず、ユニコードのメールと中国語のメールのどっちでもうまくいくよ
うでした。

    #n = dllfunc("SetJapaneseCodePageMode", 1);

 を入れてもうまくいくみたいです。

 ダメになりそうなパターンとしては、たとえばマクロの中でNextMailとか
SetMailIndexとかの「別のメールを選択する」って操作が入っていて、それによ
ってメールの文字コードが切り替わる場合があるとダメかもしれないです。ただ、
その場合はSetJapaneseCodePageMode関数呼び出しによって直るはずだと思いま
す。

 ダメそうでしたら、すみませんがマクロの内容を教えて欲しいです。ここの会
議室に書いてまずい場合は"maruo@mitene.or.jp"宛に送っていただきたいです。

 よろしくお願いします。

[ ]
RE:46197 マクロDelete関数のエラーメッセNo.46198
まっちん さん 14/05/28 20:16
 

回答ありがとうございます。

SetJapaneseCodePageMode()関数は使用していないので、修正してみます。


> とりあえずこちらで簡単なマクロを作ってテストしてみたんですけど、僕の作
>ったマクロだとうまく動くようでした。
>
> loaddll "tkinfo.dll";
>    $dir = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") + "\\";
>
>    $tempfile = "e:\\temp\\tempfile.$$$";       //書き換え必要。
>    #n = dllfunc("Bypass_SetFileAttributes", $tempfile, 0 );
>    #n = dllfunc("Bypass_DeleteFile", $tempfile );
>
>    $attach = dllfuncstr("CurrentHeader", "X-Attach");
>    if( $attach == "" ) {
>        endmacro;
>    }
>    $path = $dir +  $attach;
>    #n = dllfunc("Bypass_CopyFile", $path, $tempfile, 0 );
>    if( #n == 0 ) {
>        message "CopyFile失敗。\n\n" + $path;
>    } else {
>        message "CopyFile成功。\n\n" + $path;
>    }
>
> とりあえず、ユニコードのメールと中国語のメールのどっちでもうまくいくよ
>うでした。
>
>    #n = dllfunc("SetJapaneseCodePageMode", 1);
>
> を入れてもうまくいくみたいです。
>
> ダメになりそうなパターンとしては、たとえばマクロの中でNextMailとか
>SetMailIndexとかの「別のメールを選択する」って操作が入っていて、それによ
>ってメールの文字コードが切り替わる場合があるとダメかもしれないです。ただ、
>その場合はSetJapaneseCodePageMode関数呼び出しによって直るはずだと思いま
>す。


参考までにマクロの内容としては、不要なメールを選択して、
dllfunc("Delete", 2)を呼んでいるだけです。

X-HTMLやX-Attachは内部で間接的に参照されているのだと思います。

[ ]
RE:46198 マクロDelete関数のエラーメッセNo.46200
秀まるお2 さん 14/05/29 08:42
 
> 参考までにマクロの内容としては、不要なメールを選択して、
> dllfunc("Delete", 2)を呼んでいるだけです。

 ということは、すみませんがSetJapaneseCodePageMode関数がどうこうって話
は関係無いというか、そもそもマクロで削除したからってことも関係なくて、
メールの削除に関係した処理全般の話になるのかなぁと思います。

> メッセージが表示されるようになったのは6.25βあたりからです。

 V6.25βでレベルダウンしたのかもしれないので、その辺の情報も参考に、い
ろいろテストしてみます。

 何か、このメールだと起きるって分かるメールが見つかれば、そのメールの受
信ログを"maruo@mitene.or.jp"に送っていただけると助かります。もしよかった
らお願いします。

[ ]
RE:46200 マクロDelete関数のエラーメッセNo.46202
秀まるお2 さん 14/05/29 11:47
 
 いろいろテストしたのですが、うまく再現できませんでした。

 UTF-8文字コードのHTMLメールを普通に「受信解析のやり直し」としただけで
X-Html:ヘッダが化けたりすることは無さそうでした。エディタで開いて文字
コードの変更とか、いくつか化ける可能性のありそうなこともやってみたのです
が、いまいち大丈夫そうです。

 何かマクロを使ってメールを改変してたりすると、そのマクロによってはおか
しくなるケースがあるのかもしれませんけども…。

 で、再現の条件が分からないので、とりあえず、もしもX-Html:ヘッダが化け
ていても、可能な範囲で正しいフォルダ名に修正して動作するようにしてみます。

 具体的には…

 X-Html:ヘッダが、たとえば「??TML\xxxx」みたいに化けていても、それを
「受信HTML」と解釈するように直してみます。

 「TML\」の前はなんでもOKって風にしてしまいます。それでとりあえずエラー
は出なくなって、HTMLメールも含めてうまく削除できるようになるかなぁと思い
ます。

 次のV6.26β9から対応させていただきます。

[ ]
RE:46202 マクロDelete関数のエラーメッセNo.46203
まっちん さん 14/05/29 12:13
 

対応ありがとうございます。

> いろいろテストしたのですが、うまく再現できませんでした。
>
> UTF-8文字コードのHTMLメールを普通に「受信解析のやり直し」としただけで
>X-Html:ヘッダが化けたりすることは無さそうでした。エディタで開いて文字
>コードの変更とか、いくつか化ける可能性のありそうなこともやってみたのです
>が、いまいち大丈夫そうです。


こちらでもエラーの条件となりそうなメールは、調べていただけるように
保管しておきます。

[ ]