anchor.diff:    IdSASL_CRAM_SHA1, IdSASL, IdSASLUserPass, IdSASL_CRAM_MD5,
     IdSASLSKey, IdSASLPlain, IdSASLOTP, IdSASLExternal,
     IdSASLAnonymous, IdUserPassProvider,
  +  IdSASLCollection, {$IFDEF OUTLOOK_OAUTH2_AVAILABLE}IdSASLOAuth,{$ENDIF}
     mUtility{$IFDEF MLOG_AVAILABLE}, mLog{$ENDIF};
   
   {$IFDEF MLOG_AVAILABLE}
  
positive.code:   FSSLConnection:= false;
    FTLSConnection:= false;
    FReceivedMails := TObjectList.Create(true);
  end;
  
  destructor TGetMailPop3.Destroy;
  
negative.code: 
      tmpPop3.ConnectTimeout:= 5000;
  
      if FAuthentication = paOutlookOAuth2 then
      begin
        // https://github.com/IndySockets/Indy/issues/192
        {$IFDEF OUTLOOK_OAUTH2_AVAILABLE}
        tmpPop3.AutoLogin := false;
        tmpPop3.IOHandler := TidSSLioHandlerSocketOpenSSL.create;
        xoauthSASL := tmpPop3.SASLMechanisms.Add;
        xoauthSASL.SASL := TIdSASLXOAuth2.Create(nil);
        TIdSASLXOAuth2(xoauthSASL.SASL).OnGetAccessToken := @IdSASLXOAuth21GetAccessToken;
        TIdSASLXOAuth2(xoauthSASL.SASL).UserPassProvider := TIdUserPassProvider.Create();
        TIdSASLXOAuth2(xoauthSASL.SASL).UserPassProvider.Username := FUserName;
        tmpPop3.SASLCanAttemptInitialResponse := false;
  
        tmpPop3.AuthType := patSASL;
        {$ELSE}
        raise Exception.Create('paOutlookOAuth2 not available');
        {$ENDIF}
      end
      else
      begin
        tmpPop3.AuthType := patUserPass;
        if FUserName <> '' then
          tmpPop3.Username:= FUserName;
        if FPassword <> '' then
          tmpPop3.Password:= FPassword;
      end;
  
      error:= false;
      try
        tmpPop3.Connect;
        {$IFDEF OUTLOOK_OAUTH2_AVAILABLE}
        if FAuthentication = paOutlookOAuth2 then
        begin
          tmpPop3.CAPA;
          tmpPop3.Login;
        end;
        {$ENDIF}
        try
          numMessages := tmpPop3.CheckMessages;
          For i := 1 to numMessages do
  