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