def resolve(self, aliasmap, memo=None): """ Map this alias to its ultimate destination. @type aliasmap: L{dict} mapping L{bytes} to L{AliasBase} @param aliasmap: A mapping of username to alias or group of aliases. @type memo: L{NoneType <types.NoneType>} or L{dict} of L{AliasBase} @param memo: A record of the aliases already considered in the resolution process. If provided, C{memo} is modified to include this alias. @rtype: L{IMessage <smtp.IMessage>} or L{NoneType <types.NoneType>} @return: A message receiver for the ultimate destination or None for an invalid destination. """ if memo is None: memo = {} if str(self) in memo: return None memo[str(self)] = None try: return self.domain().exists( smtp.User(self.alias, None, None, None), memo)() except smtp.SMTPBadRcpt: pass if self.alias.local in aliasmap: return aliasmap[self.alias.local].resolve(aliasmap, memo) return None
def test_authenticatedReceivedHeader(self): """ Test that something at least minimally reasonable comes back from the receivedHeader method of L{AuthenticatedMessageDelivery}. """ avatar = self.login.accountByAddress(u'testuser', u'localhost') composer = IMessageSender(avatar) delivery = mail.AuthenticatedMessageDelivery(composer.store, composer) header = delivery.receivedHeader( ("example.com", "192.168.123.45"), smtp.Address("testuser@localhost"), [smtp.User("*****@*****.**", None, None, None), smtp.User("*****@*****.**", None, None, None)]) self.failUnless( isinstance(header, str), "Got %r instead of a string" % (header,))
def test_invalid_domain(self): """Tests sending to a domain we don't have mappings for.""" rcpt = smtp.User("*****@*****.**", None, object(), self.sender) ret = self._sendMessage(rcpt, False) ret.addCallbacks(self.fail, lambda failure: failure.trap(smtp.SMTPBadRcpt)) ret.addCallback(self._checkLogs, [("user", "invaliddomain.com", logging.ERROR, str(self.sender), str(rcpt.dest), 0)]) return ret
def test_invalid_address(self): """Tests sending to an invalid address.""" rcpt = smtp.User("*****@*****.**", None, object(), self.sender) ret = self._sendMessage(rcpt, False) ret.addCallbacks(self.fail, lambda failure: failure.trap(smtp.SMTPBadRcpt)) ret.addCallback(self._checkLogs, [("doesnotexist", "smtp2web.com", logging.ERROR, str(self.sender), str(rcpt.dest), 0)]) return ret
def test_send_message(self): """Checks overall message sending.""" rcpt = smtp.User("*****@*****.**", None, object(), self.sender) ret = self._sendMessage(rcpt) handler = self.settings.usermap['smtp2web.com'].findHandler("test") ret.addCallback(lambda x: self.failUnlessEqual(handler.invocations, [( str(self.sender), str(rcpt.dest), self.test_message)])) ret.addCallback( self._checkLogs, [("test", "smtp2web.com", logging.DEBUG, str( self.sender), str(rcpt.dest), len(self.test_message))]) return ret
def test_send_wildcard(self): """Tests sending a message to a wildcard mapping.""" rcpt = smtp.User("*****@*****.**", None, object(), self.sender) ret = self._sendMessage(rcpt) handler = self.settings.usermap['testdomain.com'].findHandler("test") ret.addCallback(lambda x: self.failUnlessEqual(handler.invocations, [( str(self.sender), str(rcpt.dest), self.test_message)])) ret.addCallback( self._checkLogs, [("", "testdomain.com", logging.DEBUG, str( self.sender), str(rcpt.dest), len(self.test_message))]) return ret
def resolve(self, aliasmap, memo=None): if memo is None: memo = {} if str(self) in memo: return None memo[str(self)] = None try: return self.domain().exists(smtp.User(self.alias, None, None, None), memo)() except smtp.SMTPBadRcpt: pass if self.alias.local in aliasmap: return aliasmap[self.alias.local].resolve(aliasmap, memo) return None
def test_send_fail(self): """Tests sending with a handler that raises an exception.""" rcpt = smtp.User("*****@*****.**", None, object(), self.sender) ret = self._sendMessage(rcpt) ret.addCallbacks( self.fail, lambda failure: failure.trap(smtp2web.MessageSubmissionError)) handler = self.settings.usermap['smtp2web.com'].findHandler("fail") ret.addCallback(lambda x: self.failUnlessEqual(handler.invocations, [( str(self.sender), str(rcpt.dest), self.test_message)])) ret.addCallback( self._checkLogs, [("fail", "smtp2web.com", logging.ERROR, str( self.sender), str(rcpt.dest), len(self.test_message))]) return ret
def test_message_too_long(self): """Tests sending a message that's too long.""" rcpt = smtp.User("*****@*****.**", None, object(), self.sender) self.test_message += "-" * 256 ret = self._sendMessage(rcpt) def _checkFailure(failure): failure.trap(smtp.SMTPServerError) self.failUnlessEqual(failure.value.code, 552) ret.addCallbacks(self.fail, _checkFailure) ret.addCallback( self._checkLogs, [("test", "smtp2web.com", logging.ERROR, str( self.sender), str(rcpt.dest), len(self.test_message))]) return ret
def testUser(self): u = smtp.User('user@host', 'helo.host.name', None, None) self.assertEquals(str(u), 'user@host')
def validatedFrom(ign): return gatherResults([ delivery.validateTo( smtp.User( smtp.Address(addr), None, None, None)) for addr in self.MULTI_RECIPIENT_ADDRESSES])
def validatedFrom(ign): d = delivery.validateTo( smtp.User( smtp.Address('nonexistent', 'localhost'), None, None, None)) return self.assertFailure(d, smtp.SMTPBadRcpt)
def validatedFrom(ign): d = delivery.validateTo( smtp.User( smtp.Address('administrator', 'example.com'), None, None, None)) return d
def validatedFrom(ign): d = delivery.validateTo( smtp.User( smtp.Address('administrator', 'localhost'), None, None, None)) return d
def validatedFrom(ign): d = delivery.validateTo( smtp.User( smtp.Address('*****@*****.**'), None, None, None)) return self.assertFailure(d, smtp.SMTPBadRcpt)
def validatedFrom(ign): d = delivery.validateTo( smtp.User( smtp.Address('testuser', 'localhost'), None, None, None)) return d