diff --git a/DEVNOTES.md b/DEVNOTES.md index 56099dd..a44ee63 100644 --- a/DEVNOTES.md +++ b/DEVNOTES.md @@ -4,6 +4,7 @@ Notes for developers ``` python -m unittest tests.test_pop.TestPop3.test_CAPA +python -m unittest tests.test_smtp.TestSMTP ``` ## Patch for enable logging in test @@ -14,7 +15,11 @@ Patch generated using below git diff --patch -U1 tests >> ./DEVNOTES.md ``` -Apply with below +Apply with below. Disables smtp test mail dir cleanup. +``` +ls -ltd /tmp/m41* +git checkout tests +``` ```bash git apply - < None: + global MAILS_PATH +- logging.basicConfig(level=logging.CRITICAL) ++ logging.basicConfig(level=logging.DEBUG) + td = tempfile.TemporaryDirectory(prefix="m41.smtp.") +- unittest.addModuleCleanup(td.cleanup) ++ # unittest.addModuleCleanup(td.cleanup) + MAILS_PATH = Path(td.name) PATCH ``` diff --git a/Pipfile.lock b/Pipfile.lock index 1eea2a3..33e0d74 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -18,12 +18,12 @@ "default": { "aiosmtpd": { "hashes": [ - "sha256:78d7b14f859ad0e6de252b47f9cf1ca6f1c82a8b0f10a9e39bec7e915a6aa5fe", - "sha256:a196922f1903e54c4d37c53415b7613056d39e2b1e8249f324b9ee7a439be0f1" + "sha256:5a811826e1a5a06c25ebc3e6c4a704613eb9a1bcf6b78428fbe865f4f6c9a4b8", + "sha256:72c99179ba5aa9ae0abbda6994668239b64a5ce054471955fe75f581d2592475" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==1.4.5" + "version": "==1.4.6" }, "atpublic": { "hashes": [ diff --git a/mail4one/pop3.py b/mail4one/pop3.py index 9f56854..ecf45e8 100644 --- a/mail4one/pop3.py +++ b/mail4one/pop3.py @@ -340,7 +340,9 @@ def make_pop_server_callback(mails_path: Path, users: list[User], timeout_second async def session_cb(reader: StreamReader, writer: StreamWriter): c_shared_state.set(s_state) ip, _ = writer.get_extra_info("peername") - c_state.set(State(reader=reader, writer=writer, ip=ip, req_id=s_state.next_id())) + c_state.set( + State(reader=reader, writer=writer, ip=ip, req_id=s_state.next_id()) + ) logger.info("Got pop server callback") try: try: diff --git a/mail4one/smtp.py b/mail4one/smtp.py index fa0a557..4e69a84 100644 --- a/mail4one/smtp.py +++ b/mail4one/smtp.py @@ -20,21 +20,31 @@ logger = logging.getLogger("smtp") 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__() self.mails_path = mails_path self.mbox_finder = mbox_finder self.rcpt_tos = [] self.peer = None + self.starttls = False + self.listener_type = listener_type async def handle_DATA( self, server: SMTP, session: SMTPSession, envelope: SMTPEnvelope ) -> str: self.rcpt_tos = envelope.rcpt_tos self.peer = session.peer + if session.ssl: + self.starttls = True return await super().handle_DATA(server, session, envelope) 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() for addr in self.rcpt_tos: for mbox in self.mbox_finder(addr.lower()): @@ -68,7 +78,7 @@ def protocol_factory_starttls( ): logger.info("Got smtp client cb starttls") try: - handler = MyHandler(mails_path, mbox_finder) + handler = MyHandler(mails_path, mbox_finder, "starttls") smtp = SMTP( handler=handler, require_starttls=require_starttls, @@ -86,7 +96,7 @@ def protocol_factory( ): logger.info("Got smtp client cb") try: - handler = MyHandler(mails_path, mbox_finder) + handler = MyHandler(mails_path, mbox_finder, "plain") smtp = SMTP(handler=handler, enable_SMTPUTF8=smtputf8) except: logger.exception("Something went wrong") diff --git a/requirements.txt b/requirements.txt index 07bc9f1..6a8cbcd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ -i https://pypi.org/simple -aiosmtpd==1.4.5; python_version >= '3.8' +aiosmtpd==1.4.6; python_version >= '3.8' atpublic==4.1.0; python_version >= '3.8' attrs==23.2.0; python_version >= '3.7' python-jata==1.2; python_version >= '3.8' diff --git a/tests/test_smtp.py b/tests/test_smtp.py index b69b0c5..0554d4c 100644 --- a/tests/test_smtp.py +++ b/tests/test_smtp.py @@ -61,6 +61,7 @@ class TestSMTP(unittest.IsolatedAsyncioTestCase): X-Peer: ('127.0.0.1', {local_port}) X-MailFrom: foo@sender.com X-RcptTo: foo@bar.com + X-SSL: Type: plain, STARTTLS: False Hello world Byee