Der Beitrag, zu dem Sie einen Link erstellen, gibt zwar an, dass gefaltete Header korrekt verarbeitet werden, dieses Rezept untersucht jedoch den Hauptteil und nicht den Header.
Es ist eine Fehlfunktion von Procmail, dass MIME-Strukturen nicht richtig erkannt werden. Dies wäre eine wichtige Ergänzung zu einem modernen Mail-Filter. Aber die Entwicklung von Procmail wurde bereits Anfang der 2000er Jahre eingestellt (und schon einmal zuvor, als der ursprüngliche Entwickler losließ).
Als grobe Problemumgehung könnten Sie eine MIME-Multipart-Nachricht an der MIME-Grenze zeitweilig aufteilen und jeden Teil einem separaten Procmail-Rezept zuführen. Dies wird jedoch schnell spröde und komplex (theoretisch könnten MIME-Nachrichten beliebig tief verschachtelt sein, wenn auch für die meisten) Aus praktischen Gründen müssen Sie nur ein oder zwei Ebenen nach unten rekursieren - alles, was darüber hinausgeht, ist wahrscheinlich ein Sprung oder etwas Ähnliches, nicht direkt ein Merkmal der zu untersuchenden Nachricht.
Da Ihr Regex nur wenige mögliche (realistische!) Split-Punkte hat, können Sie ihn umwandeln, um mögliche Zeilenumbrüche zu berücksichtigen:
: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/ }
Sie werden den (($)[ ].*)*
Zusatz an einigen Stellen bemerken . Dies berücksichtigt einen möglichen Zeilenumbruch ( ($)
), gefolgt von einem Leerzeichen (Tabulator oder Leerzeichen [ ]
), gefolgt von etwas, das null oder mehrmals wiederholt wird.
(Abgesehen davon wäre dies möglicherweise etwas einfacher zu debuggen:
: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) ...
Damit können Sie VERBOSE=yes
das Ergebnis jedes einzelnen Regex in diesem komplexen Rezept mit mehreren Regexen im Protokoll sehen.)
Wenn Sie ein vollständig wasserdichtes Rezept benötigen, schreiben Sie vielleicht ein einfaches Skript in Python oder Perl (oder Ruby oder ... was haben Sie), um die MIME-Struktur zu normalisieren. Ich erinnere mich, dass es vor emil
langer Zeit ein Tool gab, das so etwas tat, aber es war nie sehr gut etabliert, geschweige denn gut dokumentiert. (Tatsächlich wurde IIRC speziell für das Anschließen an pre-MIME sendmail
entwickelt und war für fast alle anderen Anwendungen nahezu unmöglich.)