docs: async def data(
          self, message: Union[str, bytes], timeout: DefaultNumType = _default
      ) -> SMTPResponse:
          """
          Send an SMTP DATA command, followed by the message given.
          This method transfers the actual email content to the server.
  
          :raises SMTPDataError: on unexpected server response code
          :raises SMTPServerDisconnected: connection lost
          """
          await self._ehlo_or_helo_if_needed()
          # As data accesses protocol directly, some handling is required
          self._raise_error_if_disconnected()
  
          if timeout is _default:
              timeout = self.timeout  # type: ignore
  
          if isinstance(message, str):
              message = message.encode("ascii")
  
          async with self._command_lock:
              start_response = await self.execute_command(b"DATA", timeout=timeout)
  
              if start_response.code != SMTPStatus.start_input:
                  raise SMTPDataError(start_response.code, start_response.message)
  
              try:
                  await self.protocol.write_message_data(  # type: ignore
                      message, timeout=timeout
                  )
                  response = await self.protocol.read_response(  # type: ignore
                      timeout=timeout
                  )
              except SMTPServerDisconnected as exc:
                  self.close()
                  raise exc
  
          if response.code != SMTPStatus.completed:
              raise SMTPDataError(response.code, response.message)
  
          return response