Práce s poštovní schránkou Exchange a zprávami – čtení e‑mailu ze serveru Exchange v Javě

Získání informací o poštovní schránce pomocí EWS

The EWSClient třída má členy, které lze použít k získání informací o poštovní schránce z Exchange Serveru voláním IEWSClient.getMailboxInfo() metoda. Vrací instanci typu ExchangeMailboxInfo. Získat informace o poštovní schránce z vlastností, jako je MailboxUri, InboxUri a DraftsUri. Tento článek ukazuje, jak získat informace o poštovní schránce pomocí Exchange Web Services.

Pokud se chcete připojit k Exchange Serveru pomocí Exchange Web Services (EWS), použijte EWSClient třída. Tato třída používá EWS k připojení a správě položek na Exchange Serveru. Následující úryvek Java kódu ukazuje, jak získat informace o poštovní schránce pomocí Exchange Web Services.

// 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());

Odesílání e‑mailových zpráv

Můžete odesílat e‑mailové zprávy pomocí Exchange Serveru s pomocí nástrojů v Aspose.Email.Exchange. Metoda IEWSClient.Send() přijímá MailMessage instanci jako parametr a odesílá e‑mail. Tento článek vysvětluje, jak odesílat e‑mailové zprávy pomocí Exchange Web Services.

Aspose.Email poskytuje třídu IEWSClient pro připojení k Microsoft Exchange Server pomocí Exchange Web Services. Následující úryvek kódu ukazuje, jak použít EWS k odesílání e‑mailů pomocí Microsoft Exchange Server. Následující úryvek Java kódu ukazuje, jak odeslat e‑mailové zprávy pomocí 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);

Získání třídy zprávy

The getMessageClass() metoda třídy ExchangeMessageInfo třída získává řetězec představující třídu zprávy. Níže uvedený ukázkový kód ukazuje, jak získat třídu zprávy:

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

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

Čtení e‑mailů z poštovní schránky jiného uživatele

Některé účty na Exchange serverech mají právo přistupovat k více poštovním schránkám a někteří uživatelé mají více e‑mailových účtů na stejném Exchange serveru. V obou případech mohou uživatelé přistupovat k poštovním schránkám jiných uživatelů pomocí Aspose.Email pro Javu. Toto API poskytuje mechanismus pro přístup ke složkám a e‑mailům z jiných schránek pomocí IEWSClient třída. Tuto funkčnost lze dosáhnout pomocí přetížené getMailboxInfo() metoda a předáním e‑mailové adresy uživatele jako parametru.

Následující úryvek kódu ukazuje, jak číst e‑maily pomocí IEWSClient třída.

// 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");

Výpis zpráv

Seznam e‑mailových zpráv v poštovní schránce Exchange lze získat voláním IEWSClient.listMessages metodu. Získejte základní informace o zprávách, jako předmět, od, komukolem, a ID zprávy, pomocí listMessages metoda.

Jednoduchý výpis zpráv

Pro vypsání zpráv v poštovní schránce Exchange:

  1. Vytvořte instanci IEWSClient třída.
  2. Zavolejte metodu listMessages a vytvořte kolekci zpráv.
  3. Procházejte kolekci a zobrazujte informace o zprávě.

Následující úryvek Java kódu ukazuje, jak se připojit k serveru Exchange pomocí EWS a vypsat zprávy ze složky Inbox.

// 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());
}

Výpis zpráv z různých složek

Výše uvedené úryvky kódu, vylistuje všechny zprávy ve složce Inbox. Je také možné získat seznam zpráv z jiných složek. IEWSClient.listMessages() metoda přijímá URI složky jako parametr. Pokud je URI složky platné, můžete získat seznam zpráv z této složky. Použijte vlastnost IEWSClient.getMailboxInfo().getXXXFolderUri k získání URI různých složek. Zbytek kódu je stejný jako při získávání seznamu zpráv. Následující úryvek kódu ukazuje, jak vypisovat zprávy z různých složek pomocí 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);

Výpis zpráv s podporou stránkování

