mail daemonからのエラーメールの一括処理No.20569
nankichi さん 04/11/17 12:20
 
一括メール送信したreply-toのアドレスを管理しています。

daemonからuser-unknownのメールが数十通くるのですが、無効なアドレスのリストを
作りたい、と思っています。

daemonのメールのみを目で選別してフォルダの中に入れるのは大した作業ではないの
ですが、その中の本文中にあるメールアドレスのgrep結果をとるにはどのようにすれ
ばよいのでしょうか?

[ ]
RE:20569 mail daemonからのエラーメールNo.20573
秀まるお2 さん 04/11/17 13:00
 
 returned mailから、具体的にどこに送信したことによるものかを特定するこ
とは、大変難しいです。というのは、実は同じような処理を、迷惑メールフィル
ターでやってるからですけど。

> daemonのメールのみを目で選別してフォルダの中に入れるのは大した作業ではないの
> ですが、その中の本文中にあるメールアドレスのgrep結果をとるにはどのようにすれ
> ばよいのでしょうか?

 本文を対象として、正規表現にて「^To:」を検索すれば、ある程度は集まりま
す。

 場合によっては、message-rfc822header.txtという添付ファイルを見たり、あ
るいは「XXXX.eml」のような添付ファイル(自身が送ったメールそのもの)を見
ないといけないこともあるし、「RCPT TO:<...>」となってる場合もあるし、相
手次第でいろいろな形がありえます。メールアドレスが拾えない場合もありえま
す。

 なんでしたら、鶴亀メール標準迷惑メールフィルターでの、Returned mailの
処理部分だけでもソースコードお見せしますけど。C言語のソースコードなので、
しいてそこでやってることと同じことをマクロからやるとしたら、外部DLLを自
作する必要があります。

[ ]
RE:20573 mail daemonからのエラーメールNo.20575
nankichi さん 04/11/17 13:48
 
ありがとうございます。

> returned mailから、具体的にどこに送信したことによるものかを特定するこ
>とは、大変難しいです。というのは、実は同じような処理を、迷惑メールフィル
>ターでやってるからですけど。

そうですね、ですので手作業があるのは前提です。

>> daemonのメールのみを目で選別してフォルダの中に入れるのは大した作業ではないの
>> ですが、その中の本文中にあるメールアドレスのgrep結果をとるにはどのようにすれ
>> ばよいのでしょうか?
>
> 本文を対象として、正規表現にて「^To:」を検索すれば、ある程度は集まりま
>す。

ここがよくわかりません。
daemonのメールは、from等ヘッダ情報には誤ったメールアドレス情報はなく、本文中
にあります。
厳密にはReceived: にはありますが、ここからとってくるのはちょっと面倒くさそう
です。
それよりも本文が
Your message

  Subject: xxx

was not delivered to:

  xxx@xxx.co.kp

because:

xxxx

こんなかんじで、@含みの行をgrepかければ手作業で切り出すことはさほど面倒では
なさそうなのです。

秀丸で素のテキスト、
daemon200411.txt
に対して行うと、headerも引っかかってしまうのでうっとうしいのです。


[ ]
RE:20575 mail daemonからのエラーメールNo.20578
秀まるお2 さん 04/11/17 15:29
 
 秀丸でgrepをかけると、たしかにヘッダも含めたメール全体がひっかかってし
まいます。これは回避出来ないです。

 秀丸側でマクロを使って、本文中のメールアドレスを取得することなら可能だ
と思います。例えば、以下のようなマクロになります。

    setclipboard "";
Loop:
    searchdown2 "^\\x0C!", regular;
    if( !result ) {
        endmacro;
    }
Loop2:
    searchdown "^$", regular;
    if( !result ) {
        endmacro;
    }
    searchdown "(^\\x0C!)|@", regular;
    if( code == '@' ) {
        addclipboard gettext( 0, y, 256, y ) + "\n";
    } else {
        goto Loop2;
    }
    goto Loop;

[ ]
RE:20578 mail daemonからのエラーメールNo.20605
nankichi さん 04/11/18 18:04
 
> 秀丸でgrepをかけると、たしかにヘッダも含めたメール全体がひっかかってし
>まいます。これは回避出来ないです。
>

ちょいと正規表現はちゃんと解釈してみますが、大変助かります。
ちなみに、鶴亀から該当メールのファイルを秀丸に渡してあげる方法などあるのでし
ょうか?

[ ]
RE:20605 mail daemonからのエラーメールNo.20618
秀まるお2 さん 04/11/19 12:53
 
 MailFileName, MailFilePath, MailFileOffsetという3つの関数があります。
それでファイル名およびファイル中のメール位置は分かります。

 鶴亀から秀丸を起動する方法は、鶴亀マクロヘルプ中のヒント集に書いてあり
ます。

 ファイル名などのパラメータはコマンドラインで渡す他に、iniファイルやレ
ジストリを使う方法もあります。

[ ]