Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel erweitern Sie die Anwendung, die Sie unter Erstellen von Java-Apps mit Microsoft Graph mit Microsoft Graph-E-Mail-APIs erstellt haben. Sie verwenden Microsoft Graph, um den Posteingang des Benutzers aufzulisten und eine E-Mail zu senden.
Auflisten des Posteingangs des Benutzers
Beginnen Sie mit dem Auflisten von Nachrichten im E-Mail-Posteingang des Benutzers.
Öffnen Sie Graph.java , und fügen Sie der -Klasse die
Graphfolgende Funktion hinzu.public static MessageCollectionResponse getInbox() throws Exception { // Ensure client isn't null if (_userClient == null) { throw new Exception("Graph has not been initialized for user auth"); } return _userClient.me() .mailFolders() .byMailFolderId("inbox") .messages() .get(requestConfig -> { requestConfig.queryParameters.select = new String[] { "from", "isRead", "receivedDateTime", "subject" }; requestConfig.queryParameters.top = 25; requestConfig.queryParameters.orderby = new String[] { "receivedDateTime DESC" }; }); }Ersetzen Sie die leere
listInboxFunktion in App.java durch Folgendes.private static void listInbox() { try { final MessageCollectionResponse messages = Graph.getInbox(); // Output each message's details for (Message message: messages.getValue()) { System.out.println("Message: " + message.getSubject()); System.out.println(" From: " + message.getFrom().getEmailAddress().getName()); System.out.println(" Status: " + (message.getIsRead() ? "Read" : "Unread")); System.out.println(" Received: " + message.getReceivedDateTime() // Values are returned in UTC, convert to local time zone .atZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime() .format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT))); } final Boolean moreMessagesAvailable = messages.getOdataNextLink() != null; System.out.println("\nMore messages available? " + moreMessagesAvailable); } catch (Exception e) { System.out.println("Error getting inbox"); System.out.println(e.getMessage()); } }Führen Sie die App aus, melden Sie sich an, und wählen Sie Option 2 aus, um Ihren Posteingang aufzulisten.
Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 2 Message: Updates from Ask HR and other communities From: Contoso Demo on Yammer Status: Read Received: 12/30/2021, 4:54:54 AM Message: Employee Initiative Thoughts From: Patti Fernandez Status: Read Received: 12/28/2021, 5:01:10 PM Message: Voice Mail (11 seconds) From: Alex Wilber Status: Unread Received: 12/28/2021, 5:00:46 PM Message: Our Spring Blog Update From: Alex Wilber Status: Unread Received: 12/28/2021, 4:49:46 PM Message: Atlanta Flight Reservation From: Alex Wilber Status: Unread Received: 12/28/2021, 4:35:42 PM Message: Atlanta Trip Itinerary - down time From: Alex Wilber Status: Unread Received: 12/28/2021, 4:22:04 PM ... More messages available? true
getInbox erklärt
Betrachten Sie den Code in der getInbox Funktion.
Zugreifen auf bekannte E-Mail-Ordner
Die Funktion verwendet den Anforderungs-Generator _userClient.me().mailFolders().byMailFolderId("inbox").messages() , der eine Anforderung an die Api zum Auflisten von Nachrichten erstellt. Da sie den Anforderungs-Generator byMailFolderId("inbox") enthält, gibt die API nur Nachrichten im angeforderten E-Mail-Ordner zurück. Da der Posteingang in diesem Fall ein bekannter Standardordner innerhalb des Postfachs eines Benutzers ist, ist er über seinen bekannten Namen zugänglich. Auf nicht standardmäßige Ordner wird auf die gleiche Weise zugegriffen, indem der bekannte Name durch die ID-Eigenschaft des E-Mail-Ordners ersetzt wird. Ausführliche Informationen zu den verfügbaren bekannten Ordnernamen finden Sie unter mailFolder-Ressourcentyp.
Zugreifen auf eine Sammlung
Im Gegensatz zur getUser Funktion aus dem vorherigen Abschnitt, die ein einzelnes Objekt zurückgibt, gibt diese Methode eine Auflistung von Nachrichten zurück. Die meisten APIs in Microsoft Graph, die eine Sammlung zurückgeben, geben nicht alle verfügbaren Ergebnisse in einer einzigen Antwort zurück. Stattdessen verwenden sie Paging , um einen Teil der Ergebnisse zurückzugeben, während eine Methode für Clients bereitgestellt wird, um die nächste Seite anzufordern.
Standardseitengrößen
APIs, die Paging verwenden, implementieren eine Standardseitengröße. Für Nachrichten ist der Standardwert 10. Clients können mithilfe des abfrageparameters $top mehr (oder weniger) anfordern. In getInboxerfolgt das Hinzufügen $top mit der top -Eigenschaft in der Anforderungskonfiguration.
Hinweis
Der in top festgelegte Wert ist eine obere Grenze, keine explizite Zahl. Die API gibt eine Anzahl von Nachrichten bis zum angegebenen Wert zurück.
Abrufen nachfolgender Seiten
Wenn auf dem Server weitere Ergebnisse verfügbar sind, enthalten Sammlungsantworten eine @odata.nextLink Eigenschaft mit einer API-URL für den Zugriff auf die nächste Seite. Die Java-Clientbibliothek stellt die getOdataNextLink -Methode für Sammlungsantwortobjekte bereit. Wenn diese Methode ungleich NULL zurückgibt, stehen weitere Ergebnisse zur Verfügung.
Sortieren von Sammlungen
Die Funktion verwendet die orderBy -Eigenschaft für die Anforderungskonfiguration, um Ergebnisse anzufordern, die nach dem Zeitpunkt des Nachrichteneingangs sortiert sind (receivedDateTime -Eigenschaft). Sie enthält die DESC Schlüsselwort (keyword), sodass kürzlich empfangene Nachrichten zuerst aufgeführt werden. Diese Eigenschaft fügt dem API-Aufruf den Abfrageparameter $orderby hinzu.
Nachrichten senden
Fügen Sie nun die Möglichkeit hinzu, eine E-Mail-Nachricht als authentifizierten Benutzer zu senden.
Öffnen Sie Graph.java , und fügen Sie der -Klasse die
Graphfolgende Funktion hinzu.public static void sendMail(String subject, String body, String recipient) throws Exception { // Ensure client isn't null if (_userClient == null) { throw new Exception("Graph has not been initialized for user auth"); } // Create a new message final Message message = new Message(); message.setSubject(subject); final ItemBody itemBody = new ItemBody(); itemBody.setContent(body); itemBody.setContentType(BodyType.Text); message.setBody(itemBody); final EmailAddress emailAddress = new EmailAddress(); emailAddress.setAddress(recipient); final Recipient toRecipient = new Recipient(); toRecipient.setEmailAddress(emailAddress); message.setToRecipients(List.of(toRecipient)); final SendMailPostRequestBody postRequest = new SendMailPostRequestBody(); postRequest.setMessage(message); // Send the message _userClient.me() .sendMail() .post(postRequest); }Ersetzen Sie die leere
sendMailFunktion in App.java durch Folgendes.private static void sendMail() { try { // Send mail to the signed-in user // Get the user for their email address final User user = Graph.getUser(); final String email = user.getMail() == null ? user.getUserPrincipalName() : user.getMail(); Graph.sendMail("Testing Microsoft Graph", "Hello world!", email); System.out.println("\nMail sent."); } catch (Exception e) { System.out.println("Error sending mail"); System.out.println(e.getMessage()); } }Führen Sie die App aus, melden Sie sich an, und wählen Sie Option 3 aus, um eine E-Mail an sich selbst zu senden.
Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 3 Mail sent.Hinweis
Wenn Sie mit einem Entwicklermandanten aus dem Microsoft 365-Entwicklerprogramm testen, wird die von Ihnen gesendete E-Mail möglicherweise nicht zugestellt, und Sie erhalten möglicherweise einen Nicht-Lieferbericht. Wenn Sie die Blockierung des Sendens von E-Mails von Ihrem Mandanten aufheben möchten, wenden Sie sich über die Microsoft 365 Admin Center an den Support.
Um zu überprüfen, ob die Nachricht empfangen wurde, wählen Sie Option 2 aus, um Ihren Posteingang aufzulisten.
sendMail erklärt
Betrachten Sie den Code in der sendMail Funktion.
Senden von E-Mails
Die Funktion verwendet den Anforderungs-Generator _userClient.me().sendMail() , der eine Anforderung an die API zum Senden von E-Mails erstellt. Der Anforderungs-Generator verwendet ein SendMailPostRequestBody -Objekt, das die zu sendende Nachricht enthält.
Erstellen von Objekten
Im Gegensatz zu den vorherigen Aufrufen von Microsoft Graph, die nur Daten lesen, werden mit diesem Aufruf Daten erstellt. Um Elemente mit der Clientbibliothek zu erstellen, erstellen Sie eine instance der Klasse, com.microsoft.graph.models.Messagedie die Daten darstellt (in diesem Fall ), verwenden Sie die new Schlüsselwort (keyword), legen die gewünschten Eigenschaften fest und senden sie dann im API-Aufruf. Da der Aufruf Daten sendet, wird die post -Methode anstelle von getverwendet.