Seite 1 von 1

Inhalt winmail.dat auf signatur überprüfen

Verfasst: Donnerstag 15. Juni 2023, 09:22
von schmoelle
Hello :)

ich arbeite aktuell an einem Script auf meinen Postfixservern das mir bei allen externen incoming Emails einen Banner hinzufügt. Funktioniert soweit sehr gut, vor einem Problem steh ich aktuell....
Der Sender arbeitet mit Outlook 2016 und hat mich als Kontakt in seinem Adressbuch hinterlegt. Die Email kommt als Winmail.dat in mein Script wird dort verarbeitet und ganz normal zugestellt. Laut log ebenfalls als Winmail.dat.
Das Problem ist, wenn der Sender die Email digital signiert und mich zusätzlich noch in seinem Adressbuch als Kontakt hinterlegt, kommt die der text/plain part der Email als text an, der winmail.dat (application/ms-tnef) jedoch als attachment.
Zu überprüfen ob die Email winmail.dat enthält ist ja kein Problem, wo ich aktuell nicht weiter komme ist das überprüfen innerhalb der winmail.dat ob sich darin eine signatur versteckt. Anhand dessen würd die Email dann dem entsprechend verarbeiten.
Ich hab mich schon ein bisschen mit tnefparse probiert, bissher leider ohne erfolg...
Hätte jemand eine Idee hierzu?

Danke und Grüße,

Re: Inhalt winmail.dat auf signatur überprüfen

Verfasst: Donnerstag 15. Juni 2023, 10:14
von imonbln
schmoelle hat geschrieben: Donnerstag 15. Juni 2023, 09:22 Das Problem ist, wenn der Sender die Email digital signiert ...
Bitte nicht beleidigt sein, aber der Sinn und Zweck einer Signatur ist es zu verhindern, dass eine dritte Partei (in dem Fall der Postfix Server) denn Inhalt einer E-Mail verändert. Bei dieser Art von E-Mail kannst du also kein Banner einfügen, da sonst der Empfänger immer einen Fehler bekommt, dass die Signatur nicht stimmt.

Re: Inhalt winmail.dat auf signatur überprüfen

Verfasst: Donnerstag 15. Juni 2023, 14:16
von schmoelle
imonbln hat geschrieben: Donnerstag 15. Juni 2023, 10:14
schmoelle hat geschrieben: Donnerstag 15. Juni 2023, 09:22 Das Problem ist, wenn der Sender die Email digital signiert ...
Bitte nicht beleidigt sein, aber der Sinn und Zweck einer Signatur ist es zu verhindern, dass eine dritte Partei (in dem Fall der Postfix Server) denn Inhalt einer E-Mail verändert. Bei dieser Art von E-Mail kannst du also kein Banner einfügen, da sonst der Empfänger immer einen Fehler bekommt, dass die Signatur nicht stimmt.
ich weiß, ich will auch keinen Banner zu der Mail hinzufügen.... für digital signierte mails hab ich einen anderen Weg. Die Originale signierte mail wird als attachment bei einer neuen Email angehängt damit die signatur valid bleibt. Läuft auch alles so wies soll. Ich will nichts verändern, nur überprüfen ob die winmail.dat eine signatur enthält und dem entsprechend werd ich die dann verarbeiten.

Re: Inhalt winmail.dat auf signatur überprüfen

Verfasst: Donnerstag 15. Juni 2023, 14:41
von imonbln
imonbln hat geschrieben: Donnerstag 15. Juni 2023, 10:14 für digital signierte mails hab ich einen anderen Weg
Okay und die Komplexität ist auch nötig? Als Benutzer mag ich deterministische Systeme und als Entwickler das KISS-Prinzip. Warum hängst du die originale E-Mail immer nicht immer als Attachment an, wenn das Banner so wichtig ist! Denn dass der Inhalt der E-Mail dazuführt, dass sie anders behandelt wird abhängig vom Inhalt ist eine Komplexität, welche einen Mehrwert bringen muss, ansonsten KISS.

Re: Inhalt winmail.dat auf signatur überprüfen

Verfasst: Freitag 16. Juni 2023, 13:52
von schmoelle
imonbln hat geschrieben: Donnerstag 15. Juni 2023, 14:41
imonbln hat geschrieben: Donnerstag 15. Juni 2023, 10:14 für digital signierte mails hab ich einen anderen Weg
Okay und die Komplexität ist auch nötig? Als Benutzer mag ich deterministische Systeme und als Entwickler das KISS-Prinzip. Warum hängst du die originale E-Mail immer nicht immer als Attachment an, wenn das Banner so wichtig ist! Denn dass der Inhalt der E-Mail dazuführt, dass sie anders behandelt wird abhängig vom Inhalt ist eine Komplexität, welche einen Mehrwert bringen muss, ansonsten KISS.
Es gibt in Exchange ja die Möglichkeit einen Banner (CAUTION: This email originated from outside of the organization. Do not follow guidance...) für Emails von extern hinzuzufügen, genau so etwas will mein Vorgesetzer. Er will es aber nicht über Exchange sondern über unseren Postfix. Das Problem bei dem Exchange Banner ist, dass die Signatur nicht mehr gültig ist und daher musste eine andere Lösung her.
Ich habs jedenfalls geschafft und seit heute läuft das Ganze für mixed content, signiert, verschlüsselt, rtf, meeting invitations...
Hier mal der Check für die Signatur in einem winmail.dat falls es jemand mal benötigt:

from tnefparse import TNEF
from tnefparse.tnef import TNEF, TNEFAttachment

def is_signed_winmail(email):

for part in email.walk():

if part.get_content_type() == "application/ms-tnef":

t = TNEF(part.get_payload(decode=True), do_checksum=True)

for attachment in t.attachments:

if attachment.name.lower().endswith('.p7s') or attachment.name.lower().endswith('.p7m'):

return True

return False

Re: Inhalt winmail.dat auf signatur überprüfen

Verfasst: Freitag 16. Juni 2023, 15:27
von __blackjack__
@schmoelle: `str.endswith()` kann man auch ein Tupel mit mehreren zu prüfenden Enden übergeben. Dann wird innere Test kürzer.

Man könnte es auch mit `any()` formulieren:

Code: Alles auswählen

def is_signed_winmail(email):
    return any(
        any(
            attachment.name.lower().endswith((".p7s", "p7m"))
            for attachment in TNEF(
                part.get_payload(decode=True), do_checksum=True
            ).attachments
        )
        for part in email.walk()
        if part.get_content_type() == "application/ms-tnef"
    )