示例#1
0
    def recv_command(self):
        line = self.recv_line()
        cmd_match = command_pattern.match(line)

        if cmd_match:
            return printable_decode(cmd_match.group(1).upper()), None
        cmd_arg_match = command_arg_pattern.match(line)
        if cmd_arg_match:
            return (
                printable_decode(cmd_arg_match.group(1).upper()),
                printable_decode(cmd_arg_match.group(2)))

        return None, None
示例#2
0
文件: io.py 项目: sk1p/python-slimta
    def recv_command(self):
        """ Receive a SMTP command

        :return: (command, arg)
        :rtype: (:py:obj:`str`, :py:obj:`str`)
        """
        line = self.recv_line()
        cmd_match = command_pattern.match(line)

        if cmd_match:
            return printable_decode(cmd_match.group(1).upper()), None
        cmd_arg_match = command_arg_pattern.match(line)
        if cmd_arg_match:
            return (
                printable_decode(cmd_arg_match.group(1).upper()),
                printable_decode(cmd_arg_match.group(2)))

        return None, None
示例#3
0
    def recv_reply(self):
        code = None
        message_lines = []
        incomplete = True
        input = self.recv_buffer

        while incomplete:
            start_i = 0
            while start_i is not None:
                match = reply_line_pattern.match(input, start_i)
                if match:
                    if code and code != match.group(2):
                        raise BadReply(match.group(1))
                    code = match.group(2)
                    message_lines.append(match.group(4))

                    if code[0] in '45':
                        self.last_error = True
                        self.last_error_code = code
                        self.last_error_message = match.group(4)

                    self.recv_buffer = input[match.end(0):]

                    if match.group(3) != b'-':
                        incomplete = False
                        start_i = None
                    else:
                        start_i = match.end(0)
                else:
                    match = line_pattern.match(input, start_i)
                    if match:
                        self.recv_buffer = input[match.end(0):]
                        message_lines.append(match.group(1))
                        raise BadReply(
                            printable_decode(b'\r\n'.join(message_lines)))
                    else:
                        start_i = None

            if incomplete:
                self.buffered_recv()
                input = self.recv_buffer
            body = b'\r\n'.join(message_lines)

        return printable_decode(code), printable_decode(body)