Index: [Article Count Order] [Thread]

Date:  Thu, 12 Oct 2000 17:55:58 +0900
From:  tetsuya@....jp
Subject:  [XP-jp:01059] VXP メッセージの解析について(	was Re: Mailer クラスって。。。)
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <97BA340C0480D411BDA800062939A1890607CE@....jp>
Posted:  Thu, 12 Oct 2000 17:54:38 +0900
X-Mail-Count: 01059

栗原です。
愚痴のような件名を、適切なものに変えました。

Yuji Yamano [mailto:u90156@....jp] wrote:

>> [独り言その2]
>> メール内容について扱うクラスを Message、ヘッダーを扱うクラスを
>> Headers ととりあえずしておいて、メールの内容(以下メッセージ)から
>> ヘッダー部とコンテンツ部を分けて格納しておいたほうがいいわね。
> 
> Message だと一般的すぎるので Body のほうがよいのではないでしょうか。

Message はヘッダーとコンテンツの両方をあらわすクラスと自分の中で
定義してました。
sendmail に渡すクラスには、Message オブジェクトを渡してあげるイメージ。

>> とりあえず、ヘッダーは Header クラスのフィールドに、Vector として格納
>> しておくと便利そう。
>> それはそれとして、RFC822 を参照すると、ヘッダーって複数行になる時が
>> あるみたい。これを考慮してパースしないと、、、、
>> 他にも、ヘッダーの1行の長さとか、いろいろあるみたい(;_;)
> 
> Header クラスの属性は、フィールド名、そのフィールドの内容でしょうか?
> たとえば From: foo <foo@....com> の場合は、フィールド名が From:
> 内容が From: foo <foo@....com> 。
> 
> あと、フィールド名をキーにしたハッシュがあると、ヘッダ書き換えの時に
> 楽そうです。Received: なんかは複数存在するので、フィールド名をキーに
> して、オブジェクトのリストをとりだすイメージでしょうか。

ハッシュで管理すると、先頭行から処理していった時に複数行のヘッダデータ
があると、処理が煩雑になると思ったので、Vector に追加。と書きました。

では、Vector には何を追加するかというと、基本的には、キーと値を保持す
るようなデータクラスを追加しておけばいいかなと。
ちょっとメールで説明するのが相当苦しいんですが、簡単に説明します。

[サンプルヘッダー]

Received: from elise.center.esm.co.jp (localhost [127.0.0.1])
	by elise.center.esm.co.jp (8.8.3/3.7W) with SMTP id NAA07346;
	Mon, 2 Oct 2000 13:18:04 +0900 (JST)
Date: Mon, 2 Oct 2000 13:17:59 +0900
Posted: Mon, 2 Oct 2000 13:15:54 +0900

上記のようなヘッダーを格納する時に、単純に行単位で格納してしまうと、
Recieved: の次の行で、?となってしまいますので、
ヘッダーを追加する Vector オブジェクトを headers、読み込んだ1行
が String オブジェクトの line に入っているとすると、

char firstChar = line.charAt(0);
if (firstChar == '\t' || firstChar == ' ') {
    Foo bar = headers.lastAElement();
    bar.value += "\r\n" + line;
}
...
headers.addElement(new Foo(key, value));

こんな感じで、最後のエレメントに対する変更が簡単にできると考えました。
もちろん、ハッシュにしておいて、一つ前のキーを保存しておいてあとで取
り出しても同じだと思います。
#上記コードはあくまでもサンプルなので、「適当」に書いてます。

深入りしすぎかもしれませんが、1タスクとしては、ちょっとボリュームが
大きいなと感じている今日この頃:-)
#ペア大募集中。

---
Tetsuya Kurihara
tetsuya@....jp