Trabalhando com Caixa de Correio e Mensagens do Exchange - Ler Email do Servidor Exchange em Java

Obtendo Informação da Caixa de Correio Usando EWS

O EWSClient classe tem membros que podem ser usados para obter informações da caixa de correio de um Exchange Server chamando o IEWSClient.getMailboxInfo() método. Ele retorna uma instância do tipo ExchangeMailboxInfo. Obter informações da caixa de correio a partir de propriedades como MailboxUri, InboxUri e DraftsUri. Este artigo mostra como acessar informações da caixa de correio usando Exchange Web Services.

Se você quiser conectar ao Exchange Server usando Exchange Web Services (EWS), use o EWSClient classe. Esta classe usa EWS para conectar e gerenciar itens em um servidor Exchange. O trecho de código Java a seguir mostra como obter informações da caixa de correio usando os serviços web do Exchange.

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Get mailbox size, exchange mailbox info, Mailbox and Inbox folder URI
System.out.println("Mailbox size: " + client.getMailboxSize() + " bytes");
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
System.out.println("Mailbox URI: " + mailboxInfo.getMailboxUri());
System.out.println("Inbox folder URI: " + mailboxInfo.getInboxUri());
System.out.println("Sent Items URI: " + mailboxInfo.getSentItemsUri());
System.out.println("Drafts folder URI: " + mailboxInfo.getDraftsUri());

Enviando Mensagens de E‑mail

Você pode enviar mensagens de e‑mail usando um servidor Exchange com a ajuda das ferramentas em Aspose.Email.Exchange. O método IEWSClient.Send() aceita um MailMessage instância como parâmetro e envia o e‑mail. Este artigo explica como enviar mensagens de e‑mail usando Exchange Web Services.

Aspose.Email fornece a classe IEWSClient para conectar ao Microsoft Exchange Server usando Exchange Web Services. O trecho de código a seguir mostra como usar o EWS para enviar e‑mails usando o Microsoft Exchange Server. O trecho de código Java a seguir mostra como enviar mensagens de e‑mail usando o EWS.

// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Create instance of type MailMessage
MailMessage msg = new MailMessage();
msg.setFrom(MailAddress.to_MailAddress("sender@domain.com"));
msg.setTo(MailAddressCollection.to_MailAddressCollection("recipient@ domain.com "));
msg.setSubject("Sending message from exchange server");
msg.setHtmlBody("<h3>sending message from exchange server</h3>");

// Send the message
client.send(msg);

Obtendo a Classe da Mensagem

O getMessageClass() método do ExchangeMessageInfo classe obtém uma string que representa a classe da mensagem. O exemplo de código abaixo mostra como obter a classe da mensagem:

try (IEWSClient client = EWSClient.getEWSClient(uri, credentials))
{
    ExchangeMessageInfoCollection messageInfoCollection = client.listMessagesFromPublicFolder(publicFolder);

    for (ExchangeMessageInfo messageInfo : messageInfoCollection)
    {
        System.out.println("Message Class: " + messageInfo.getMessageClass());
    }
}

Lendo E‑mails da Caixa de Correio de Outro Usuário

Algumas contas em servidores Exchange têm permissão para acessar múltiplas caixas de correio, e alguns usuários têm várias contas de e‑mail no mesmo servidor Exchange. Em ambos os casos, os usuários podem acessar as caixas de correio de outros usuários usando Aspose.Email para Java. Esta API fornece mecanismo para acessar pastas e e‑mails de outras caixas de correio usando o IEWSClient classe. Essa funcionalidade pode ser alcançada usando a sobrecarga de getMailboxInfo() método e fornecendo o endereço de e‑mail do usuário como parâmetro.

O trecho de código a seguir mostra como ler e‑mails usando IEWSClient classe.

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Get Exchange mailbox info of other email account
ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo("otherUser@domain.com");

Listando Mensagens

Uma lista das mensagens de e‑mail em uma caixa de correio Exchange pode ser obtida chamando o IEWSClient.listMessages método. Obter as informações básicas sobre as mensagens, como assunto, remetente, destinatário e ID da mensagem, usando o listMessages método.

Listagem Simples de Mensagens

