Назад | Перейти на главную страницу

Недопустимые символы новой строки в заголовках нарушают фильтры Exim

Среда: cPanel / WHM с использованием Exim 4.91.

Я заметил, что наши «Глобальные фильтры электронной почты» (на языке cPanel) некорректно работали с электронными письмами, отправленными определенными интернет-провайдерами.

Короче говоря, я обнаружил, что заголовки электронной почты, в которых неправильно используются символы новой строки, вызывают некорректную работу фильтрации. Ниже приведены некоторые примеры.


Фильтр работает

X-Custom-Header: allOneLine
To: "filtertest@example.com" <filtertest@example.com>

This message IS correctly filtered by Exim.

Фильтр не работает

X-Custom-Header: line1
line2
To: "filtertest@example.com" <filtertest@example.com>

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

Фильтр работает

To: "filtertest@example.com" <filtertest@example.com>
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: "filtertest@example.com" <filtertest@example.com>

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

Я рассмотрел актуальные фильтры Exim, которые cPanel создает в /etc/vfilters/example.com, и я не вижу явных проблем. Итак, похоже, что это может быть ошибка в Exim. Если заголовок содержит новую строку, за которой сразу не следует пробел, фильтрация не будет выполняться для последующих заголовков.

Я понимаю, что использование новой строки, за которой не следует пробел, синтаксически недопустимо (RFC 2822; ищите "складной"). Проблема в том, что мы явно не контролируем заголовки других отправителей. Кажется, что законные отправители виновны в совершении этого греха. Yahoo, например, включает заголовок «Outgoing Spam Guard» (X-YMail-OSG), который содержит символы новой строки без пробелов.

Это действительно похоже на ошибку в eximʻe?

Каковы возможные обходные пути?