栗原です。
愚痴のような件名を、適切なものに変えました。
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