Praca z skrzynką pocztową Exchange i wiadomościami – odczyt e‑maili z serwera Exchange w Javie

Uzyskiwanie informacji o skrzynce przy użyciu EWS

Ten EWSClient klasa ma członków, które mogą być użyte do pobrania informacji o skrzynce z serwera Exchange poprzez wywołanie IEWSClient.getMailboxInfo() metoda. Zwraca instancję typu ExchangeMailboxInfo. Uzyskaj informacje o skrzynce z właściwości takich jak MailboxUri, InboxUri i DraftsUri. Ten artykuł pokazuje, jak uzyskać dostęp do informacji o skrzynce przy użyciu Exchange Web Services.

Jeśli chcesz połączyć się z serwerem Exchange przy użyciu Exchange Web Services (EWS), użyj EWSClient klasa. Ta klasa używa EWS do połączenia i zarządzania elementami na serwerze Exchange. Poniższy fragment kodu Java pokazuje, jak uzyskać informacje o skrzynce przy użyciu usług wymiany web (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());

Wysyłanie wiadomości e‑mail

Możesz wysyłać wiadomości e‑mail przy użyciu serwera Exchange z pomocą narzędzi w Aspose.Email.Exchange. Metoda IEWSClient.Send() przyjmuje MailMessage instancję jako parametr i wysyła e‑mail. Ten artykuł wyjaśnia, jak wysyłać wiadomości e‑mail przy użyciu Exchange Web Services.

Aspose.Email udostępnia klasę IEWSClient do połączenia z Microsoft Exchange Server przy użyciu Exchange Web Services. Poniższy fragment kodu pokazuje, jak używać EWS do wysyłania e‑maili przy użyciu Microsoft Exchange Server. Poniższy fragment kodu Java pokazuje, jak wysyłać wiadomości e‑mail przy użyciu 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);

Pobieranie klasy wiadomości

Ten getMessageClass() metoda ExchangeMessageInfo klasa otrzymuje ciąg znaków reprezentujący klasę wiadomości. Poniższy przykład kodu pokazuje, jak uzyskać klasę wiadomości:

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

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

Odczytywanie e‑maili z skrzynki innego użytkownika

Niektóre konta na serwerach Exchange mają prawo dostępu do wielu skrzynek, a niektórzy użytkownicy mają wiele kont e‑mail na tym samym serwerze Exchange. W obu przypadkach użytkownicy mogą uzyskać dostęp do skrzynek innych użytkowników przy użyciu Aspose.Email dla Javy. To API zapewnia mechanizm dostępu do folderów i wiadomości z innych skrzynek przy użyciu IEWSClient klasa. Tą funkcjonalność można uzyskać przy użyciu przeładowanej getMailboxInfo() metoda i podanie adresu e‑mail użytkownika jako parametru.

Poniższy fragment kodu pokazuje, jak odczytywać e‑maile przy użyciu IEWSClient klasa.

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

Wyświetlanie wiadomości

Listę wiadomości e‑mail w skrzynce Exchange można pobrać wywołując IEWSClient.listMessages metoda. Uzyskaj podstawowe informacje o wiadomościach, takie jak temat, od, do oraz ID wiadomości, używając listMessages metoda.

Proste wyświetlanie wiadomości

Aby wyświetlić wiadomości w skrzynce Exchange:

  1. Utwórz instancję IEWSClient klasa.
  2. Wywołaj metodę listMessages i utwórz kolekcję wiadomości.
  3. Iteruj po kolekcji i wyświetlaj informacje o wiadomościach.

Poniższy fragment kodu Java pokazuje, jak połączyć się z serwerem Exchange przy użyciu EWS i wyświetlić wiadomości z folderu skrzynki odbiorczej.

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

Wyświetlanie wiadomości z różnych folderów

Powyższe fragmenty kodu, wyświetl wszystkie wiadomości w folderze Skrzynka odbiorcza. Można także uzyskać listę wiadomości z innych folderów. The IEWSClient.listMessages() metoda przyjmuje URI folderu jako parametr. Pod warunkiem, że URI folderu jest prawidłowe, możesz uzyskać listę wiadomości z tego folderu. Użyj właściwości IEWSClient.getMailboxInfo().getXXXFolderUri, aby uzyskać URI różnych folderów. Reszta kodu jest taka sama jak przy pobieraniu listy wiadomości. Poniższy fragment kodu pokazuje, jak wyświetlać wiadomości z różnych folderów przy użyciu 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);

Wyświetlanie wiadomości z obsługą stronicowania

