- 主题:外部邮箱转信附件错误
BBS 向外部邮箱转带有附件的邮件时,附件不能打开。
使用的是 kbs-2.0dev 2007 年 9 月的 snapshot。
对比了水木转信和我们自己 BBS 转信的邮件头,发现区别如下:
水木:
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_1242919283_365792516.attach"
From: <id@newsmth.net>
To: to@example.com
Date: Thu, 21 May 2009 23:21:24 +0800
Message-Id: <1242919284.32759@newsmth.net>
Subject: mail subject
X-OriginalArrivalTime: 21 May 2009 15:21:24.0887 (UTC) FILETIME=[CDD88A70:01C9DA27]
X-CM-TRANSID: QcCowLD7mQpxcRVKMSe4DA--.74S2
X-Coremail-Antispam: 1UD129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73
// 这里还有若干行 X-Coremail-Antispam 的内容
我们的:
From: <id@ourbbs.org>
To: to@example.com
Date: Thu May 21 23:08:43 2009
Reply-To: <id@ourbbs.org>
Subject: mail subject
MIME-Version: 1.0
Content-Type: multipart/mixed;
Message-Id: <20090521150843.B2C385064E@ourbbs.org>
X-CM-TRANSID: NcCowLBb5ASCbhVKLTicCw--.15270S2
X-Coremail-Antispam: 1UD129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73
// 这里还有若干行 X-Coremail-Antispam 的内容
boundary="----=_1242918523_1053890096.attach"
我们 BBS 转信的邮件头中,"boundary" 这一行和 Content-Type 被分开了。
把有问题的邮件存成 .eml 之后,再调整 "boundary" 这行的位置,并在前面加上 "\t",打开附件就正常了。
另外对比了 libBBS/bbs_sendmail.c 的代码,发现 svn revision 10401(08年6月修改)的修改在 "boundary" 前面添加了 4 个空格:
"...Content-Type: multipart/mixed;\r\n\t boundary=\"%s\"\r\n..."
请问附件不正确的问题 10401 的修改能解决么?
而且不可理解的是,Content-Type 和 "boundary" 之间被 Message-Id 隔断,"boundary" 前面的 "\t" 也没了。有没有可能是其他转信设置的问题?
--
FROM 211.99.222.*
无人问津哪。。。
【 在 carsigy (淡) 的大作中提到: 】
: BBS 向外部邮箱转带有附件的邮件时,附件不能打开。
: 使用的是 kbs-2.0dev 2007 年 9 月的 snapshot。
: 对比了水木转信和我们自己 BBS 转信的邮件头,发现区别如下:
: ...................
--
FROM 211.99.222.*
哦,有人有人,最近太忙了。
加空格是因为postfix会过滤\t,然后boundary前面貌似需要有空格。。。
【 在 carsigy (淡) 的大作中提到: 】
: 无人问津哪。。。
--
FROM 221.222.170.*
呵呵,多谢。
"\t" 看来是被 postfix 过滤了,我们用的正是 postfix。
不过“Content-Type 和 "boundary" 之间被 Message-Id 隔断”这个呢?也是加上那 4 个空格就没问题了?
加上那 4 空格的话需要编译的东西好像不少,测试起来麻烦而且担心出错。所以先过来问一下。
【 在 fancyrabbit (fancy★gradu-fku-ation) 的大作中提到: 】
: 哦,有人有人,最近太忙了。
: 加空格是因为postfix会过滤\t,然后boundary前面貌似需要有空格。。。
--
FROM 211.99.222.*
问题解决了,加上那 4 个空格就可以了。
"\t" 被 postfix 过滤之后,Content-Type 和 boundary 两行可能被解释成不相关的行了,于是就被 Message-Id 隔断。
而如果 boundary 一行有缩进,则会被认为是 Content-Type 的延续,于是就不会有被隔断的问题。
多谢 fancyrabbit 的帮助。
【 在 carsigy (淡) 的大作中提到: 】
: 标 题: Re: 外部邮箱转信附件错误
: 发信站: 水木社区 (Tue May 26 12:18:35 2009), 转信
:
: 呵呵,多谢。
:
: "\t" 看来是被 postfix 过滤了,我们用的正是 postfix。
: 不过“Content-Type 和 "boundary" 之间被 Message-Id 隔断”这个呢?也是加上那 4 个空格就没问题了?
: 加上那 4 空格的话需要编译的东西好像不少,测试起来麻烦而且担心出错。所以先过来问一下。
:
: 【 在 fancyrabbit (fancy★gradu-fku-ation) 的大作中提到: 】
: : 哦,有人有人,最近太忙了。
: : 加空格是因为postfix会过滤\t,然后boundary前面貌似需要有空格。。。
:
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 211.99.222.*]
--
FROM 211.99.222.*
另外提一下,
libBBS/bbs_sendmail.c (目前最新 revision 10547) line 465
其中 "attachment;\n" 后面的 "\tfilename",是不是也需要加 4 个空格?
因为同样也可能会被 postfix 过滤掉 "\t",有可能会导致 filename 一行与 Content-Disposition 被一空行隔断。导致附件不能正确打开。
【 在 carsigy (淡) 的大作中提到: 】
: 问题解决了,加上那 4 个空格就可以了。
: "\t" 被 postfix 过滤之后,Content-Type 和 boundary 两行可能被解释成不相关的行了,于是就被 Message-Id 隔断。
: 而如果 boundary 一行有缩进,则会被认为是 Content-Type 的延续,于是就不会有被隔断的问题。
: ...................
--
FROM 211.99.222.*