Para listar as mensagens em uma caixa de correio Exchange:

  1. Crie uma instância do IEWSClient classe.
  2. Chame o método listMessages e crie uma coleção de mensagens.
  3. Iterar pela coleção e exibir informações da mensagem.

O trecho de código Java a seguir mostra como conectar a um servidor Exchange usando EWS e listar mensagens da pasta de entrada.

// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "UserName", "Password");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to display the basic information
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    System.out.println("Subject: " + msgInfo.getSubject());
    System.out.println("From: " + msgInfo.getFrom().toString());
    System.out.println("To: " + msgInfo.getTo().toString());
    System.out.println("Message ID: " + msgInfo.getMessageId());
    System.out.println("Unique URI: " + msgInfo.getUniqueUri());
}

Listando Mensagens de Diferentes Pastas

Os trechos de código acima, lista todas as mensagens na pasta Caixa de Entrada. É possível obter a lista de mensagens de outras pastas também. O IEWSClient.listMessages() método aceita um URI de pasta como parâmetro. Enquanto o URI da pasta for válido, você pode obter a lista de mensagens daquela pasta. Use a propriedade IEWSClient.getMailboxInfo().getXXXFolderUri para obter o URI de diferentes pastas. O restante do código é o mesmo que para obter uma lista de mensagens. O trecho de código a seguir mostra como listar mensagens de diferentes pastas usando EWS.

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Get folder URI
String strFolderURI = "";
strFolderURI = client.getMailboxInfo().getInboxUri();
strFolderURI = client.getMailboxInfo().getDeletedItemsUri();
strFolderURI = client.getMailboxInfo().getDraftsUri();
strFolderURI = client.getMailboxInfo().getSentItemsUri();

// Get list of messages from the specified folder
ExchangeMessageInfoCollection msgCollection = client.listMessages(strFolderURI);

Listando Mensagens com Suporte a Paginação

O trecho de código Java a seguir mostra como obter uma lista de mensagens com suporte a paginação.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-Java
final IEWSClient client = EWSClient.getEWSClient("exchange.domain.com", "username", "password");
try {
    try {
        // Create some test messages to be added to server for retrieval later
        int messagesNum = 12;
        int itemsPerPage = 5;
        MailMessage message = null;
        for (int i = 0; i < messagesNum; i++) {
            message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-35157_1 - " + UUID.randomUUID().toString(),
                    "EMAILNET-35157 Move paging parameters to separate class");
            client.appendMessage(client.getMailboxInfo().getInboxUri(), message);
        }
        // Verfiy that the messages have been added to the server
        ExchangeMessageInfoCollection totalMessageInfoCol = client.listMessages(client.getMailboxInfo().getInboxUri());
        System.out.println(totalMessageInfoCol.size());

        ////////////////// RETREIVING THE MESSAGES USING PAGING SUPPORT ////////////////////////////////////

        List<ExchangeMessagePageInfo> pages = new ArrayList<ExchangeMessagePageInfo>();
        ExchangeMessagePageInfo pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage);
        // Total Pages Count
        System.out.println(pageInfo.getTotalCount());

        pages.add(pageInfo);
        while (!pageInfo.getLastPage()) {
            pageInfo = client.listMessagesByPage(client.getMailboxInfo().getInboxUri(), itemsPerPage, pageInfo.getPageOffset() + 1);
            pages.add(pageInfo);
        }
        int retrievedItems = 0;
        // foreach to while statements conversion
        for (ExchangeMessagePageInfo pageCol : pages) {
            retrievedItems += pageCol.getItems().size();
        }
        // Verify total message count using paging
        System.out.println(retrievedItems);
    } finally {
    }
} finally {
    client.dispose();
}

Obtendo Informação do Tipo de Mensagem a partir de ExchangeMessageInfo

IEWSClient client = EWSClient.getEWSClient(mailboxUri, credentials);

ExchangeMessageInfoCollection list = client.listMessages(client.getMailboxInfo().getDeletedItemsUri());
System.out.println(list.get_Item(0).getMessageInfoType()); // MessageInfoType

Salvando Mensagens

