( nehai | 2024. 04. 13., szo – 01:41 )

Ez lett a megoldás:

#import sys
import Milter
import smtplib

class EmailDuplicationMilter(Milter.Base):

    def __init__(self):
        self.duplicate_email = ''

    def envfrom(self, mailfrom, *str):
        self.mailfrom = mailfrom
        return Milter.CONTINUE

    def envrcpt(self, to, *str):
        self.recipients = to
        return Milter.CONTINUE

    def header(self, name, value):
        self.duplicate_email += str(name) + ': ' + str(value) + '\n'
        return Milter.CONTINUE

    def eoh(self):
        self.duplicate_email += '\n'
        return Milter.CONTINUE

    def body(self, chunk):
        self.duplicate_email += chunk.decode('UTF-8')
        return Milter.CONTINUE

    def eom(self):
        try:
#            print(self.duplicate_email)
            server = smtplib.SMTP('test.server.com', 25, 1)
            server.helo(name='old.server.com') # if hostname no fqdn
            server.sendmail(self.mailfrom, self.recipients, self.duplicate_email)
            server.quit()

        except Exception as e:
            print("Error: ", e)

        return Milter.ACCEPT

    def close(self):
#        sys.stdout.flush()
        return Milter.CONTINUE

Milter.factory = EmailDuplicationMilter
#sys.stdout.flush()
Milter.runmilter("maildup", "inet:1111", 20)

Náhány emailre dob egy ilyen hibát: Error:  'ascii' codec can't encode character '\xe1'. Nincs valami ötleted? Bár nagy jelentősége nincs, mert nem áll le a milter. Próbáltam az UTF-8-on kívül az ASCII-t is, de ugyanaz.