--- messaging/manakai/doc/introduction.ja.html 2002/04/01 09:22:42 1.5 +++ messaging/manakai/doc/introduction.ja.html 2002/06/14 12:46:34 1.6 @@ -1,16 +1,16 @@ + Message::* Perl modules - - + - +

Message::* Perl modules

@@ -18,7 +18,7 @@

はじめのはじめに

たとえば Perl で書かれた CGI script, それも掲示板なんかには、 -こんなくだらない code が載っていたりします。

+こんなみっともない code が載っていたりします。

 jcode'convert(*from, "jis");
@@ -49,8 +49,8 @@
 my $msg = new Message::Entity;
 my $hdr = $msg->header;
 $hdr->add ('From')->add ('me@bar.example');
-$hdr->add ('To')->add ('foo@bar.example', display_name => 'Mr. foo');
-$hdr->add ('Subject' => $subject);
+$hdr->add ('To')->add (['foo@bar.example', display_name => 'Mr. foo']);
+$hdr->add (Subject => $subject);
 $msg->body ($body);
 
 # $smtp->send は SMTP で送信する method と仮定。
@@ -60,20 +60,12 @@
 

CPAN を探すと、 これに似たようなことができそうなモジュールはあるようですが、 実際に使ってみると、与える値によっては RFC 822/2822 に違反する -結果を出力するなどの不満があります。 (例えば今の例で -To: 領域に使っている -display_name で「.」が含まれますが、 -RFC 2822 的には新しいメッセージでは互換性のため -quoted-string -にする必要があります。しかしそのまま出力されます。)

- -

参考: 「.」の場合は RFC 2822 的には正しく解釈 -されなければなりませんが (出力はすべきでない)、 -これ以外の文字、例えば制御文字 ESCAPE でも同じようになります。 -こちらは完全に間違いです。

-

参考: 実装方針としては不正な値はモジュールに -渡す前に弾くべきという考え方もあるでしょう。 -でもそんなのは不便です。

+結果を出力するとか、そもそもそれ以前に、 +$hdr->addr ('Foo Bar <foo@bar.example>') +のようにメッセージ形式をモジュール内に隠匿しきれていないとか、非 +ASCII 文字を考慮していないとかの不満があります。

+ +

(実装方針としては不正な値はモジュールに渡す前に弾くべきという考え方もあるでしょうけど、一般的な利用に際しては賢い設計だとは思えません。)

ということで、はじめは既存のモジュールの wrapper (あるいは補完) を書くつもりでしたが、なんだかごちゃごちゃしていて、 @@ -82,40 +74,54 @@

特色 (という程のものでもない。)

    -
  1. 結構(謎)オブジェクト指向です。
  2. +
  3. 結構オブジェクト指向です。
  4. RFC 822/2822 の group を解釈出来ます。
  5. draft-ietf-usefor-msg-id-alt-00 に基づいた送信アドレスなどによる Message-ID を生成出来ます。
  6. 文字コード独立 (CSI) です。 (但し RFC 822 である都合上(謎)、 -ASCII 互換である必要はあります。 EBCDIC とかは無理です:-<)
  7. +ASCII 互換である必要はあります。 EBCDIC とかは無理です:-< +(というのはメッセージ構造の部分のことです。 +MIME を使って EBCDIC などをメッセージ本文に入れることは可能です。)) +
  8. MIME (RFC 2045, +2046) にほぼ完全に対応しています。

各仕様への対応状況

  1. 電子メイルのメッセージ (RFC 822, RFC 2822) -の全機能に (抜けが無ければ) 対応しています。 -但し長さ制限などはチェックしていません。 (MIME の -Content-Transfer-Encoding -と一緒に実装予定)
  2. +の全機能に対応しています。
  3. 電子ニュース記事 (RFC 1036, son-of-RFC1036, draft-usefor-article (06)) の頭領域の多くに対応しています。
  4. -
  5. MIME の本体部分 (body part) にはまだ対応していません。
  6. -
  7. MIME の追加頭領域 +
  8. MIME の本文部分 (body part) に対応しています。 +
      +
    • 多部分 (multipart) や分割 (message/partial), + 外部本分 (message/external-body) を扱うことが出来ます。
    • +
    • text/plain; format=flowed + (RFC 2646) + に対応しています。
    • +
    • Content-Transfer-Encoding は Base64, Quoted-Printable + は勿論、 x-uuencode, x-gzip64 にも対応。 + RFC 2822 メイル出力モードでは、本文が8ビットでも自動的に適切な + CTE で符号化します。
    • +
    +
  9. +
  10. MIME の頭領域 (RFC 2045, Content-Disposition) に対応しています。 パラメーター値拡張 (RFC 2231) も入出力ともに実装しました。
  11. MIME 符号化語 (encoded-word) -の解読に対応しています:-) 但し別途変換処理を指定する必要があります。 -(文字コードの扱い参照)
  12. +の解読に対応しています:-)
  13. HTTP/1.0, HTTP/1.1, CGI/1.1, CGI/1.2 の頭領域のうち、 ごく一部に対応しています。 MHTML の Content-Location にも対応しています。
  14. 日付形式では RFC 822/1123, RFC 733, asctime, ISO 8601 (HTML) -などに対応しています。
  15. +などに対応しています。日付の出力は sprintf +の様な書式文字列を与えることで、多種多様な形式に対応。 +
  16. X-Moe シリーズに対応しています:-)

