Add X-SSL header to email
1. Type of listener the client used 2. If starttls was called
This commit is contained in:
parent
57d0eeaf0f
commit
92dc1ab713
@ -20,21 +20,26 @@ logger = logging.getLogger("smtp")
|
|||||||
|
|
||||||
|
|
||||||
class MyHandler(AsyncMessage):
|
class MyHandler(AsyncMessage):
|
||||||
def __init__(self, mails_path: Path, mbox_finder: Callable[[str], list[str]]):
|
def __init__(self, mails_path: Path, mbox_finder: Callable[[str], list[str]], listener_type: str):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.mails_path = mails_path
|
self.mails_path = mails_path
|
||||||
self.mbox_finder = mbox_finder
|
self.mbox_finder = mbox_finder
|
||||||
self.rcpt_tos = []
|
self.rcpt_tos = []
|
||||||
self.peer = None
|
self.peer = None
|
||||||
|
self.starttls = False
|
||||||
|
self.listener_type = listener_type
|
||||||
|
|
||||||
async def handle_DATA(
|
async def handle_DATA(
|
||||||
self, server: SMTP, session: SMTPSession, envelope: SMTPEnvelope
|
self, server: SMTP, session: SMTPSession, envelope: SMTPEnvelope
|
||||||
) -> str:
|
) -> str:
|
||||||
self.rcpt_tos = envelope.rcpt_tos
|
self.rcpt_tos = envelope.rcpt_tos
|
||||||
self.peer = session.peer
|
self.peer = session.peer
|
||||||
|
if session.ssl:
|
||||||
|
self.starttls = True
|
||||||
return await super().handle_DATA(server, session, envelope)
|
return await super().handle_DATA(server, session, envelope)
|
||||||
|
|
||||||
async def handle_message(self, message: Message): # type: ignore[override]
|
async def handle_message(self, message: Message): # type: ignore[override]
|
||||||
|
message["X-SSL"] = f"Type: {self.listener_type}, STARTTLS: {self.starttls}"
|
||||||
all_mboxes: set[str] = set()
|
all_mboxes: set[str] = set()
|
||||||
for addr in self.rcpt_tos:
|
for addr in self.rcpt_tos:
|
||||||
for mbox in self.mbox_finder(addr.lower()):
|
for mbox in self.mbox_finder(addr.lower()):
|
||||||
@ -68,7 +73,7 @@ def protocol_factory_starttls(
|
|||||||
):
|
):
|
||||||
logger.info("Got smtp client cb starttls")
|
logger.info("Got smtp client cb starttls")
|
||||||
try:
|
try:
|
||||||
handler = MyHandler(mails_path, mbox_finder)
|
handler = MyHandler(mails_path, mbox_finder, "starttls")
|
||||||
smtp = SMTP(
|
smtp = SMTP(
|
||||||
handler=handler,
|
handler=handler,
|
||||||
require_starttls=require_starttls,
|
require_starttls=require_starttls,
|
||||||
@ -86,7 +91,7 @@ def protocol_factory(
|
|||||||
):
|
):
|
||||||
logger.info("Got smtp client cb")
|
logger.info("Got smtp client cb")
|
||||||
try:
|
try:
|
||||||
handler = MyHandler(mails_path, mbox_finder)
|
handler = MyHandler(mails_path, mbox_finder, "plain")
|
||||||
smtp = SMTP(handler=handler, enable_SMTPUTF8=smtputf8)
|
smtp = SMTP(handler=handler, enable_SMTPUTF8=smtputf8)
|
||||||
except:
|
except:
|
||||||
logger.exception("Something went wrong")
|
logger.exception("Something went wrong")
|
||||||
|
@ -61,6 +61,7 @@ class TestSMTP(unittest.IsolatedAsyncioTestCase):
|
|||||||
X-Peer: ('127.0.0.1', {local_port})
|
X-Peer: ('127.0.0.1', {local_port})
|
||||||
X-MailFrom: foo@sender.com
|
X-MailFrom: foo@sender.com
|
||||||
X-RcptTo: foo@bar.com
|
X-RcptTo: foo@bar.com
|
||||||
|
X-SSL: Type: plain, STARTTLS: False
|
||||||
|
|
||||||
Hello world
|
Hello world
|
||||||
Byee
|
Byee
|
||||||
|
Loading…
Reference in New Issue
Block a user