Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#1

Emails über Microsoft Graph API senden (mit Sourcecode)

  Alt 5. Jan 2024, 20:16
In einigen Beiträgen wurde hier das Thema Graph API im Zusammenhang mit Versand von Emails angesprochen.

Die API wird hier beschrieben: https://learn.microsoft.com/de-de/graph/api/user-get

Das für den Aufruf der API notwendige Access-Token erhält man über den "OAuth 2.0 authorization Endpunkt (v2)" in Microsoft Entra (ehemals Azure). Dieser ist eine Web-URL, zum Beispiel 'https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize'.

Auf GitHub habe ich eine neue Beispielanwendung für ein Indy-basiertes Webserver-Framework veröffentlicht, die den Ablauf mit wenig Code implementiert. Sie startet den System-Webbrowser und leitet zur Anmeldung bei Microsoft weiter. Nach erfolgreicher Autorisierung des Zugriffs sendet die Anwendung dann eine Email an mich .

Dazu wird per HTTP POST ein JSON Dokument an die Graph API gesendet:

Delphi-Quellcode:
function TRootResource.SendMail(const AccessToken: string): string;
const
  JSON =
     '{'+ #10
    +' "message": {'+ #10
    +' "subject": "Meet for lunch?",'+ #10
    +' "body": {'+ #10
    +' "contentType": "Text",'+ #10
    +' "content": "The new cafeteria is open."'+ #10
    +' },'+ #10
    +' "toRecipients": ['+ #10
    +' {'+ #10
    +' "emailAddress": {'+ #10
    +' "address": "info@habarisoft.com"'+ #10
    +' }'+ #10
    +' }'+ #10
    +' ]'+ #10
    +' },'+ #10
    +' "saveToSentItems": "false"'+ #10
    +'}';
var
  HTTP: TIdHTTP;
  IOHandler: TIdSSLIOHandlerSocketOpenSSL;
  RequestBody: TStream;
  ResponseBody: string;
begin
  WriteLn(JSON);

  HTTP := TIdHTTP.Create;
  try
    try
      IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
      IOHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
      HTTP.IOHandler := IOHandler;
      HTTP.Request.CustomHeaders.Values['Authorization'] := 'Bearer ' + AccessToken;
      HTTP.Request.ContentType := 'application/json';
      RequestBody := TStringStream.Create(JSON, TEncoding.UTF8);
      ResponseBody := HTTP.Post('https://graph.microsoft.com/v1.0/me/sendMail', RequestBody);
      WriteLn('Response: "' + ResponseBody + '"');
    except
      on E: EIdHTTPProtocolException do
      begin
        WriteLn(E.Message);
        WriteLn(E.ErrorMessage);
        raise;
      end;
      on E: Exception do
      begin
        WriteLn(E.Message);
        raise;
      end;
    end;
  finally
    HTTP.Free;
  end;
end;
Screenshot der Web Browser - Seite nach dem Emailversand:

screenshot-2024-01-05-201317.png

Email im Posteingang:

screenshot-2024-01-05-201011.png

Download der Anwendung:
https://github.com/michaelJustin/dar...emo/tutorial12

Voraussetzungen: Indy, Delphi 2009 oder neuer (oder Lazarus / FPC 3.2)



Bonus: wer als Erster / Erste mir auf diesem Weg eine Email sendet, erhält eine kostenlose kommerzielle Lizenz des Frameworks
Michael Justin

Geändert von mjustin ( 6. Jan 2024 um 19:36 Uhr) Grund: Link updated
  Mit Zitat antworten Zitat