AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy und OAuth / Microsoft365
Thema durchsuchen
Ansicht
Themen-Optionen

Indy und OAuth / Microsoft365

Ein Thema von friedt99 · begonnen am 5. Sep 2023 · letzter Beitrag vom 7. Sep 2023
 
friedt99

Registriert seit: 17. Mär 2010
45 Beiträge
 
#1

Indy und OAuth / Microsoft365

  Alt 5. Sep 2023, 12:07
Hallo Zusammen,

ich versuche mich an microsoft365 und SMTP mit OAuth.
Habe nach diversen Anleitungen eine App dort angelegt und entsprechende Rechte eingerichtet.

Aktuell beziehe ich einen Token über eine Komponenten von https://www.esegece.com/websockets,
das klappt soweit.

Was nicht klappt ist der Indy SMTP Teil. Hier die Funktion mit der per OAuth eine Mail gesendet werden soll.

Delphi-Quellcode:
procedure TForm1.SendSMTP(ptToken:String);
Var lcSMTP:TIdSMTP;
    lcMail:TIdMessage;
    lcRec:TIdEMailAddressItem;
    ltAuth:String;
    lcAuthSASL:TIdSASLListEntry;
    lcIdSSLIOHandlerSocketSMTP:TidSSLIOHandlerSocketOpenSSL;
    lcUserPass:TIdUserPassProvider;
    lcDebug:TIdLogDebug;
begin
  lcSMTP:=TIdSMTP.Create;
  Try
    lcSMTP.Host:='smtp.office365.com';
    lcSMTP.Port:=587;

    lcMail:=TIdMessage.Create(lcSMTP);
    Try
      lcMail.Encoding:=meMime;
      lcRec:=lcMail.Recipients.Add;
      lcRec.Address:='XXX@YYY.de';
      lcRec.Name:='XXX@YYY.de';

      lcMail.Subject:='Test';
      lcMail.Body.Text:='Testnachricht via OAuth';

      lcIdSSLIOHandlerSocketSMTP:=TidSSLIOHandlerSocketOpenSSL.Create(lcSMTP);
      lcIdSSLIOHandlerSocketSMTP.SSLOptions.SSLVersions:=[sslvTLSv1_2];

      lcUserPass:=TIdUserPassProvider.Create(lcSMTP);
      lcUserPass.Username:='myname@test.onmicrosoft.com';
      lcUserPass.Password:=ptToken;

      lcAuthSASL:=lcSMTP.SASLMechanisms.Add;
      lcAuthSASL.SASL:=TIdSASLXOAuth2.Create(lcSMTP);
      TIdSASLXOAuth2(lcAuthSASL.SASL).UserPassProvider:=lcUserPass;

      lcDebug:=TIdLogDebug.Create(lcSMTP);
      lcDebug.OnReceive:=DoAddLogReceive;
      lcDebug.OnSend:=DoAddLogSend;

      lcSMTP.Intercept:=lcDebug;
      lcSMTP.AuthType:=satSASL;
      lcSMTP.Connect;

      --------------------------------------
      - hier wird eine Exception ausgelöst -
      --------------------------------------
      lcSMTP.Authenticate;

      lcSMTP.Send(lcMail);
    Finally
      lcMail.Free;
    End;
    lcSMTP.Disconnect;
  Finally
    lcSMTP.Free;
  End;
end;
Der Token sieht wie folgt aus (gekürzt)

Code:
{"token_type":"Bearer","expires_in":3599,"ext_expires_in":3599,"access_token":"eyJ0eXAiOiJKV1Q...iLCJub}
Über IdLogDebug kommen folgende Ausgaben:

Zitat:
<- 220 FR3P281CA0153.outlook.office365.com Microsoft ESMTP MAIL Service ready at Tue, 5 Sep 2023 10:40:17 +0000

-> EHLO VM054

<- 250-FR3P281CA0153.outlook.office365.com Hello [91.66.249.39]
250-SIZE 157286400
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-STARTTLS
250-8BITMIME
250-BINARYMIME
250-CHUNKING
250 SMTPUTF8

Error Access Token: invalid_request Doesn't support AUTH or the specified SASL handlers!!
Auslöser ist, das bei der Rückmeldung nach dem EHLO der Wert "XOAUTH" fehlt.

Aber was kann der Grund dafür sein ? Ist der Token nicht korrekt ? Nutze ich Indy an der Stelle falsch ?

Vielen Dank für eure Hilfe.
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz