code: async def read_response(self, timeout: NumType = None) -> SMTPResponse:
          
          if self._stream_reader is None:
              raise SMTPServerDisconnected("Client not connected")
  
          code = None
          response_lines = []
  
          while True:
              async with self._io_lock:
                  line = await self._readline(timeout=timeout)
              try:
                  code = int(line[:3])
              except ValueError:
                  pass
  
              message = line[4:].strip(b" \t\r\n").decode("utf-8", "surrogateescape")
              response_lines.append(message)
  
              if line[3:4] != b"-":
                  break
  
          full_message = "\n".join(response_lines)
  
          if code is None:
              raise SMTPResponseException(
                  SMTPStatus.invalid_response.value,
                  "Malformed SMTP response: {}".format(full_message),
              )
  
          return SMTPResponse(code, full_message)
docs: Get a status reponse from the server.
  
          Returns an SMTPResponse namedtuple consisting of:
            - server response code (e.g. 250, or such, if all goes well)
            - server response string corresponding to response code (multiline
              responses are converted to a single, multiline string).