code: async def login(
          self, username: str, password: str, timeout: DefaultNumType = _default
      ) -> SMTPResponse:
          
          await self._ehlo_or_helo_if_needed()
  
          if not self.supports_extension("auth"):
              raise SMTPException("SMTP AUTH extension not supported by server.")
  
          response = None  # type: Optional[SMTPResponse]
          exception = None  # type: Optional[SMTPAuthenticationError]
          for auth_name in self.supported_auth_methods:
              method_name = "auth_{}".format(auth_name.replace("-", ""))
              try:
                  auth_method = getattr(self, method_name)
              except AttributeError:
                  raise RuntimeError(
                      "Missing handler for auth method {}".format(auth_name)
                  )
              try:
                  response = await auth_method(username, password, timeout=timeout)
              except SMTPAuthenticationError as exc:
                  exception = exc
              else:
                  # No exception means we're good
                  break
  
          if response is None:
              raise exception or SMTPException("No suitable authentication method found.")
  
          return response
docs: Tries to login with supported auth methods.
  
          Some servers advertise authentication methods they don't really
          support, so if authentication fails, we continue until we've tried
          all methods.