Este artigo mostra como obter mensagens de uma caixa de correio do Exchange Server e salvá‑las no disco nos formatos EML e MSG:

  • Salvar como EML no disco.
  • Salvar em fluxo de memória.
  • Salvar como MSG.

Salvando Mensagens em EML

Para obter mensagens e salvar no formato EML:

  1. Crie uma instância da classe IEWSClient.
  2. Forneça o mailboxUri, nome de usuário, senha e domínio.
  3. Chame o método IEWSClient.listMessages() para obter uma instância da coleção ExchangeMessagesInfoCollection.
  4. Itere sobre a coleção ExchangeMessagesInfoCollection para obter o URI único de cada mensagem.
  5. Chame o método IEWSClient.saveMessage() e passe o URI único como parâmetro.
  6. Forneça ao método saveMessage() um caminho para onde você deseja salvar o arquivo.

O trecho de código a seguir mostra como usar EWS para conectar ao Exchange Server e salvar mensagens como arquivos EML.

// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    String strMessageURI = msgInfo.getUniqueUri();

    // Now save the message in disk
    client.saveMessage(strMessageURI, dataDir + msgInfo.getMessageId() + "out.eml");
}

Salvando Mensagens em um Fluxo de Memória

Em vez de salvar arquivos EML no disco, é possível salvá‑los em um fluxo de memória. Isso é útil quando você deseja armazenar o fluxo em algum local de armazenamento, como um banco de dados. Depois que o fluxo for salvo em um banco de dados, você pode recarregar o arquivo EML no MailMessage classe. O trecho de código a seguir mostra como salvar mensagens de uma caixa de correio do Exchange Server em um fluxo de memória usando EWS.

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    String strMessageURI = msgInfo.getUniqueUri();

    // Now save the message in memory stream
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    client.saveMessage(strMessageURI, stream);
}

Salvando Mensagens no Formato MSG

O IEWSClient.saveMessage() método pode salvar diretamente a mensagem no formato EML. Para salvar as mensagens no formato MSG, primeiro chame o IEWSClient.fetchMessage() método que retorna uma instância do MailMessage classe. Em seguida chame o MailMessage.save() método para salvar a mensagem em MSG. O trecho de código a seguir mostra como obter mensagens de uma caixa de correio do Exchange Server e salvá‑las no formato MSG usando EWS.

// Create instance of EWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

int count = 0;
// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    String strMessageURI = msgInfo.getUniqueUri();

    // Now get the message details using FetchMessage() and Save message as Msg
    MailMessage message = client.fetchMessage(strMessageURI);
    message.save(dataDir + (count++) + "_out.msg", SaveOptions.getDefaultMsgUnicode());
}

Obtendo ExchangeMessageInfo a partir do URI da Mensagem

Uma mensagem de e‑mail é representada por seu identificador único, URI, e é parte integral do ExchangeMessageInfo objeto. Caso apenas o URI da mensagem esteja disponível, então ExchangeMessageInfo objeto também pode ser recuperado usando essas informações disponíveis. A versão sobrecarregada de listMessages recebe uma lista de IDs para usar ExchangeMessageInfoCollection. O trecho de código a seguir mostra como obter ExchangeMessageInfo a partir do URI da mensagem.

IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "user@domain.com", "pwd", "domain");

List<String> ids = new ArrayList<String>();
List<MailMessage> messages = new ArrayList<MailMessage>();

for (int i = 0; i < 5; i++) {
    MailMessage message = new MailMessage("user@domain.com", "receiver@domain.com", "EMAILNET-35033 - " + UUID.randomUUID().toString(),
            "EMAILNET-35033 Messages saved from Sent Items folder doesn't contain 'To' field");
    messages.add(message);
    String uri = client.appendMessage(message);
    ids.add(uri);
}

ExchangeMessageInfoCollection messageInfoCol = client.listMessages(ids);

for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) messageInfoCol) {
    // Do something ...
    System.out.println(messageInfo.getUniqueUri());
}

Buscar mensagens de uma caixa de correio Exchange Server

