Inhalt winmail.dat auf signatur überprüfen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
schmoelle
User
Beiträge: 3
Registriert: Donnerstag 15. Juni 2023, 08:28

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,
imonbln
User
Beiträge: 191
Registriert: Freitag 3. Dezember 2021, 17:07

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.
schmoelle
User
Beiträge: 3
Registriert: Donnerstag 15. Juni 2023, 08:28

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.
imonbln
User
Beiträge: 191
Registriert: Freitag 3. Dezember 2021, 17:07

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.
schmoelle
User
Beiträge: 3
Registriert: Donnerstag 15. Juni 2023, 08:28

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
Benutzeravatar
__blackjack__
User
Beiträge: 14056
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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"
    )
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten