Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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,))
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
 def testUser(self):
     u = smtp.User('user@host', 'helo.host.name', None, None)
     self.assertEquals(str(u), 'user@host')
Exemplo n.º 11
0
 def validatedFrom(ign):
     return gatherResults([
             delivery.validateTo(
                 smtp.User(
                     smtp.Address(addr), None, None, None))
             for addr in self.MULTI_RECIPIENT_ADDRESSES])
Exemplo n.º 12
0
 def validatedFrom(ign):
     d = delivery.validateTo(
         smtp.User(
             smtp.Address('nonexistent', 'localhost'),
             None, None, None))
     return self.assertFailure(d, smtp.SMTPBadRcpt)
Exemplo n.º 13
0
 def validatedFrom(ign):
     d = delivery.validateTo(
         smtp.User(
             smtp.Address('administrator', 'example.com'),
             None, None, None))
     return d
Exemplo n.º 14
0
 def validatedFrom(ign):
     d = delivery.validateTo(
         smtp.User(
             smtp.Address('administrator', 'localhost'),
             None, None, None))
     return d
Exemplo n.º 15
0
 def validatedFrom(ign):
     d = delivery.validateTo(
         smtp.User(
             smtp.Address('*****@*****.**'),
             None, None, None))
     return self.assertFailure(d, smtp.SMTPBadRcpt)
Exemplo n.º 16
0
 def validatedFrom(ign):
     d = delivery.validateTo(
         smtp.User(
             smtp.Address('testuser', 'localhost'),
             None, None, None))
     return d