Poniższy fragment kodu Java pokazuje, jak uzyskać listę wiadomości z obsługą stronicowania.

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

Pobieranie informacji o typie wiadomości z ExchangeMessageInfo

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

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

Zapisywanie wiadomości

Ten artykuł pokazuje, jak pobrać wiadomości ze skrzynki Exchange Server i zapisać je na dysku w formatach EML i MSG:

  • Zapisz jako EML na dysku.
  • Zapisz do strumienia pamięci.
  • Zapisz jako MSG.

Zapisywanie wiadomości do formatu EML

Aby pobrać wiadomości i zapisać w formacie EML:

  1. Utwórz instancję klasy IEWSClient.
  2. Podaj mailboxUri, nazwę użytkownika, hasło i domenę.
  3. Wywołaj metodę IEWSClient.listMessages(), aby uzyskać instancję kolekcji ExchangeMessagesInfoCollection.
  4. Iteruj przez kolekcję ExchangeMessagesInfoCollection, aby uzyskać unikalny URI każdej wiadomości.
  5. Wywołaj metodę IEWSClient.saveMessage() i przekaż unikalny URI jako parametr.
  6. Podaj metodzie saveMessage() ścieżkę, w której chcesz zapisać plik.

Poniższy fragment kodu pokazuje, jak używać EWS do połączenia z serwerem Exchange i zapisywania wiadomości jako pliki 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");
}

Zapisywanie wiadomości do strumienia pamięci

Zamiast zapisywać pliki EML na dysku, można zapisać je do strumienia pamięci. Jest to przydatne, gdy chcesz zapisać strumień w miejscu przechowywania, takim jak baza danych. Po zapisaniu strumienia w bazie danych, możesz ponownie wczytać plik EML do MailMessage klasa. Poniższy fragment kodu pokazuje, jak zapisać wiadomości ze skrzynki Exchange Server do strumienia pamięci przy użyciu 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);
}

Zapisywanie wiadomości w formacie MSG

Ten IEWSClient.saveMessage() metoda może bezpośrednio zapisać wiadomość w formacie EML. Aby zapisać wiadomości w formacie MSG, najpierw wywołaj IEWSClient.fetchMessage() metoda, która zwraca instancję MailMessage klasa. Następnie wywołaj MailMessage.save() metoda zapisująca wiadomość w formacie MSG. Poniższy fragment kodu pokazuje, jak pobrać wiadomości ze skrzynki Exchange Server i zapisać je w formacie MSG przy użyciu 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());
}

Pobieranie ExchangeMessageInfo z URI wiadomości

Wiadomość e‑mail jest reprezentowana przez swój unikalny identyfikator, URI i jest integralną częścią ExchangeMessageInfo obiekt. W przypadku, gdy dostępny jest tylko URI wiadomości, wtedy ExchangeMessageInfo obiekt może być również pobrany przy użyciu dostępnych informacji. Przeciążona wersja listMessages przyjmuje listę identyfikatorów do użycia ExchangeMessageInfoCollection. Poniższy fragment kodu pokazuje, jak uzyskać ExchangeMessageInfo z URI wiadomości.

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

Pobieranie wiadomości ze skrzynki serwera Exchange

Wymienianie wiadomości na serwerze Exchange używało listMessages() metoda do pobierania listy wiadomości ze skrzynki serwera Exchange. Ta listMessages() metoda pobiera podstawowe informacje o wiadomościach, na przykład temat, ID wiadomości, nadawcę i odbiorcę. Aby uzyskać pełne szczegóły wiadomości, Aspose.Email.Exchange udostępnia metodę IEWSClient.fetchMessage(). Metoda ta przyjmuje URI wiadomości jako parametr i zwraca instancję MailMessage klasa. Ta MailMessage klasa następnie udostępnia szczegóły wiadomości, takie jak treść, nagłówki i załączniki. Dowiedz się więcej o MailMessage API, lub dowiedz się, jak zarządzać e‑mailami przy użyciu MailMessage klasa. Aby pobrać wiadomości ze skrzynki Exchange Server:

  1. Utwórz instancję typu IEWSClient.
  2. Podaj nazwę serwera, nazwę użytkownika, hasło i domenę.
  3. Wywołaj listMessages, aby otrzymać ExchangeMessageInfoCollection.
  4. Iteruj przez kolekcję ExchangeMessageInfoCollection, aby uzyskać wartości ExchangeMessageInfo.UniqueURI.
  5. Wywołaj IEWSClient.fetchMessage() i przekaż ExchangeMessageInfo.UniqueURI jako parametr.