Listagem de mensagens em um Exchange Server usou o listMessages() método para obter uma lista de mensagens de uma caixa de correio Exchange Server. O listMessages() método obtém informações básicas sobre mensagens, por exemplo, o assunto, o ID da mensagem, remetente e destinatário. Para obter os detalhes completos da mensagem, Aspose.Email.Exchange fornece o método IEWSClient.fetchMessage(). Este método aceita o URI da mensagem como parâmetro e retorna uma instância do MailMessage classe. O MailMessage classe então fornece detalhes da mensagem como corpo, cabeçalhos e anexos. Saiba mais sobre o MailMessage API, ou descubra como gerenciar e‑mails com o MailMessage classe. Para buscar mensagens da Caixa de Correio do Exchange Server:

  1. Crie uma instância do tipo IEWSClient.
  2. Especifique o nome do servidor, nome de usuário, senha e domínio.
  3. Chame listMessages para obter o ExchangeMessageInfoCollection.
  4. Itere sobre a coleção ExchangeMessageInfoCollection para obter os valores de ExchangeMessageInfo.UniqueURI.
  5. Chame IEWSClient.fetchMessage() e passe ExchangeMessageInfo.UniqueURI como parâmetro.

O trecho de código a seguir mostra como conectar à caixa de correio do Exchange Server e buscar todas as mensagens usando EWS.

// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    String strMessageURI = msgInfo.getUniqueUri();

    // Now get the message details using FetchMessage()
    MailMessage msg = client.fetchMessage(strMessageURI);

    for (Attachment att : (Iterable<Attachment>) msg.getAttachments()) {
        System.out.println("Attachment Name: " + att.getName());
    }
}

Usando o método FetchItem para buscar uma mensagem

O FetchItem método é mais preferido se você quiser buscar um MapiMessage e operar com propriedades MAPI. Você também pode usar este método para buscar qualquer item do Outlook, como um contato, compromisso, tarefa, etc.

// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to get Message URI
for (ExchangeMessageInfo msgInfo : msgCollection)
{
    // Now get the message using FetchItem()
    MapiMessage msg = client.fetchItem(msgInfo.getUniqueUri());

    // If necessary, you can cast the MapiMessage to the proper item type to simplify working with its properties.
    MapiContact contact = (MapiContact) msg.toMapiMessageItem();
}

Pré-Obter Tamanho da Mensagem

Microsoft Outlook InterOp fornece o recurso de obter o tamanho da mensagem antes de realmente buscar a mensagem completa do servidor. No caso da API Aspose.Email, as informações resumidas recuperadas do servidor Exchange são representadas por ExchangeMessageInfo classe. Ela fornece o mesmo recurso de obtenção do tamanho da mensagem usando a propriedade Size. Para recuperar o tamanho da mensagem, a chamada padrão ao listMessages do IEWSClient é usada, que recupera a coleção de ExchangeMessageInfo. O trecho de código a seguir mostra como exibir o tamanho da mensagem usando o ExchangeMessageInfo classe.

// Create instance of ExchangeWebServiceClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to display the basic information
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    System.out.println("Subject: " + msgInfo.getSubject());
    System.out.println("From: " + msgInfo.getFrom().toString());
    System.out.println("To: " + msgInfo.getTo().toString());
    System.out.println("Message Size: " + msgInfo.getSize());
    System.out.println("==================================");
}

Baixar Mensagens Recursivamente

O EWSClient’s listSubFolders() método que pode ser usado para obter mensagens de pastas e subpastas de uma caixa de correio Exchange Server de forma recursiva. Isso requer Exchange Server 2007 ou superior, pois utiliza EWS. O trecho de código a seguir mostra como baixar toda a caixa de correio (pastas e subpastas) de um Exchange Server. A estrutura de pastas é criada localmente e todas as mensagens são baixadas.

public static void run() {
    try {
        downloadAllMessages();
    } catch (java.lang.RuntimeException ex) {
        System.out.println(ex.getMessage());
    }
}

