Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans cet article, vous allez étendre l’application que vous avez créée dans Générer des applications Java avec Microsoft Graph avec les API de messagerie Microsoft Graph. Vous utilisez Microsoft Graph pour répertorier la boîte de réception de l’utilisateur et envoyer un e-mail.
Lister la boîte de réception de l’utilisateur
Commencez par répertorier les messages dans la boîte de réception de l’utilisateur.
Ouvrez Graph.java et ajoutez la fonction suivante à la
Graph
classe .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" }; }); }
Remplacez la fonction vide
listInbox
dans App.java par ce qui suit.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()); } }
Exécutez l’application, connectez-vous et choisissez l’option 2 pour répertorier votre boîte de réception.
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 expliqué
Considérez le code dans la getInbox
fonction .
Accès aux dossiers de courrier connus
La fonction utilise le générateur de _userClient.me().mailFolders().byMailFolderId("inbox").messages()
requêtes, qui génère une requête à l’API Répertorier les messages . Étant donné qu’elle inclut le byMailFolderId("inbox")
générateur de demandes, l’API retourne uniquement les messages dans le dossier de courrier demandé. Dans ce cas, étant donné que la boîte de réception est un dossier par défaut connu dans la boîte aux lettres d’un utilisateur, elle est accessible via son nom connu. Les dossiers non définis par défaut sont accessibles de la même façon, en remplaçant le nom connu par la propriété ID du dossier de messagerie. Pour plus d’informations sur les noms de dossiers connus disponibles, consultez Type de ressource mailFolder.
Accès à une collection
Contrairement à la getUser
fonction de la section précédente, qui retourne un seul objet, cette méthode retourne une collection de messages. La plupart des API de Microsoft Graph qui retournent une collection ne retournent pas tous les résultats disponibles dans une seule réponse. Au lieu de cela, ils utilisent la pagination pour retourner une partie des résultats tout en fournissant une méthode permettant aux clients de demander la page suivante.
Tailles de page par défaut
Les API qui utilisent la pagination implémentent une taille de page par défaut. Pour les messages, la valeur par défaut est 10. Les clients peuvent demander plus (ou moins) à l’aide du paramètre de requête $top . Dans getInbox
, l’ajout $top
s’effectue avec la top
propriété dans la configuration de la requête.
Remarque
La valeur définie dans top
est une limite supérieure, et non un nombre explicite. L’API retourne un certain nombre de messages jusqu’à la valeur spécifiée.
Obtention des pages suivantes
Si d’autres résultats sont disponibles sur le serveur, les réponses de regroupement incluent une @odata.nextLink
propriété avec une URL d’API pour accéder à la page suivante. La bibliothèque cliente Java fournit la méthode sur les getOdataNextLink
objets de réponse de collection. Si cette méthode retourne une valeur non null, d’autres résultats sont disponibles.
Tri des collections
La fonction utilise la orderBy
propriété sur la configuration de la demande pour demander des résultats triés en fonction de la réception du message (receivedDateTime
propriété ). Il inclut les DESC
mot clé afin que les messages reçus plus récemment soient répertoriés en premier. Cette propriété ajoute le paramètre de requête $orderby à l’appel d’API.
Envoyer un message
Ajoutez maintenant la possibilité d’envoyer un e-mail en tant qu’utilisateur authentifié.
Ouvrez Graph.java et ajoutez la fonction suivante à la
Graph
classe .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); }
Remplacez la fonction vide
sendMail
dans App.java par ce qui suit.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()); } }
Exécutez l’application, connectez-vous et choisissez l’option 3 pour vous envoyer un e-mail.
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.
Remarque
Si vous effectuez des tests auprès d’un locataire développeur dans le cadre du Programme pour développeurs Microsoft 365, l’e-mail que vous envoyez risque de ne pas être remis et vous recevrez peut-être un rapport de non-remise. Si vous souhaitez débloquer l’envoi de courrier de votre locataire, contactez le support via le Centre d’administration Microsoft 365.
Pour vérifier que le message a été reçu, choisissez l’option 2 pour répertorier votre boîte de réception.
sendMail expliqué
Considérez le code dans la sendMail
fonction .
Envoi de messages
La fonction utilise le générateur de _userClient.me().sendMail()
requêtes, qui génère une requête à l’API Envoyer un courrier . Le générateur de requêtes prend un SendMailPostRequestBody
objet contenant le message à envoyer.
Création d’objets
Contrairement aux appels précédents à Microsoft Graph qui ne lisent que les données, cet appel crée des données. Pour créer des éléments avec la bibliothèque cliente, vous créez un instance de la classe représentant les données (dans ce cas, com.microsoft.graph.models.Message
) à l’aide de la new
mot clé, définissez les propriétés souhaitées, puis envoyez-la dans l’appel d’API. Étant donné que l’appel envoie des données, la post
méthode est utilisée à la place de get
.