예제 #1
0
    def test_recipientdomainsplit_apply_allbadrcpts(self):
        env = Envelope('*****@*****.**', ['rcpt1', 'rcpt2@'])
        env.parse("""\r\n\r\ntest test\r\n""")
        policy = RecipientDomainSplit()
        env1, env2 = policy.apply(env)

        assert_equal('*****@*****.**', env1.sender)
        assert_equal(['rcpt1'], env1.recipients)
        assert_equal('test test\r\n', env1.message)

        assert_equal('*****@*****.**', env2.sender)
        assert_equal(['rcpt2@'], env2.recipients)
        assert_equal('test test\r\n', env2.message)
    def test_recipientdomainsplit_apply_allbadrcpts(self):
        env = Envelope('*****@*****.**', ['rcpt1', 'rcpt2@'])
        env.parse(b"""\r\ntest test\r\n""")
        policy = RecipientDomainSplit()
        env1, env2 = policy.apply(env)

        self.assertEqual('*****@*****.**', env1.sender)
        self.assertEqual(['rcpt1'], env1.recipients)
        self.assertEqual(b'test test\r\n', env1.message)

        self.assertEqual('*****@*****.**', env2.sender)
        self.assertEqual(['rcpt2@'], env2.recipients)
        self.assertEqual(b'test test\r\n', env2.message)
    def test_recipientdomainsplit_apply(self):
        env = Envelope('*****@*****.**', ['*****@*****.**',
                                              '*****@*****.**',
                                              '*****@*****.**'])
        env.parse(b"""\r\ntest test\r\n""")
        policy = RecipientDomainSplit()
        env1, env2 = policy.apply(env)

        self.assertEqual('*****@*****.**', env1.sender)
        self.assertEqual(['*****@*****.**', '*****@*****.**'], env1.recipients)
        self.assertEqual(b'test test\r\n', env1.message)

        self.assertEqual('*****@*****.**', env2.sender)
        self.assertEqual(['*****@*****.**'], env2.recipients)
        self.assertEqual(b'test test\r\n', env2.message)
    def test_recipientdomainsplit_apply(self):
        env = Envelope('*****@*****.**', ['*****@*****.**',
                                              '*****@*****.**',
                                              '*****@*****.**'])
        env.parse("""\r\n\r\ntest test\r\n""")
        policy = RecipientDomainSplit()
        env1, env2 = policy.apply(env)

        assert_equal('*****@*****.**', env1.sender)
        assert_equal(['*****@*****.**', '*****@*****.**'], env1.recipients)
        assert_equal('test test\r\n', env1.message)

        assert_equal('*****@*****.**', env2.sender)
        assert_equal(['*****@*****.**'], env2.recipients)
        assert_equal('test test\r\n', env2.message)
예제 #5
0
def _start_outbound_queue(args, relay, inbound_queue):
    from slimta.queue.dict import DictStorage
    from slimta.queue import Queue
    from slimta.policy.headers import AddDateHeader, \
        AddMessageIdHeader, AddReceivedHeader
    from slimta.policy.split import RecipientDomainSplit

    envelope_db = {}
    meta_db = {}

    storage = DictStorage(envelope_db, meta_db)
    queue = Queue(storage, relay, bounce_queue=inbound_queue)
    queue.start()

    queue.add_policy(AddDateHeader())
    queue.add_policy(AddMessageIdHeader())
    queue.add_policy(AddReceivedHeader())
    queue.add_policy(RecipientDomainSplit())

    return queue
 def test_recipientdomainsplit_get_domain_groups(self):
     policy = RecipientDomainSplit()
     groups, bad_rcpts = policy._get_domain_groups(['*****@*****.**'])
     self.assertEqual({'example.com': ['*****@*****.**']}, groups)
     self.assertEqual([], bad_rcpts)
     groups, bad_rcpts = policy._get_domain_groups(['*****@*****.**', '*****@*****.**'])
     self.assertEqual({'example.com': ['*****@*****.**', '*****@*****.**']}, groups)
     self.assertEqual([], bad_rcpts)
     groups, bad_rcpts = policy._get_domain_groups(['*****@*****.**', '*****@*****.**', '*****@*****.**'])
     self.assertEqual({'example.com': ['*****@*****.**', '*****@*****.**'],
                       'test.com': ['*****@*****.**']}, groups)
     self.assertEqual([], bad_rcpts)
     groups, bad_rcpts = policy._get_domain_groups(['*****@*****.**', 'rcpt'])
     self.assertEqual({'example.com': ['*****@*****.**']}, groups)
     self.assertEqual(['rcpt'], bad_rcpts)
예제 #7
0
    def __init__(self):

        # Relay:
        ssl = SSLContext(PROTOCOL_SSLv23)
        ssl.load_cert_chain(config['SSL']['certificate_path'],
                            config['SSL']['key_path'])
        self.relay = MxSmtpRelay(context=ssl,
                                 connect_timeout=20,
                                 command_timeout=10,
                                 data_timeout=20,
                                 idle_timeout=30)

        # Queue:
        #env_db = shelve.open('msa_envelope')
        #meta_db = shelve.open('msa_meta')
        #storage = DictStorage(env_db, meta_db) # !!! replace with DiskStorage!  (installed via pip install python-slimta-diskstorage)
        storage = DiskStorage(config['MSA']['ds_env'],
                              config['MSA']['ds_meta'])

        def retry_backoff(envelope, attempts):
            if attempts < 10:
                return 60 * attempts * attempts  # try again at increasingly long intervals; give up after 10 tries (100 minutes)
            return None

        self.queue = Queue(storage, self.relay, backoff=retry_backoff)
        self.queue.start()

        # Headers:
        self.queue.add_policy(AddDateHeader())
        self.queue.add_policy(AddMessageIdHeader())
        self.queue.add_policy(AddReceivedHeader())
        self.queue.add_policy(RecipientDomainSplit())
        # !!! Add Forward policy here, to manage general forwarding (but not list distribution - do that in mda!)

        # Edge:
        self.edge = SmtpEdge(
            ('localhost', 587), self.queue, auth=False
        )  #, auth=True, validator_class=MSA_Validators) # ?!!! context=ssl, tls_immediately=True,
        self.edge.start()
예제 #8
0
 def test_recipientdomainsplit_get_domain(self):
     policy = RecipientDomainSplit()
     assert_equal('example.com', policy._get_domain('*****@*****.**'))
     assert_equal('example.com', policy._get_domain('*****@*****.**'))
     assert_raises(ValueError, policy._get_domain, 'rcpt@')
     assert_raises(ValueError, policy._get_domain, 'rcpt')
예제 #9
0
 def test_recipientdomainsplit_apply_onedomain(self):
     env = Envelope('*****@*****.**',
                    ['*****@*****.**', '*****@*****.**'])
     env.parse('')
     policy = RecipientDomainSplit()
     assert_false(policy.apply(env))
 def test_recipientdomainsplit_apply_onedomain(self):
     env = Envelope('*****@*****.**', ['*****@*****.**',
                                           '*****@*****.**'])
     env.parse(b'')
     policy = RecipientDomainSplit()
     self.assertFalse(policy.apply(env))
 def test_recipientdomainsplit_get_domain(self):
     policy = RecipientDomainSplit()
     self.assertEqual('example.com', policy._get_domain('*****@*****.**'))
     self.assertEqual('example.com', policy._get_domain('*****@*****.**'))
     self.assertRaises(ValueError, policy._get_domain, 'rcpt@')
     self.assertRaises(ValueError, policy._get_domain, 'rcpt')