From: shugo@... (Shugo Maeda) Date: 1997-10-19T01:25:16+09:00 Subject: [ruby-list:5047] Re: mail address class --Multipart_Sun_Oct_19_01:17:29_1997-1 Content-Type: text/plain; charset=ISO-2022-JP 前田です。 In message "[ruby-list:5044] Re: mail address class" akira yamada / やまだあきら wrote: |やまだあきらです. 風邪気味でボーッとしてます. 最近風邪が流行ってるみたいですね。 お大事に...。 |S> RFC822をサブクラス化してMIMEMessageクラスを作ってみました。 | |とってきて眺めただけで, まだ試してはいませんが |これは嬉しいです! なんか使われてるって感じで(^_^) 継承で再利用しようとしたところまではよかったのですが, 結局スーパークラスに手を入れるなどという邪悪なことを してしまいました(^^; |あと, mime.rb をつらつらと眺めていて |structured field のデリミタで分割できると |あとあと嬉しそうだよなあと思いましたので |そのように RFC822.rb に改造を加えてみました. えっと,これはどの部分なのでしょう。 |mime.rb について気付いた点は(RFC を読んでいませんが) |ヘッダの Content-*: は structured じゃないのかな? って点です. |コメントとか入っても良さそうな気がするので, |もしそうならそれを考慮にいれておかなくてはならないでしょう. そうでした,uncommentを使うようにしました。 でもContent-Dispositionについてのみ扱いが違うようです。 RFC2045を眺めた感じではContent-Dispositionではコメントは 許されないように読めたのですが,どなたか詳しい方ご教授く ださい(^^; |あと, MIME-Version: は特に見なくてもよいのでしょうか? たぶん今のところ特に見なくても問題ないと思います。 参照したい時はmsg.header["Mime-version"]とすればよいかなと。 |そろそろ body についての扱いも入れなくては > RFC822 もしそうなるのでしたら,initializeを def initialize(f) parseheader(f) parsebody(f) end みたいに分けていただけると,ありがたいです。 |# ある程度のサイズ以上の body については |# 一時ファイル作るとかしたいような. たいていの場合はそこまでしなくても大丈夫ではないでしょうか。 でも,5MBのメールの話とか聞くと恐くなりますね(^^; |これをみると Subject: ヘッダでのソートや |MIMEMessage < RFC822 なクラスへのパターンマッチングが |できるようになっていると嬉しい感じがしますね. | |# 色々考えたいけどあたまが回らない… sortをイテレータとして使えば,たいてい事足りるので,<=>は 今ぐらいでよいような気もしますね。 message/partialについては順番通りにbodyを連結してMIMEMessage のコンストラクタに渡せば,うまく復元されることを確認できました。 それとmultipart/signedなパートを検証するのにヘッダの元の情報が 必要なので添付するパッチを採用していただけないでしょうか? これと合わせて,MIMEMessage#to_sで元のメールが再現されるように したmime.rb(0.4)を, http://www.aianet.ne.jp/~shugo/ruby/mime.rb に置きました。 以下のようなスクリプトで試したところ,multipart/signedパートを うまく検証できました。 # 例外処理は省略してます。 f = open(file) msg = MIMEMessage.new(f) f.close mainpart = msg.body[0] sigpart = msg.body[1] f = open("/tmp/foo", "w") f.write(mainpart.to_s.gsub(/([^\r]|())\n/) {$1 + "\r\n"}) f.close f = open("/tmp/foo.sig", "w") f.write(sigpart) f.close print `pgp /tmp/foo` 前も思ったのですが,FileのクラスメソッドにELispのmake-temp-name みたいなのがあると,テンポラリファイルを作るのが楽だと思うのです が,いかがでしょう。 # ひょっとしてもうあります? -- 前田 修吾 --Multipart_Sun_Oct_19_01:17:29_1997-1 Content-Type: application/octet-stream Content-Disposition: attachment; filename="RFC822.rb.diff2" Content-Transfer-Encoding: base64 LS0tIFJGQzgyMi5yYn4JU2F0IE9jdCAxOCAwOToyMTozMiAxOTk3CisrKyBSRkM4MjIucmIJ U2F0IE9jdCAxOCAxOTo0NDoyOCAxOTk3CkBAIC0yNTIsOCArMjUyLDEwIEBACiAKICAgZGVm IGluaXRpYWxpemUoZikKICAgICBAaGVhZGVyICA9IHt9ICMgwLikzqXYpcOlwKSss8rHvKS1 pOyk6worICAgIEBoZWFkZXJfc3RyaW5nID0gIiIKIAogICAgIHdoaWxlIGxpbmUgPSBmLmdl dHMoKQorICAgICAgQGhlYWRlcl9zdHJpbmcgPDwgbGluZQogICAgICAgbmV4dCBpZiBsaW5l ID1+L15Gcm9tIC8JCSMgVU5JWCBGcm9tILnUpM/MtbvrpLmk6wogICAgICAgYnJlYWsgaWYg bGluZSA9fiAvXihcclxufFxyfFxuKSQvCSMgtvW51KTHpdilw6XApM69qqTqCiAK --Multipart_Sun_Oct_19_01:17:29_1997-1--