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:
Email im Posteingang:
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