Reputationspflege 4: DKIM revisited

Beflügelt durch den SASL-Erfolg, nehme ich mein DKIM-Skript

#!/usr/local/bin/python3 import sys from email.parser import BytesParser from subprocess import Popen, PIPE from dkim import sign, verify selector = 's42' domain = 'eden.one' with open('/etc/ssl/private/dkim.pem') as mykeyfile: mykey = mykeyfile.read() with sys.stdin.buffer.raw as myfile: mymail = BytesParser().parse(myfile) mail_data = mymail.as_bytes() signature = sign(mail_data, selector.encode(), domain.encode(), mykey.encode(), include_headers=('from','to','subject','date','from')) mymail["DKIM-Signature"] = signature[len("DKIM-Signature: ") :].decode() p = Popen(['/usr/local/bin/msmtp', '--read-recipients', '--read-envelope-from', '-a', 'mailserver', mymail['To']], stdin=PIPE) (msmtp_out, msmtp_err) = p.communicate(mymail.as_bytes()) if msmtp_out: sys.stdout.write(msmtp_out) if msmtp_err: sys.stderr.write(msmtp_err) sys.exit(p.returncode)

– noch einmal zur Hand und passe .muttrc entsprechend an:

# ~/.muttrc set write_bcc = yes set sendmail = "/usr/local/bin/dkim_sign"

Ohne write_bcc liefert mutt BCC-Header nämlich nicht als Teil der E-Mail (via STDIN), und ohne --read-recipients ignoriert msmtp die in der E-Mail enthaltenen Header. In der obigen Konstellation darf der Standardwert für das msmtp-Kommando remove_bcc_headers nicht verändert werden, andernfalls ist der BCC-Header für alle Empfängerinnen sichtbar.

Offenbar war tatsächlich der Posteo-Server verantwortlich für die ungültigen DKIM-Signaturen, denn nun werden meine signierten E-Mails von führenden Mailservern akzeptiert.