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.