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)
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)
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()
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')
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')