Následující úryvek Java kódu ukazuje, jak získat seznam zpráv s podporou stránkování.

// 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();
}

Získání informací o typu zprávy z ExchangeMessageInfo

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

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

Ukládání zpráv

Tento článek ukazuje, jak získat zprávy z poštovní schránky Exchange Server a uložit je na disk ve formátech EML a MSG:

  • Uložit jako EML na disk.
  • Uložit do paměťového proudu.
  • Uložit jako MSG.

Ukládání zpráv do EML

Pro získání zpráv a uložení ve formátu EML:

  1. Vytvořte instanci třídy IEWSClient.
  2. Uveďte mailboxUri, uživatelské jméno, heslo a doménu.
  3. Zavolejte metodu IEWSClient.listMessages() pro získání instance kolekce ExchangeMessagesInfoCollection.
  4. Procházejte kolekci ExchangeMessagesInfoCollection a získejte jedinečné URI pro každou zprávu.
  5. Zavolejte metodu IEWSClient.saveMessage() a jako parametr předáte jedinečné URI.
  6. Poskytněte metodě saveMessage() cestu, kam chcete soubor uložit.

Následující úryvek kódu ukazuje, jak použít EWS k připojení k serveru Exchange a uložit zprávy jako soubory 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");
}

Ukládání zpráv do paměťového proudu

Místo ukládání souborů EML na disk je možné je uložit do paměťového proudu. To je užitečné, pokud chcete uložit proud do úložiště, například databáze. Jakmile je proud uložen v databázi, můžete načíst soubor EML zpět do MailMessage třída. Následující úryvek kódu ukazuje, jak uložit zprávy z poštovní schránky Exchange Server do paměťového proudu pomocí 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);
}

Ukládání zpráv ve formátu MSG

The IEWSClient.saveMessage() metoda může přímo uložit zprávu do formátu EML. Pro uložení zpráv do formátu MSG nejprve zavolejte IEWSClient.fetchMessage() metoda, která vrací instanci MailMessage třída. Pak zavolejte MailMessage.save() metoda pro uložení zprávy do formátu MSG. Následující úryvek kódu ukazuje, jak získat zprávy z poštovní schránky Exchange Server a uložit je do formátu MSG pomocí 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());
}

Získání ExchangeMessageInfo z URI zprávy

E‑mailová zpráva je reprezentována svým jedinečným identifikátorem, URI, a je nedílnou součástí ExchangeMessageInfo objekt. V případě, že je k dispozici pouze URI zprávy, pak ExchangeMessageInfo objekt může být také získán pomocí dostupných informací. Přetížená verze listMessages přijímá seznam ID k použití ExchangeMessageInfoCollection. Následující úrynek kódu ukazuje, jak získat ExchangeMessageInfo z URI zprávy.

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());
}

Načíst zprávy ze schránky Exchange Server

Výpis zpráv na serveru Exchange použil listMessages() metoda pro získání seznamu zpráv ze schránky Exchange Server. listMessages() metoda získá základní informace o zprávách, například předmět, ID zprávy, odesílatele i příjemce. Pro získání kompletních podrobností o zprávě poskytuje Aspose.Email.Exchange metodu IEWSClient.fetchMessage(). Tato metoda přijímá URI zprávy jako parametr a vrací instanci MailMessage třída. The MailMessage třída pak poskytuje podrobnosti o zprávě, jako je tělo, hlavičky a přílohy. Další informace o MailMessage API, nebo zjistěte, jak spravovat e‑maily pomocí MailMessage třída. Pro načtení zpráv z poštovní schránky Exchange Server:

  1. Vytvořte instanci typu IEWSClient.
  2. Zadejte název serveru, uživatelské jméno, heslo a doménu.
  3. Zavolejte listMessages pro získání ExchangeMessageInfoCollection.
  4. Procházejte kolekci ExchangeMessageInfoCollection a získejte hodnoty ExchangeMessageInfo.UniqueURI.
  5. Zavolejte IEWSClient.fetchMessage() a jako parametr předáte ExchangeMessageInfo.UniqueURI.

