[Mew-dist 06337] imjoin adds extra header fields

OBATA Noboru obata at example.com
1998年 9月 7日 (月) 21:16:32 JST


小幡です。

# release おめでとうございます。 初めて Message/External-Body な
# メールを頂き、何だろうと C-c C-e を押すと、勝手に ftp され、大
# 変びっくりしました。(笑)

時々 message/partial なメールが届き  imjoin のお世話になっている
のですが、その結果得られたメールに、いくつかのヘッダが重複するこ
とがあります。

調べましたところ、enclosed message  のヘッダが適切に取り除かれて
いないようでした。

RCF2046 の 5.2.2.1. によりますと、

  :
(2) initial enclosing message の "Content-*", "Subject",
    "Message-ID", "Encrypted", "MIME-Version" *以外* のヘッダは
    順番を保ったまま新しいメッセージにコピーしろ。

(3) enclosed message の "Content-*", "Subject", "Message-ID",
    "Encrypted", "MIME-Version" ヘッダは順番を保ったまま新しいメッ
    セージに加えろ。それ以外は無視して捨てろ。
  :

と読めました。ここで (2) と (3) はそれぞれ次のヘッダを指している
と解釈しました。間違ってましたらご指摘ください。

  +------------------------+
  |Return-Path: ...        | ↑
  |Received: ...           | (2)
  |...                     |
  |Subject: ...            | ↓
  |                        |
  | +--------------------+ |
  | |Subject: ..         | | ↑
  | |To: ...             | | (3)
  | |...                 | | ↓
  | |                    | |
  | |本文                | |
  | |                    | |
 〜〜〜                 〜〜〜

現在の imjoin は (3) をすべて拾っています。そのため Subject など
が重複することが分かりました。

そこで、これを修正しようとしたパッチを作りました。このあたりの事
情に詳しい方に何とかして頂けたらと思います。よろしくお願いします。

----
小幡  昇 (obata at example.com)
-------------- next part --------------
--- imjoin.in.orig	Sat Sep  5 08:03:54 1998
+++ imjoin.in	Mon Sep  7 21:06:11 1998
@@ -167,13 +167,26 @@
 		foreach (split("\n", $header)) {
 		    next if (/^[ \t]/ && $skip);
 		    $skip = 0;
-		    if (/^(Content|Message-ID)/i) {
+		    if (/^(Content|Message-ID|Subject|Encrypted|MIME-Version)/i) {
 			$skip = 1;
 			next;
 		    }
 		    last if (/^\n/);
 		    push (@Message, "$_\n");
 		}
+		$header = <MSG>;
+		$skip = 0;
+		foreach (split("\n", $header)) {
+		    next if (/^[ \t]/ && $skip);
+		    $skip = 0;
+		    if (! /^(Content|Message-ID|Subject|Encrypted|MIME-Version)/i) {
+			$skip = 1;
+			next;
+		    }
+		    last if (/^\n/);
+		    push (@Message, "$_\n");
+		}
+		push (@Message, "\n");
 	    } else {
 		# skip header part
 		<MSG>;


Mew-dist メーリングリストの案内