code: async def auth_login(
          self, username: str, password: str, timeout: DefaultNumType = _default
      ) -> SMTPResponse:
          
          encoded_username = base64.b64encode(username.encode("ascii"))
          encoded_password = base64.b64encode(password.encode("ascii"))
  
          async with self._command_lock:
              initial_response = await self.execute_command(
                  b"AUTH", b"LOGIN", encoded_username, timeout=timeout
              )
  
              if initial_response.code != SMTPStatus.auth_continue:
                  raise SMTPAuthenticationError(
                      initial_response.code, initial_response.message
                  )
  
              response = await self.execute_command(encoded_password, timeout=timeout)
  
          if response.code != SMTPStatus.auth_successful:
              raise SMTPAuthenticationError(response.code, response.message)
  
          return response
docs: LOGIN auth sends the Base64 encoded username and password in sequence.
  
          Example::
  
              250 AUTH LOGIN PLAIN CRAM-MD5
              auth login avlsdkfj
              334 UGFzc3dvcmQ6
              avlsdkfj
  
          Note that there is an alternate version sends the username
          as a separate command::
  
              250 AUTH LOGIN PLAIN CRAM-MD5
              auth login
              334 VXNlcm5hbWU6
              avlsdkfj
              334 UGFzc3dvcmQ6
              avlsdkfj
  
          However, since most servers seem to support both, we send the username
          with the initial request.