def init(): # Same TLS cert for all handlers cert_file = "./localhost.pem" key_file = "./localhost-key.pem" # SMTP Inbound reception_addr = os.getenv("RECEPTION_ADDR", "0.0.0.0:10025") mda.listen( address = reception_addr, role = "smtp_inbound", tls_cert_file = cert_file, tls_key_file = key_file, ) # SMTP Submission submission_addr = os.getenv("SUBMISSION_ADDR", "0.0.0.0:465") mda.listen( address = submission_addr, role = "smtp_submission", tls_cert_file = cert_file, tls_key_file = key_file, ) # SMTP Local Submission mda.listen( address = "127.0.0.1:12325", role = "smtp_local_submission", tls_cert_file = "", tls_key_file = "", ) # IMAP imap_addr = os.getenv("IMAP_ADDR", "0.0.0.0:993") mda.listen( address = imap_addr, role = "imap", tls_cert_file = cert_file, tls_key_file = key_file, ) def on_message_deliver(conn, user, msg): if msg.header_to.address.startswith("extra-address"): return "extra" dec = user.gatekeeper.get_decision(msg) if not dec: return "Gatekeeper" return dec def on_message_moved(user, msg, source_folder, dest_folder): if source_folder == "Gatekeeper" and dest_folder in ["Junk", "Trash"]: user.gatekeeper.route_to(msg.header_from, "Junk") return if source_folder == "Gatekeeper": user.gatekeeper.route_to(msg.header_from, "INBOX") def on_message_submit(user, msg): return { "host": "relay.p25.dev", "port": 2587, "username": os.getenv("RELAY_USERNAME", ""), "password": os.getenv("RELAY_PASSWORD", ""), }