private static void downloadAllMessages() {
    try {
        String rootFolder = domain + "-" + username;
        new File(rootFolder).mkdirs();
        String inboxFolder = rootFolder + "\\Inbox";
        new File(inboxFolder).mkdirs();

        System.out.println("Downloading all messages from Inbox....");
        // Create instance of IEWSClient class by giving credentials
        IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", username, password, domain);

        ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();
        System.out.println("Mailbox URI: " + mailboxInfo.getMailboxUri());
        String rootUri = client.getMailboxInfo().getRootUri();
        // List all the folders from Exchange server
        ExchangeFolderInfoCollection folderInfoCollection = client.listSubFolders(rootUri);
        for (ExchangeFolderInfo folderInfo : (Iterable<ExchangeFolderInfo>) folderInfoCollection) {
            // Call the recursive method to read messages and get sub-folders
            listMessagesInFolder(client, folderInfo, rootFolder);
        }

        System.out.println("All messages downloaded.");
    } catch (java.lang.RuntimeException ex) {
        System.out.println(ex.getMessage());
    }
}

// Recursive method to get messages from folders and sub-folders
private static void listMessagesInFolder(IEWSClient client, ExchangeFolderInfo folderInfo, String rootFolder) {
    // Create the folder in disk (same name as on IMAP server)
    String currentFolder = rootFolder + "\\" + folderInfo.getDisplayName();
    new File(currentFolder).mkdirs();

    // List messages
    ExchangeMessageInfoCollection msgInfoColl = client.listMessages(folderInfo.getUri());
    System.out.println("Listing messages....");
    int i = 0;
    for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
        // Get subject and other properties of the message
        System.out.println("Subject: " + msgInfo.getSubject());

        // Get rid of characters like ? and :, which should not be included in a file name
        String fileName = msgInfo.getSubject().replace("?", " ").replace(":", " ");

        MailMessage msg = client.fetchMessage(msgInfo.getUniqueUri());
        msg.save(dataDir + "\\" + fileName + "-" + i + ".msg");

        i++;
    }
    System.out.println("============================\n");
    try {
        // If this folder has sub-folders, call this method recursively to get messages
        ExchangeFolderInfoCollection folderInfoCollection = client.listSubFolders(folderInfo.getUri());
        for (ExchangeFolderInfo subfolderInfo : (Iterable<ExchangeFolderInfo>) folderInfoCollection) {
            listMessagesInFolder(client, subfolderInfo, currentFolder);
        }
    } catch (java.lang.RuntimeException e) {
    }
}

Baixar Mensagens de Pastas Públicas

O Microsoft Exchange Server permite que os usuários criem pastas públicas e publiquem mensagens nelas. Para fazer isso através de sua aplicação, use o Aspose.Email’s EWSClient classe para conectar ao Exchange Server e ler e baixar mensagens e postagens de pastas públicas. O trecho de código a seguir mostra como ler todas as pastas públicas e subpastas, e listar e baixar quaisquer mensagens encontradas nessas pastas. Este exemplo funciona apenas com Microsoft Exchange Server 2007 ou superior, pois somente eles suportam EWS.

public static void run() {
    try {
        readPublicFolders();
    } catch (java.lang.RuntimeException ex) {
        System.out.println(ex.getMessage());
    }
}

private static void readPublicFolders() {
    NetworkCredential credential = new NetworkCredential(username, password, domain);
    IEWSClient client = EWSClient.getEWSClient(mailboxUri, credential);

    ExchangeFolderInfoCollection folders = client.listPublicFolders();
    for (ExchangeFolderInfo publicFolder : (Iterable<ExchangeFolderInfo>) folders) {
        System.out.println("Name: " + publicFolder.getDisplayName());
        System.out.println("Subfolders count: " + publicFolder.getChildFolderCount());
        listMessagesFromSubFolder(publicFolder, client);

    }
}

private static void listMessagesFromSubFolder(ExchangeFolderInfo publicFolder, IEWSClient client) {
    System.out.println("Folder Name: " + publicFolder.getDisplayName());
    ExchangeMessageInfoCollection msgInfoCollection = client.listMessagesFromPublicFolder(publicFolder);
    for (ExchangeMessageInfo messageInfo : (Iterable<ExchangeMessageInfo>) msgInfoCollection) {
        MailMessage msg = client.fetchMessage(messageInfo.getUniqueUri());
        System.out.println(msg.getSubject());
        msg.save(dataDir + msg.getSubject() + ".msg", SaveOptions.getDefaultMsgUnicode());
    }

    // Call this method recursively for any subfolders
    if (publicFolder.getChildFolderCount() > 0) {
        ExchangeFolderInfoCollection subfolders = client.listSubFolders(publicFolder);
        for (ExchangeFolderInfo subfolder : (Iterable<ExchangeFolderInfo>) subfolders) {
            listMessagesFromSubFolder(subfolder, client);
        }
    }
}