Následující úryvek kódu ukazuje, jak se připojit k poštovní schránce Exchange Server a načíst všechny zprávy pomocí 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());
    }
}

Použití metody FetchItem k získání zprávy

The FetchItem metoda je upřednostňována, pokud chcete načíst MapiMessage a pracovat s vlastnostmi MAPI. Také můžete tuto metodu použít k načtení jakékoli položky Outlooku, jako je kontakt, schůzka, úkol atd.

// 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();
}

Předběžné získání velikosti zprávy

Microsoft Outlook InterOp poskytuje funkci získání velikosti zprávy před skutečným stažením kompletní zprávy ze serveru. V případě Aspose.Email API je souhrnná informace získaná ze serveru Exchange reprezentována ExchangeMessageInfo třída. Poskytuje stejnou funkci získávání velikosti zprávy pomocí vlastnosti Size. Pro získání velikosti zprávy se používá standardní volání listMessages ze služby IEWSClient, které získává kolekci ExchangeMessageInfo. Následující úryvek kódu ukazuje, jak zobrazit velikost zprávy pomocí ExchangeMessageInfo třída.

// 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("==================================");
}

Rekurzivní stahování zpráv

The EWSClient’s listSubFolders() metoda může být použita k získání zpráv ze složek a podřízených složek poštovní schránky serveru Exchange rekurzivně. To vyžaduje Exchange Server 2007 nebo novější, protože používá EWS. Následující úryvek kódu ukazuje, jak stáhnout celou poštovní schránku (složky a podřízené složky) serveru Exchange. Struktura složek je vytvořena lokálně a všechny zprávy jsou staženy.

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) {
    }
}

Stahování zpráv z veřejných složek

Microsoft Exchange Server umožňuje uživatelům vytvářet veřejné složky a zveřejňovat v nich zprávy. Pro provedení tohoto úkolu z vaší aplikace použijte Aspose.Email EWSClient třída pro připojení k serveru Exchange a čtení a stahování zpráv a příspěvků z veřejných složek. Následující úryvek kódu ukazuje, jak číst všechny veřejné složky a podřízené složky a vypisovat a stahovat všechny zprávy nalezené v těchto složkách. Tento příklad funguje pouze s Microsoft Exchange Server 2007 a novějším, protože jen ty podporují 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);
        }
    }
}

Přesouvání zpráv

Můžete přesunout e‑mailové zprávy z jedné složky do druhé pomocí IEWSClient třída přesunout metoda. Přijímá parametry:

  • Jedinečné URI zprávy, která má být přesunuta.
  • Jedinečné URI cílové složky.

Přesouvání zpráv mezi složkami

Následující úryvek kódu ukazuje, jak přesunout zprávu v poštovní schránce ze složky Doručené do složky nazvané Zpracované. V tomto příkladu aplikace:

  1. Čte zprávy ze složky Inbox.
  2. Zpracuje některé zprávy na základě kritérií (v tomto příkladu hledáme klíčové slovo v předmětu zprávy).
  3. Přesune zprávy, které splňují danou podmínku, do složky zpracované.
// 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
    }
}

Mazání zpráv

Můžete mazat e‑mailové zprávy ze složky za pomoci IEWSClient třída deleteItem metoda. Přijímá unikátní URI zprávy jako parametr.

Následující úryvek kódu ukazuje, jak odstranit zprávu ze složky Inbox. Pro účely tohoto příkladu kód:

  1. Čte zprávy ze složky Inbox.
  2. Zpracovat zprávy podle určitých kritérií (v tomto příkladu hledáme klíčové slovo v předmětu zprávy).
  3. Odstraňuje zprávu.
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
    }
}

Kopírování zpráv

Aspose.Email API umožňuje kopírovat zprávu z jedné složky do druhé pomocí copyItem metoda. Přetížená verze této metody vrací unikátní URI zkopírované zprávy, jak je ukázáno v tomto článku.

Kopírování zprávy do jiné složky

Následující úryvek kódu ukazuje, jak zkopírovat zprávu do jiné složky.

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());
}