FLIM 1.13.2 message/external-body parsing
守岡 知彦 / MORIOKA Tomohiko
tomo @ etl.go.jp
2000年 2月 8日 (火) 17:39:25 JST
>>>>> In [emacs-mime-ja : No.00376]
>>>>> "Yoshiki" = Yoshiki Hayashi <t90553 @ mail.ecc.u-tokyo.ac.jp> wrote:
Yoshiki> FLIM 1.13.2, EMY 1.13.2 (ほぼ確実にどの SEMI を使っても同じ)
Yoshiki> を使うと、
Yoshiki> Content-Type: Message/External-body;
Yoshiki> access-type="mail-server";
Yoshiki> server="mailserv @ ietf.org"
Yoshiki> Content-Type: text/plain
Yoshiki> Content-ID: <20000127125821.I-D @ ietf.org>
Yoshiki> ENCODING mime
Yoshiki> FILE /internet-drafts/draft-ietf-drums-msg-fmt-08.txt
Yoshiki> というのが、
Yoshiki> [2.1.2.1 ([mail-server] mailserv @ ietf.org)]
Yoshiki> [2.1.2.1.1 <text/plain (7bit)>]
Yoshiki> ENCODING mime
Yoshiki> FILE /internet-drafts/draft-ietf-drums-msg-fmt-08.txt
Yoshiki> と表示されます。本当は multipart ではないものが multipart の
Yoshiki> ように扱われるのは気持悪いです。
Yoshiki> これは、flim/mime-def.el の
Yoshiki> (luna-define-method mime-entity-children ((entity mime-entity))
Yoshiki> (let* ((content-type (mime-entity-content-type entity))
Yoshiki> (primary-type (mime-content-type-primary-type content-type)))
Yoshiki> (cond ((eq primary-type 'multipart)
Yoshiki> (mime-parse-multipart entity)
Yoshiki> )
Yoshiki> ((and (eq primary-type 'message)
Yoshiki> (memq (mime-content-type-subtype content-type)
Yoshiki> '(rfc822 news external-body)
Yoshiki> ))
Yoshiki> (mime-parse-encapsulated entity)
Yoshiki> ))
Yoshiki> ))
Yoshiki> で、external-body を message/rfc822 と同等に扱っているからです。
Yoshiki> 質問なのですが、message/external-body を multipart/messageと
Yoshiki> 同等として parse するというのは仕様でしょうか? そうすると、
Yoshiki> SEMI 層では message/external-body が来たときは children が実
Yoshiki> 際の body だと思って操作することになります。できれば、
Yoshiki> children にしない方がきれいで良いと思うのですが、どうでしょ
Yoshiki> うか?
上記修正を行ったのは小林君だったと思うので、実際の所は判らないのですが
(と、逃げを打っておく(^_^;;;)、MIME 的には message/external-body は
body が外部にある entity で、そのことを除けば message/rfc822 と同様な
のは自然だと思います。FLIM 的には message/external-body の children
entity 自体は常に生成可能で、それに対する header に関する要求は常に成
功し、body や内容に関する要求は失敗するかも知れないということになると
思います。
ところで、message/external-body を mime-parse-encapsulated で parse す
るのは正しいかというと、私は正しくないと思います。この body の意味は
message/rfc822 と異なるからです。そういう訳で、FLIM 1.14 では
(luna-define-method mime-entity-children ((entity mime-entity))
(let* ((content-type (mime-entity-content-type entity))
(primary-type (mime-content-type-primary-type content-type))
sub-type)
(cond ((eq primary-type 'multipart)
(mime-parse-multipart entity))
((eq primary-type 'message)
(setq sub-type (mime-content-type-subtype content-type))
(cond ((eq sub-type 'external-body)
(mime-parse-external entity))
((memq sub-type '(rfc822 news))
(mime-parse-encapsulated entity)
;; [tomo] Should we make a variable to specify
;; encapsulated media-types?
))))))
みたいにし、mime-parse-external で該当する class の entity を生成し、
実際の挙動はその class を実装する mm-backend で決まるという風になる予
定です。(Chao 1.14 では anon-ftp の場合のみ動いています)
FLIM 的には要求されれば message/external-body の children entity を作
るのは正しいと思います。よって、問題は SEMI もしくは SEMI と FLIM の連
携にあるのだと思います。従来のように問答無用に children を手繰るのでは
なく、状況に応じて手繰るかどうかを SEMI 側で決めるようにするのが良いと
思います。これはおそらく IMAP4 環境でも重要なことだと思います。
;; message/external-body 用の表示・再生 method は(少なくとも anon-ftp
;; のようなのでは)要らなくなります。ただ、access-type="mail-server"
;; の場合、FLIM で mail を送るというのも変な感じなので、MUA 固有の
;; entity 用 method や mm-backend を差し込むか、あるいは、その
;; access-type 用の表示・再生 method を設定することになるでしょう。
--
===『幾千億の分子に分かれても ========================================
決して忘れない。
この宇宙が終るまで』 守岡 知彦 (MORIOKA Tomohiko)
======================================== Email: <tomo @ etl.go.jp> =====
More information about the Emacs-mime-ja
mailing list