/[suikacvs]/messaging/manakai/doc/introduction.ja.html
Suika

Contents of /messaging/manakai/doc/introduction.ja.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download) (as text)
Thu Mar 21 04:03:45 2002 UTC (22 years, 7 months ago) by wakaba
Branch: MAIN
File MIME type: text/html
*** empty log message ***

1 <?xml version="1.0" encoding="iso-2022-jp"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
3 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4 <html xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">
5 <head>
6 <title xml:lang="en">Message::* Perl modules</title>
7 <link rel="index" href="./" />
8 <?xml-stylesheet href="/s/simpledoc"?>
9 <link rel="stylesheet" href="/s/simpledoc" />
10 <link rev="made" href="mailto:w@suika.fam.cx" />
11 <link rel="copyright" href="/c/pd" title="Public Domain." />
12 <meta name="author" content="若葉" />
13 <meta name="keywords" content="Perl, module, pm, Message, RFC 822, RFC 2822, RFC 1036, son-of-RFC 1036, MIME, Usefor, HTTP, CGI, header, field" />
14 </head>
15 <body>
16 <h1>Message::* Perl modules</h1>
17
18 <h2>はじめのはじめに</h2>
19
20 <p>たとえば Perl で書かれた CGI script, それも掲示板なんかには、
21 こんなくだらない code が載っていたりします。</p>
22
23 <pre class="application-x-perl">
24 jcode'convert(*from, "jis");
25 jcode'convert(*subject, "jis");
26 jcode'convert(*message, "jis");
27 open (MAIL, "| $sendmail");
28 print MAIL "From: $mail ($from)\n";
29 print MAIL "To: $mailto\n";
30 print MAIL "Subject: $subject\n";
31 print MAIL "\n";
32 print MAIL "$message";
33 print MAIL "\n";
34 close (MAIL);
35 </pre>
36
37 <p>これでは視認性も良くないですし、うっかり修正し間違えると
38 変なメッセージを送信してしまいます。
39 (筆者はしょっちゅうはまってました:-)
40 (それに多くの code では、
41 HTML でのクロスサイトスクリプティング (CSS) 問題と
42 類似の問題への対処をしていません。)</p>
43
44 <p>オブジェクト指向を取り入れて次のような感じでメッセージを
45 構成したいところです。</p>
46
47 <pre class="application-x-perl">
48 use Message::Entity;
49 my $msg = new Message::Entity;
50 my $hdr = $msg-&gt;header;
51 $hdr-&gt;add ('From')-&gt;add ('me@bar.example');
52 $hdr-&gt;add ('To')-&gt;add ('foo@bar.example', display_name =&gt; 'Mr. foo');
53 $hdr-&gt;add ('Subject' =&gt; $subject);
54 $msg-&gt;body ($body);
55
56 # $smtp->send は SMTP で送信する method と仮定。
57 $smtp->send ($msg);
58 </pre>
59
60 <p><a href="http://www.cpan.org/" xml:lang="en">CPAN</a> を探すと、
61 これに似たようなことができそうなモジュールはあるようですが、
62 実際に使ってみると、与える値によっては <a href="urn:ietf:rfc:822">RFC 822</a>/<a href="urn:ietf:rfc:2822">2822</a> に違反する
63 結果を出力するなどの不満があります。 (例えば今の例で
64 <code xml:lang="en">To:</code> 領域に使っている
65 <code xml:lang="en">display_name</code> で「.」が含まれますが、
66 RFC 2822 的には新しいメッセージでは互換性のため
67 <code xml:lang="en" class="bnf rfc2822">quoted-string</code>
68 にする必要があります。しかしそのまま出力されます。)</p>
69
70 <p class="note">参考: 「.」の場合は RFC 2822 的には正しく解釈
71 されなければなりませんが (出力はすべきでない)、
72 これ以外の文字、例えば制御文字 ESCAPE でも同じようになります。
73 こちらは完全に間違いです。</p>
74 <p class="note">参考: 実装方針としては不正な値はモジュールに
75 渡す前に弾くべきという考え方もあるでしょう。
76 でもそんなのは不便です。</p>
77
78 <p>ということで、はじめは既存のモジュールの wrapper (あるいは補完)
79 を書くつもりでしたが、なんだかごちゃごちゃしていて、
80 それなら車輪の再発明になっても一から書いてみようと考えました。</p>
81
82 <h2>実装状況</h2>
83
84 <ol>
85 <li>RFC 822, RFC 2822 の頭領域 (<code class="bnf rfc2822">header</code> <code class="rfc2822">field</code>) を解釈出来ます。</li>
86 <li>電子ニュース (<a href="urn:ietf:rfc:1036">RFC 1036</a> など), MIME, その他の追加頭領域の幾つかを解釈出来ます。</li>
87 <li>RFC 822/2822 の <code class="bnf rfc2822">group</code> なメイル・アドレスの領域内容を解釈出来ます。</li>
88 <li>日付形式では RFC 822/<a href="urn:ietf:rfc:1123">1123</a>, <a href="urn:ietf:rfc:733">RFC 733</a>, asctime, ISO 8601 (HTTP) などに対応。他の用途に転用出来ます。</li>
89 <li><a href="urn:ietf:id:draft-ietf-usefor-msg-id-alt-00">draft-ietf-usefor-msg-id-alt-00</a> に基づいた送信アドレスなどによる <code class="rfc2822">Message-ID</code> を生成出来ます。</li>
90 <li>まだ解釈出来ない構造化 (<code class="rfc2822">structured</code>) 頭領域について、表示のために <code class="bnf rfc2822">quoted-pair</code> を unquote して値を返すなど出来ます。</li>
91 <li>MIME 本体 (<code class="bnf rfc822">body</code>) にはまだ対応していません。 (<code class="media-type">text/plain</code> <code class="mime-cte">8bit</code> 固定)</li>
92 <li>説明はまだ不備です。各モジュールに pod で説明が入っていますが、
93 抜けていたり実態に合っていなかったりもします。
94 今の段階では code そのものが簡単に理解出来るとは思いますが。</li>
95 </ol>
96
97 <h2>今後の予定</h2>
98
99 <ol>
100 <li>電子ニュースの頭領域 (RFC 1036, son-of-RFC1036, draft-usefor) の実装</li>
101 <li>MIME の頭領域の実装。</li>
102 <li>追加/非標準の頭領域の実装。</li>
103 <li>MIME 本体 (<code class="bnf rfc822">body</code>) の実装。</li>
104 <li>文字符号変換のための hook の実装?</li>
105 <li>documentation。</li>
106 <li>使用例の作成。</li>
107 </ol>
108
109 <h2>入手</h2>
110
111 <p>suika.fam.cx の SSH account をお持ちの場合、 CVS から入手出来ます。</p>
112
113 <p class="example">$ cvs -d :ext:<var xml:lang="en">username</var>@suika.fam.cx:/home/cvs -d perl/lib/Message/</p>
114
115 <p>Web からも取り出せます。 &lt;<a href="/gate/cvs/perl/lib/Message/">http://suika.fam.cx/gate/cvs/perl/lib/Message/</a>&gt; (tarball で一括取得も出来ます。)</p>
116
117 <h2>ライセンス</h2>
118
119 <p>Message::* Perl modules は自由ソフトウェアです。
120 GNU GPL に従って利用出来ます。詳しくは各ファイルを御覧下さい。</p>
121
122 <h2>参考文献</h2>
123
124 <ul>
125 <li><a href="spec/">関連する仕様書 (RFC, Internet-Draft 等)</a></li>
126 </ul>
127
128 <div class="navigation">
129 [<a href="/" title="このサーバーの首頁">/</a>
130 <a href="/map" title="このサーバーの案内" rel="index">地図</a>
131 <a href="/search/" title="このサーバーの検索">検索</a>]
132 <a href="http://validator.w3.org/check/referer" xml:lang="en"><img
133 src="http://www.w3.org/Icons/valid-xhtml11" id="w3c-html"
134 alt="Valid XHTML 1.1!" style="height: 31px; width: 88px" /></a>
135 <a href="http://jigsaw.w3.org/css-validator/validator?uri=http://suika.fam.cx/~wakaba/Message-pm/introduction.ja.html" xml:lang="en">
136 <img style="width: 88px; height: 31px" id="w3c-css"
137 src="http://jigsaw.w3.org/css-validator/images/vcss"
138 alt="Valid CSS!" /></a>
139 </div>
140 <div class="update">$date: $</div>
141 <ul class="myuri">
142 <li>&lt;URL:<a href="http://suika.fam.cx/~wakaba/Message-pm/introduction">http://suika.fam.cx/~wakaba/Message-pm/introduction</a>&gt;</li>
143 <li>&lt;CVS:<a href="http://suika.fam.cx/gate/cvs/perl/web/Message-pm/">suika.fam.cx:/home/cvs/perl/web/Message-pm/</a>&gt;</li>
144 </ul>
145 </body></html>

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24