Movendo Mensagens

Você pode mover mensagens de e‑mail de uma pasta para outra com a ajuda do IEWSClient classe move método. Ele recebe os parâmetros:

  • O URI exclusivo da mensagem que será movida.
  • O URI exclusivo da pasta de destino.

Movendo Mensagens entre Pastas

O trecho de código a seguir mostra como mover uma mensagem em uma caixa de correio da pasta Caixa de Entrada para uma pasta chamada Processada. Neste exemplo, o aplicativo:

  1. Lê mensagens da pasta Caixa de Entrada.
  2. Processa algumas das mensagens com base em certos critérios (neste exemplo, buscamos uma palavra‑chave no assunto da mensagem).
  3. Move mensagens que atendam à condição fornecida para a pasta processada.
// Create instance of IEWSClient class by giving credentials
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();

// List all messages from Inbox folder
System.out.println("Listing all messages from Inbox....");
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(mailboxInfo.getInboxUri());
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
    // Move message to "Processed" folder, after processing certain messages based on some criteria
    if (msgInfo.getSubject() != null && msgInfo.getSubject().toLowerCase().contains("process this message")) {
        client.moveItem(mailboxInfo.getDeletedItemsUri(), msgInfo.getUniqueUri()); // EWS
        System.out.println("Message moved...." + msgInfo.getSubject());
    } else {
        // Do something else
    }
}

Excluindo Mensagens

Você pode excluir mensagens de e‑mail de uma pasta com a ajuda do IEWSClient classe deleteItem método. Ele recebe o URI exclusivo da mensagem como parâmetro.

O trecho de código a seguir mostra como excluir uma mensagem da pasta Caixa de Entrada. Para o propósito deste exemplo, o código:

  1. Lê mensagens da pasta Caixa de Entrada.
  2. Processar mensagens com base em alguns critérios (neste exemplo, encontramos uma palavra‑chave no assunto da mensagem).
  3. Exclui a mensagem.
IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");

ExchangeMailboxInfo mailboxInfo = client.getMailboxInfo();

// List all messages from Inbox folder
System.out.println("Listing all messages from Inbox....");
ExchangeMessageInfoCollection msgInfoColl = client.listMessages(mailboxInfo.getInboxUri());
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgInfoColl) {
    // Delete message based on some criteria
    if (msgInfo.getSubject() != null && msgInfo.getSubject().toLowerCase().contains("delete") == true) {
        client.deleteItem(msgInfo.getUniqueUri(), DeletionOptions.getDeletePermanently()); // EWS
        System.out.println("Message deleted...." + msgInfo.getSubject());
    } else {
        // Do something else
    }
}

Copiando Mensagens

A API Aspose.Email permite copiar uma mensagem de uma pasta para outra usando o copyItem método. A versão sobrecarregada deste método retorna o URI Único da mensagem copiada, como mostrado neste artigo.

Copiando uma Mensagem para Outra Pasta

O trecho de código a seguir mostra como copiar uma mensagem para outra pasta.

try {
    // Create instance of EWSClient class by giving credentials
    IEWSClient client = EWSClient.getEWSClient("https://outlook.office365.com/ews/exchange.asmx", "testUser", "pwd", "domain");
    MailMessage message = new MailMessage("from@domain.com", "to@domain.com", "EMAILNET-34997 - " + UUID.randomUUID().toString(),
            "EMAILNET-34997 Exchange: Copy a message and get reference to the new Copy item");
    String messageUri = client.appendMessage(message);
    String newMessageUri = client.copyItem(messageUri, client.getMailboxInfo().getDeletedItemsUri());
} catch (java.lang.RuntimeException ex) {
    System.out.println(ex.getMessage());
}