In Lektion 2.8.5 („Mails verschicken, bestätigt“) hat die Kladde ihre erste Mail über Microsoft Graph gebaut: ein GraphMailSender mit einem HttpClient, einem TokenCredential und dem JSON von Hand. Das hat funktioniert, aber es war Handarbeit: Adresse zusammensetzen, Token holen, Kopfzeile setzen, Records für jede Form des JSON. Das Graph-SDK nimmt Ihnen genau diese Arbeit ab. Diese Lektion stellt den Versand um, ergänzt, was ein Büro rund um Mail noch braucht (Anhänge, Entwurf, Postfach lesen), und hält dabei fest, was an der Lösung aus K2 richtig war und deshalb bleibt.

Ein Wort vorweg zur Ehrlichkeit dieses Kurses: Kein Befehl und kein Code dieser Lektion wurde gegen einen Microsoft-365-Mandanten ausgeführt. Jede Aussage über Adressen, Parameter, Grenzen und Antwortcodes stammt aus Microsoft Learn, gelesen für diese Lektion; Antworten des Dienstes werden beschrieben, nicht vorgeführt. Wo Learn eine Frage offen lässt, steht es als „nicht gelesen“ oder „offen“ im Text. Jede Übung, die einen Mandanten braucht, sagt das und hat einen Teil, der ohne ihn läuft.

Teil Was entsteht
Entscheidung SDK statt HttpClient: was bleibt (Port, Outbox, Zuordnung der Antworten), was fällt (Token, Adresse, JSON von Hand)
Senden sendMail mit dem SDK, saveToSentItems, Kopfzeile mit der Kennung, Anhänge, Entwurf
Lesen Postfach lesen: Ordner, $filter, $orderby, $search, nur die Felder, die die Kladde braucht
Rechte und Daten Mail.Send und Mail.Read als Anwendung, Einschränkung auf ein Postfach, Datenschutz
Test eine eigene Schnittstelle als Naht: der Kern sieht nie den GraphServiceClient

Wo die Kladde steht

Aus K2 haben Sie, und diese Lektion setzt es voraus:

  • den Port IMailSender mit OutgoingMail(Guid Id, string To, string Subject, string Text) und dem Ergebnis DeliveryOutcome (Delivered, NotDelivered, Unclear), Lektion 2.8.5;
  • die Outbox und ihren Zusteller (Lektion 2.8.4, „Das Outbox-Muster“) mit der Regel „unklar wird nie blind wiederholt“ (Lektion 2.8.3, „Wiederholen, ohne doppelt zu senden“);
  • einen TokenCredential in der Dienstesammlung: in K2 ein Client-Geheimnis aus den User Secrets, mit K3 (Lektion 3.3.1, verwaltete Identität) ohne Geheimnis;
  • das Testmuster mit einem nachgemachten Handler (Lektion 2.8.1, „HttpClientFactory und eine fremde Schnittstelle“).

Neu kommt ein Projekt Kladde.Graph dazu. Es hängt von Kladde.Core ab und von den Paketen Microsoft.Graph und Azure.Identity; Kladde.Web verweist darauf. Der Kern (Kladde.Core) kennt weder das SDK noch Graph, das ist die Regel dieses ganzen Moduls: Die Kladde besitzt ihre Schnittstellen, das SDK steht dahinter.