制限事項

@@ -127,11 +133,14 @@ 保持しています。ですからあまり大きなメッセージの処理には 向いていないでしょう。
  • CRLF が単体で出現する場合、 -正しく処理出来ません。 (CRLF と等価とみなします。) +正しく処理出来ませんないことがあります +(近い将来の版で改善の予定)。 (CRLF と等価とみなします。) 将来の版ではオプションで制御可能になるかもしれません。
  • あったら良さそうな機能が未実装かもしれません。 (欲しい機能が未実装だったら、 -電子メイルなどで教えて下さい。)
  • +電子メイルや +suika.msg +などで教えて下さい。)
  • 各モジュールのオプション体系があまり整備されていません。 (それでも気持ち悪くない程度には体系的だと思います。)
  • 説明文 (document) が良い加減です。
  • @@ -143,12 +152,12 @@
  • 電子ニュースの頭領域 (RFC 1036, son-of-RFC1036, draft-usefor-article) の完全実装
  • -
  • MIME の頭領域の実装。
  • 追加/非標準の頭領域の実装。
  • -
  • MIME 本体 (body) の実装。
  • -
  • 文字符号変換のための hook の実装?
  • documentation。
  • 使用例の作成。
  • +
  • 既存モジュールが利用出来る部分は、それを呼び出すようにするか +その code を流用する。
  • +
  • 類似モジュールとの界面の共通化
  • 必要環境

    @@ -162,10 +171,14 @@
  • Digest::MD2, Digest::MD5, Digest::SHA1

    Message-ID の生成にこれらを使用する場合のみ、 - Message::Field::MsgID::MsgID が使います。

    + Message::Field::MsgID が使います。

    これらが用意されていない環境ではエラーになるので、 (現状では) 上記モジュールの該当部分を書き換えて対処して下さい。

  • +
  • MIME::Base64 +

    ちなみに、 Quoted-Printable や RFC 2231 の + % 符号化は自力で復号します。

    +
  • 文字コード変換処理

    日本語メッセージを扱うなら必須でしょう。 詳しくは文字コードの扱い @@ -195,6 +208,7 @@

    文字コードの扱い

    卑しいことで頭を悩ますのは嫌なので(藁)、 +[[ →手っ取り早く方法だけ読む。 ]] Message::* は符号化方法独立 (CSI) を目指して実装しています。 (但し ASCII のしがらみだけは断ち切っていません:-)) 0x00 〜 0x7F が ASCII (または ASCII と見なして良いもの) である @@ -270,6 +284,7 @@ 何も処理しません。) これ以外の場面では、 *default で定義された関数が使われます。

    + + +

    ややこしい説明をしてきましたが、実際面倒なので、日本語文字コード変換に良く使われる、 +jcode.pl や Jcode.pm などのための設定は予め用意してあります。

    + +
    +## どちらか好きな方をどうぞ。
    +use Message::MIME::Charset::Jcode 'jcode.pl';
    +use Message::MIME::Charset::Jcode 'Jcode';
    +
    + +

    この1行だけで、 ISO-2022-JP, EUC-JP, Shift_JIS +および幾つかの関連 charset が利用可能になります。

    + +

    Perl 5.8 になって Encode モジュールが使えるようになれば、 +もっと色々な文字コードが楽に利用できるようになると期待しています。

    -

    Perl 5.8 で Encode モジュールが使えるようになれば、 -もっと楽になると期待しています。

    +

    ところで、このように charset 対応処理をしなくても、 +MIME で charset 札付けされてメッセージに含められている未知の +charset のデータが破壊されることはありません。 (はずです。) +(そこいらが、 Unicoder のソフトウェアとの違いです(笑)。)

    -
    $Date: 2002/04/01 09:22:42 $
    +
    $Date: 2002/06/14 12:46:34 $