Poniższy fragment kodu pokazuje, jak połączyć się ze skrzynką pocztową Exchange Server i pobrać wszystkie wiadomości przy użyciu 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());
    }
}

Użycie metody FetchItem do pobrania wiadomości

Ten FetchItem metoda jest bardziej preferowana, jeśli chcesz pobrać MapiMessage i operowanie na właściwościach MAPI. Możesz także użyć tej metody do pobierania dowolnego elementu Outlook, takiego jak kontakt, spotkanie, zadanie itp.

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

Wstępne pobieranie rozmiaru wiadomości

Microsoft Outlook InterOp udostępnia funkcję pobierania rozmiaru wiadomości przed pobraniem pełnej wiadomości z serwera. W przypadku Aspose.Email API, informacje podsumowujące pobrane z serwera Exchange są reprezentowane przez ExchangeMessageInfo klasy. Zapewnia tę samą funkcję pobierania rozmiaru wiadomości przy użyciu właściwości Size. Aby pobrać rozmiar wiadomości, używa się standardowego wywołania listMessages z IEWSClient, które pobiera kolekcję ExchangeMessageInfo. Poniższy fragment kodu pokazuje, jak wyświetlić rozmiar wiadomości przy użyciu ExchangeMessageInfo klasa.

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

Pobieranie wiadomości rekurencyjnie

Ten EWSClient’s listSubFolders() metoda może być użyta do pobierania wiadomości z folderów i podfolderów skrzynki pocztowej serwera Exchange rekurencyjnie. Wymaga Exchange Server 2007 lub wyższego, ponieważ używa EWS. Poniższy fragment kodu pokazuje, jak pobrać całą skrzynkę pocztową (foldery i podfoldery) z serwera Exchange. Struktura folderów jest tworzona lokalnie i wszystkie wiadomości są pobierane.

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

Pobieranie wiadomości z folderów publicznych

Microsoft Exchange Server umożliwia użytkownikom tworzenie folderów publicznych i zamieszczanie w nich wiadomości. Aby zrobić to w swojej aplikacji, użyj Aspose.Email’s EWSClient klasa do łączenia się z serwerem Exchange i odczytywania oraz pobierania wiadomości i postów z folderów publicznych. Poniższy fragment kodu pokazuje, jak odczytać wszystkie foldery publiczne i podfoldery oraz wypisać i pobrać wszystkie wiadomości odnalezione w tych folderach. Ten przykład działa tylko z Microsoft Exchange Server 2007 lub nowszym, ponieważ tylko one obsługują 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);
        }
    }
}

Przenoszenie wiadomości

Możesz przenosić wiadomości e‑mail z jednego folderu do drugiego przy pomocy IEWSClient klasa przenieś metoda. Przyjmuje następujące parametry:

  • Unikalny URI wiadomości, którą należy przenieść.
  • Unikalny URI folderu docelowego.

Przenoszenie wiadomości między folderami

Poniższy fragment kodu pokazuje, jak przenieść wiadomość w skrzynce pocztowej z folderu Odebrane do folderu o nazwie Przetworzone. W tym przykładzie aplikacja:

  1. Czyta wiadomości z folderu Skrzynka odbiorcza.
  2. Przetwarza niektóre wiadomości na podstawie określonych kryteriów (w tym przykładzie szukamy słowa kluczowego w temacie wiadomości).
  3. Przenosi wiadomości spełniające podany warunek do folderu przetworzone.
// 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
    }
}

Usuwanie wiadomości

Możesz usunąć wiadomości e-mail z folderu przy pomocy IEWSClient klasa deleteItem metoda. Przyjmuje unikalny URI wiadomości jako parametr.

Poniższy fragment kodu pokazuje, jak usunąć wiadomość z folderu Skrzynka odbiorcza. Dla potrzeb tego przykładu kod:

  1. Czyta wiadomości z folderu Skrzynka odbiorcza.
  2. Przetwarzaj wiadomości na podstawie pewnych kryteriów (w tym przykładzie szukamy słowa kluczowego w temacie wiadomości).
  3. Usuwa wiadomość.
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
    }
}

Kopiowanie wiadomości

API Aspose.Email umożliwia skopiowanie wiadomości z jednego folderu do drugiego przy użyciu copyItem metoda. Przeciążona wersja tej metody zwraca unikalny URI skopiowanej wiadomości, jak pokazano w tym artykule.

Kopiowanie wiadomości do innego folderu

Poniższy fragment kodu pokazuje, jak skopiować wiadomość do innego folderu.

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