В публикации, на которую вы ссылаетесь, действительно говорится, что сложенные заголовки обрабатываются правильно, но этот рецепт проверяет тело, а не заголовок.
Procmail ошибочно считает, что он неправильно распознает структуры MIME; это было бы важным дополнением к современному почтовому фильтру; но, увы, разработка Procmail прекратилась уже в начале 2000-х годов (и уже однажды, когда первоначальный разработчик отпустил).
В качестве грубого обходного пути можно временно разделить составное сообщение MIME на границе MIME и передать каждую часть в отдельный рецепт Procmail, но это быстро становится хрупким и сложным (в теории сообщения MIME могут быть произвольно глубоко вложены, хотя для большинства В практических целях вам нужно всего лишь вернуться на один или два уровня вниз - что-либо, кроме того, что, вероятно, является отскоком или чем-то в этом роде, а не непосредственно особенностью сообщения, которое вы изучаете).
Потому что у вашего регулярного выражения есть только несколько возможных (реалистично!) точки разделения, вы можете изменить его, чтобы учесть возможные разрывы строк:
:0
* ^Content-type: multipart/
{
:0B
* ^Content-Type: application/(zip|x-zip-compressed)|\
^Content-Type:.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)|\
^Content-.*attachment.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)|\
^Content-.*application.octet-stream.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)
$L/.3_my._quarantine/
}
Вы заметите дополнение (($)[ ].*)*
В нескольких местах. Это учитывает возможную новую строку (($)
), за которой следует символ пробела (табуляция или пробел, [ ]
), за которым следует что-либо, повторяемое ноль или более раз.
(Кроме того, это может быть немного легче отладить с помощью скоринга:
:0 B
* 1^1 ^Content-Type: application/(zip|x-zip-compressed)
* 1^1 ^Content-Type:.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)
* 1^1 ^Content-.*attachment.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)
* 1^1 ^Content-.*application.octet-stream.*(($)[ ].*)*name=.*\.(zip|exe|rar|rtf|docm)
...
При этом вы можете увидеть в VERBOSE=yes
запись результатов каждого отдельного регулярного выражения в этом сложном рецепте с несколькими регулярными выражениями.)
Если вам нужен полностью водонепроницаемый рецепт, возможно, напишите простой скрипт на Python или Perl (или Ruby или ... что у вас есть) для нормализации структуры MIME. Я помню, что давным- давно был инструмент под названием emil
который делал что-то подобное, но он никогда не был очень устоявшимся, не говоря уже о хорошо документированных. (Фактически, IIRC был разработан специально для подключения к sendmail
до MIME, и его было практически невозможно использовать для чего-либо еще.)