Example #1
0
 def setUp(self):
     handler = Proxy('localhost', 9025)
     controller = DecodingController(handler)
     controller.start()
     self.addCleanup(controller.stop)
     self.address = (controller.hostname, controller.port)
     self.source = """\
Example #2
0
    def setUp(self):
        # There are two controllers and two SMTPd's running here.  The
        # "upstream" one listens on port 9025 and is connected to a "data
        # handler" which captures the messages it receives.  The second -and
        # the one under test here- listens on port 9024 and proxies to the one
        # on port 9025.  Because we need to set the decode_data flag
        # differently for each different test, the controller of the proxy is
        # created in the individual tests, not in the setup.
        self.upstream = DataHandler()
        upstream_controller = Controller(self.upstream, port=9025)
        upstream_controller.start()
        self.addCleanup(upstream_controller.stop)
        self.proxy = Proxy(upstream_controller.hostname, 9025)
        self.source = """\
From: Anne Person <*****@*****.**>
To: Bart Person <*****@*****.**>
Subject: A test

Testing
"""
        # The upstream SMTPd will always receive the content as bytes
        # delimited with CRLF.
        self.expected = CRLF.join([
            'From: Anne Person <*****@*****.**>',
            'To: Bart Person <*****@*****.**>',
            'Subject: A test',
            'X-Peer: ::1',
            '',
            'Testing\r\n']).encode('ascii')
Example #3
0
 def setUp(self):
     self.stream = StringIO()
     handler = Proxy('localhost', 9025)
     controller = UTF8Controller(handler)
     controller.start()
     self.addCleanup(controller.stop)
     self.address = (controller.hostname, controller.port)
     self.message = """\
Example #4
0
def proxy_decoding_controller(
        upstream_controller, get_controller
) -> Generator[Union[Controller, KnowsUpstream], None, None]:
    proxy_handler = Proxy(upstream_controller.hostname,
                          upstream_controller.port)
    proxy_controller = get_controller(proxy_handler, decode_data=True)
    proxy_controller.upstream = upstream_controller
    proxy_controller.start()
    Global.set_addr_from(proxy_controller)
    #
    yield proxy_controller
    #
    proxy_controller.stop()
#!/usr/bin/env python
import os, email, logging, asyncio
from email.mime.text import MIMEText
from aiosmtpd.handlers import Proxy
from aiosmtpd.controller import Controller

proxy = Proxy(os.environ.get("REMOTE_HOSTNAME", "mail-relay"),
              os.environ.get("REMOTE_PORT", 587))


class FixerHandler:
    async def handle_DATA(self, server, session, envelope):
        print("Message from {} to {}".format(envelope.mail_from,
                                             envelope.rcpt_tos))
        msg = email.message_from_string(envelope.content.decode("utf-8"))
        if msg.get_content_maintype() != "text":
            content_types = [
                part.get_content_type() for part in msg.get_payload()
            ]
            if len([
                    ct for ct in content_types
                    if any(body_cts in ct for body_cts in ["plain", "html"])
            ]) == 0:
                msg.set_payload([MIMEText("--", "plain")] + msg.get_payload())
                envelope.content = msg.as_string()
                envelope.original_content = msg.as_string().encode("utf-8")
                print("Inserted TextBody '--'")
        return await proxy.handle_DATA(server, session, envelope)


async def amain(loop):