标头中的无效换行符会破坏 Exim 过滤器

标头中的无效换行符会破坏 Exim 过滤器

环境:使用 Exim 4.91 的 cPanel/WHM。

我注意到我们的“全局电子邮件过滤器”(cPanel 术语)无法正确地处理某些 ISP 发送的电子邮件。

长话短说,我发现电子邮件标题错误地使用换行符会导致过滤无法正常工作。下面是一些示例。


过滤工作原理

X-Custom-Header: allOneLine
To: "[email protected]" <[email protected]>

This message IS correctly filtered by Exim.

过滤器不起作用

X-Custom-Header: line1
line2
To: "[email protected]" <[email protected]>

This message is NOT correctly filtered by Exim due to the newline in X-Custom-Header that is not followed immediately by whitespace.

过滤工作原理

To: "[email protected]" <[email protected]>
X-Custom-Header: line1
line2

This message IS correctly filtered by Exim. There is an invalid newline in the X-Custom-Header, but the To filter precedes the newline, so filtering succeeds.

过滤工作原理

X-Custom-Header: line1
 line2
To: "[email protected]" <[email protected]>

This message IS correctly filtered by Exim. Although there is a newline in X-Custom-Header, the subsequent line begins with whitespace.

我检查了 cPanel 在 中创建的实际 Exim 过滤器/etc/vfilters/example.com,没有发现任何明显问题。因此,这似乎是 Exim 中的一个错误。如果标题包含换行符,并且后面没有空格,则不会对后续标题执行过滤。

我确实理解,使用没有空格的换行符在语法上是无效的(RFC 2822;搜索“折叠”)。问题是我们显然无法控制其他发件人的标头。似乎合法发件人也犯了这种错误。例如,雅虎包含一个“传出垃圾邮件防护”标头(X-YMail-OSG),其中包含换行符,后面没有空格。

这确实是 Exim 的一个错误吗?

有哪些潜在的解决方法?

相关内容