Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste artigo, vai expandir a aplicação que criou em Criar aplicações Java com o Microsoft Graph com as APIs de correio do Microsoft Graph. Utilize o Microsoft Graph para listar a caixa de entrada do utilizador e enviar um e-mail.
Listar a caixa de entrada do utilizador
Comece por listar mensagens na caixa de entrada do e-mail do utilizador.
Abra Graph.java e adicione a seguinte função à
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" }; }); }
Substitua a função empty
listInbox
no App.java pelo seguinte.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()); } }
Execute a aplicação, inicie sessão e selecione a opção 2 para listar a sua caixa de entrada.
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 explicado
Considere o código na getInbox
função .
Aceder a pastas de correio conhecidas
A função utiliza o _userClient.me().mailFolders().byMailFolderId("inbox").messages()
construtor de pedidos, que cria um pedido para a API Listar mensagens . Uma vez que inclui o byMailFolderId("inbox")
construtor de pedidos, a API só devolve mensagens na pasta de correio pedida. Neste caso, uma vez que a caixa de entrada é uma pasta predefinida e conhecida dentro da caixa de correio de um utilizador, é acessível através do nome conhecido. As pastas não predefinidas são acedidas da mesma forma ao substituir o nome conhecido pela propriedade ID da pasta de correio. Para obter detalhes sobre os nomes de pastas conhecidos disponíveis, consulte mailFolder resource type (Tipo de recurso mailFolder).
Aceder a uma coleção
Ao contrário da getUser
função da secção anterior, que devolve um único objeto, este método devolve uma coleção de mensagens. A maioria das APIs no Microsoft Graph que devolvem uma coleção não devolve todos os resultados disponíveis numa única resposta. Em vez disso, utilizam a paginação para devolver uma parte dos resultados ao fornecer um método para os clientes solicitarem a página seguinte.
Tamanhos de página predefinidos
As APIs que utilizam a paginação implementam um tamanho de página predefinido. Para mensagens, o valor predefinido é 10. Os clientes podem pedir mais (ou menos) através do parâmetro de consulta $top . No getInbox
, a adição $top
é efetuada com a top
propriedade na configuração do pedido.
Observação
O valor definido em top
é um limite superior e não um número explícito. A API devolve um número de mensagens até ao valor especificado.
Obter páginas subsequentes
Se existirem mais resultados disponíveis no servidor, as respostas da coleção incluem uma @odata.nextLink
propriedade com um URL de API para aceder à página seguinte. A biblioteca de cliente Java fornece o getOdataNextLink
método em objetos de resposta de coleção. Se este método devolver não nulo, existem mais resultados disponíveis.
Classificando coleções
A função utiliza a orderBy
propriedade na configuração do pedido para pedir resultados ordenados quando a mensagem é recebida (receivedDateTime
propriedade). Inclui o DESC
palavra-chave para que as mensagens recebidas mais recentemente sejam listadas em primeiro lugar. Esta propriedade adiciona o parâmetro de consulta $orderby à chamada à API.
Enviar email
Agora, adicione a capacidade de enviar uma mensagem de e-mail como o utilizador autenticado.
Abra Graph.java e adicione a seguinte função à
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); }
Substitua a função empty
sendMail
no App.java pelo seguinte.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()); } }
Execute a aplicação, inicie sessão e selecione a opção 3 para enviar um e-mail para si próprio.
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.
Observação
Se estiver a testar com um inquilino de programador do Programa para Programadores do Microsoft 365, o e-mail que enviar poderá não ser entregue e poderá receber um relatório não dinâmico. Se quiser desbloquear o envio de correio do seu inquilino, contacte o suporte através do Centro de administração do Microsoft 365.
Para verificar se a mensagem foi recebida, selecione a opção 2 para listar a sua caixa de entrada.
sendMail explicado
Considere o código na sendMail
função .
Enviar correio
A função utiliza o _userClient.me().sendMail()
construtor de pedidos, que cria um pedido para a API enviar correio . O construtor de pedidos utiliza um SendMailPostRequestBody
objeto que contém a mensagem a enviar.
Criar objetos
Ao contrário das chamadas anteriores para o Microsoft Graph que só leem dados, esta chamada cria dados. Para criar itens com a biblioteca de cliente, crie uma instância da classe que representa os dados (neste caso, com.microsoft.graph.models.Message
) com o new
palavra-chave, defina as propriedades pretendidas e, em seguida, envie-as na chamada à API. Uma vez que a chamada está a enviar dados, o post
método é utilizado em vez de get
.