--- messaging/manakai/doc/introduction.ja.html 2002/06/14 12:46:34 1.6 +++ messaging/manakai/doc/introduction.ja.html 2003/08/17 03:37:53 1.8 @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-注意: この文書の内容には古い事柄が含まれています。 +最新の情報は +SuikaWiki:manakai +をご覧ください。
たとえば Perl で書かれた CGI script, それも掲示板なんかには、 こんなみっともない code が載っていたりします。
--jcode'convert(*from, "jis"); ++jcode'convert(*from, "jis"); jcode'convert(*subject, "jis"); jcode'convert(*message, "jis"); open (MAIL, "| $sendmail"); @@ -32,7 +36,7 @@ print MAIL "$message"; print MAIL "\n"; close (MAIL); -
これでは視認性も良くないですし、うっかり修正し間違えると 変なメッセージを送信してしまいます。 @@ -77,10 +81,8 @@
group
を解釈出来ます。Message-ID
を生成出来ます。CRLF
と等価とみなします。)
将来の版ではオプションで制御可能になるかもしれません。
-comment
- を表すのに正規表現 (??{ code })
+ を表すのに正規表現
+ (??{ code })
を使っているので、これを解釈出来る、
5.6 以降の版である必要があります。
Message-ID の生成にこれらを使用する場合のみ、
- Message::Field::MsgID
が使います。
これらが用意されていない環境ではエラーになるので、 - (現状では) 上記モジュールの該当部分を書き換えて対処して下さい。
+ Message::Field::MsgID が使います。 +Content-MD5:
領域の付加や検証を行う場合、
+ Digest::MD5 が必要です。 (Message::Entity)
ちなみに、 Quoted-Printable や RFC 2231 の @@ -190,159 +172,55 @@
suika.fam.cx の SSH account をお持ちの場合、 CVS から入手出来ます。
-$ cvs -d :ext:username@suika.fam.cx:/home/cvs -d perl/lib/Message/
+$ cvs -d :ext:username@suika.fam.cx:/home/cvs co messaging/manakai
+ +Web からも取り出せます:
+<http://suika.fam.cx/gate/cvs/messaging/manakai/>
Web からも取り出せます。 <http://suika.fam.cx/gate/cvs/perl/lib/Message/> (tarball で一括取得も出来ます。)
+最新開発版 +snapshot の tarball を取得することもできます。
Message::* Perl modules は自由ソフトウェアです。 -GNU GPL に従って利用出来ます。詳しくは各ファイルを御覧下さい。
+manakai は自由ソフトウェアです。 +GNU +GPL に従って利用出来ます。 +詳しくは各構成ファイルを御覧下さい。
-卑しいことで頭を悩ますのは嫌なので(藁)、 -[[ →手っ取り早く方法だけ読む。 ]] -Message::* は符号化方法独立 (CSI) を目指して実装しています。 -(但し ASCII のしがらみだけは断ち切っていません:-)) -0x00 〜 0x7F が ASCII (または ASCII と見なして良いもの) である -場合は、 Message::* を通したことでデータが壊れることは -無いと思います。
- -(もちろん、 RFC 822 など各仕様に照らして正統(的)で
-ある必要があります。 atom
-に8ビット・コードが含まれていると正しく扱えません。)
-(早い話が、 quoted-string
-などでは8ビット透過だということです。回りくどくてごめんなさい。)
既定の状態では文字コードに関係する変換処理は行われません。 -しかし、フック関数っぽいもの(謎)を指定することで、 -変換処理をさせられます。
- -指定出来るフック関数っぽいものは2種類です。
-DECODER
は、元のメッセージを解析する時
-(parse ()
) に適宜呼び出されます。
-ENCODER
は、メッセージとして文字列化する際
-(stringify ()
など) に適宜呼び出されます。
これらの関数は、当然、当該処理が呼び出される前に指定しておく -必要があります。 -Message::Entity->parse などする前に -定義しておくと良いでしょう。
- --require Message::MIME::Charset; -$Message::MIME::Charset::DECODER{'*default'} = sub {jcode::euc ($_[1])}; -$Message::MIME::Charset::ENCODER{'*default'} = sub {jcode::jis ($_[1], 'euc')}; -- -
この例では、 jcode.pl を変換処理に使います。
-(もちろん、既に require
-されていると仮定しています。)
最初の require
で、変換処理を担当している
-Message::MIME::Charset
を読み込みます。
-(こうしておかないと、後から既定値 (= 無変換) で
-*default
が上書きされてしまいます。)
この code を使ったスクリプトは内部処理を日本語 EUC
-で行うと仮定しています。ですから、 DECODER
-で日本語 EUC に変換します。
また、日本語メッセージでは ISO-2022-JP
-を使うのが慣習ですから、 ENCODER
-では 7ビット JIS に変換しています。
処理を行う関数は、引数が2つ以上与えられます。
-1つ目の引数は呼び出した class module, いわゆる
-$self
です。(この場合 self ではありませんが:-)
-でも普通は必要ないでしょう。
2つ目の引数は処理対象の文字列です。
-3つ目以降の引数は、追加オプションのハッシュです。 -ただし、現在追加オプションは定義されていません。
-関数が返す値は(今のところ)一つだけです。
-処理が終わった文字列です。変換結果として何もなくなってしまったら、
-もちろん空文字列を返して構いません。 (undef
-よりも空文字列の方が望ましいでしょう。)
さて、上記の例では「*default
」の EN/DECODER
-を指定しましたが、ここには代わりに charset 名を指定出来ます。
-$Message::MIME::Charset::DECODER{'iso-2022-jp'} = sub {jcode::euc ($_[1], 'jis')}; -+
ここでは、 ISO-2022-JP
を内部コードに変換する
-方法を定義しています。 charset 名 (および「*default
」
-は必ず小文字で書いて下さい!)
MIME body や、 encoded-word, RFC 2231 の拡張パラメーター値
-など、 charset が指定されている時はその charset 名の変換関数が
-呼び出されます。 (指定された charset 名の変換関数が未定義の時は、
-何も処理しません。) これ以外の場面では、 *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 が利用可能になります。
+Web 上の連続する資源 (掲示板の記事のようなもの) + を切り出して RFC 822 形式のメッセージにするエンジン部分。
+Bunshin.pm を使って、電子ニュースに記事を投稿する + script。 (cron とかから呼び出して使う。)
+Perl 5.8 になって Encode モジュールが使えるようになれば、 -もっと色々な文字コードが楽に利用できるようになると期待しています。
+ところで、このように charset 対応処理をしなくても、 -MIME で charset 札付けされてメッセージに含められている未知の -charset のデータが破壊されることはありません。 (はずです。) -(そこいらが、 Unicoder のソフトウェアとの違いです(笑)。)
+