Arbeta med Exchange-brevlåda och meddelanden - Läs e‑post från Exchange‑server i Java

Hämtar brevlådsinformation med EWS

Den EWSClient klassen har medlemmar som kan användas för att hämta brevlådsinformation från en Exchange‑server genom att anropa IEWSClient.getMailboxInfo() metod. Den returnerar en instans av typen ExchangeMailboxInfo. Hämta brevlådsinformation från egenskaper som MailboxUri, InboxUri och DraftsUri. Denna artikel visar hur du får åtkomst till brevlådsinformation med Exchange Web Services.

Om du vill ansluta till Exchange Server med Exchange Web Services (EWS), använd EWSClient klass. Denna klass använder EWS för att ansluta till och hantera objekt på en Exchange Server. Följande Java‑kodsnutt visar hur du får brevlådsinformation med 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());

Skicka e‑postmeddelanden

Du kan skicka e‑postmeddelanden via en Exchange Server med hjälp av verktygen i Aspose.Email.Exchange. IEWSClient.Send()-metoden accepterar en MailMessage instans som parameter och skickar e‑posten. Denna artikel förklarar hur man skickar e‑postmeddelanden med Exchange Web Services.

Aspose.Email tillhandahåller IEWSClient‑klassen för att ansluta till Microsoft Exchange Server via Exchange Web Services. Följande kodsnutt visar hur du använder EWS för att skicka e‑post med Microsoft Exchange Server. Följande Java‑kodsnutt visar hur du skickar e‑postmeddelanden med 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);

Hämtar meddelandeklass

Den getMessageClass() metod för ExchangeMessageInfo klassen får en sträng som representerar meddelandeklassen. Kodexemplet nedan visar hur du får meddelandeklassen:

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

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

Läser e‑post från en annan användares brevlåda

Vissa konton på Exchange‑servrar har rätt att komma åt flera brevlådor, och vissa användare har flera e‑postkonton på samma Exchange Server. I båda fallen kan användare komma åt andras brevlådor med Aspose.Email för Java. Detta API erbjuder en mekanism för åtkomst till mappar och e‑post från andra brevlådor med IEWSClient klass. Denna funktion kan uppnås med den överlagrade getMailboxInfo() metoden och ange användarens e‑postadress som parameter.

Följande kodsnutt visar hur du läser e‑post med IEWSClient klass.

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

Lista meddelanden

En lista över e‑postmeddelanden i en Exchange‑brevlåda kan hämtas genom att anropa IEWSClient.listMessages metod. Hämta grundläggande information om meddelanden, som ämne, avsändare, mottagare och meddelande‑ID, med hjälp av listMessages metod.

Enkel meddelandelista

För att lista meddelandena i en Exchange‑brevlåda:

  1. Skapa en instans av IEWSClient klass.
  2. Anropa listMessages‑metoden och skapa en meddelandesamling.
  3. Iterera genom samlingen och visa meddelandeinformation.

Följande Java‑kodsnutt visar hur du ansluter till en exchange‑server med EWS och listar meddelanden från inkorgsmappen.

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

Lista meddelanden från olika mappar

Ovanstående kodsnuttar, lista alla meddelanden i Inkorgen. Det är möjligt att hämta listan med meddelanden från andra mappar också. Den IEWSClient.listMessages() metoden accepterar en mapp‑URI som parameter. Så länge mapp‑URI:n är giltig kan du hämta listan med meddelanden från den mappen. Använd IEWSClient.getMailboxInfo().getXXXFolderUri‑egenskapen för att få URI:n för olika mappar. Resten av koden är densamma som för att hämta en lista med meddelanden. Följande kodsnutt visar hur du listar meddelanden från olika mappar med 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);

Lista meddelanden med sidindelningsstöd

Följande Java‑kodsnutt visar hur du får en lista med meddelanden med sidindelningsstöd.

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

Hämtar meddelandetypinformation från ExchangeMessageInfo

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

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

Spara meddelanden

Denna artikel visar hur du hämtar meddelanden från en Exchange Server‑brevlåda och sparar dem på disk i EML‑ och MSG‑format:

  • Spara som EML på disk.
  • Spara till minnesström.
  • Spara som MSG.

Spara meddelanden till EML

För att hämta meddelanden och spara i EML-format:

  1. Skapa en instans av IEWSClient‑klassen.
  2. Ange mailboxUri, användarnamn, lösenord och domän.
  3. Anropa IEWSClient.listMessages‑metoden för att få en instans av ExchangeMessagesInfoCollection‑samlingen.
  4. Loopa igenom ExchangeMessagesInfoCollection för att få den unika URI:n för varje meddelande.
  5. Anropa IEWSClient.saveMessage‑metoden och skicka den unika URI:n som parameter.
  6. Tillhandahåll en sökväg till saveMessage‑metoden där du vill spara filen.

Följande kodsnutt visar hur du använder EWS för att ansluta till Exchange Server och spara meddelanden som EML‑filer.

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

Spara meddelanden till ett minnesström

Istället för att spara EML‑filer på disk, är det möjligt att spara dem i ett minnesström. Detta är användbart när du vill spara strömmen till någon lagringsplats som en databas. När strömmen har sparats i en databas kan du ladda om EML‑filen i MailMessage klass. Följande kodsnutt visar hur du sparar meddelanden från en Exchange Server‑brevlåda till ett minnesström med 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);
}

Spara meddelanden i MSG‑format

Den IEWSClient.saveMessage() metoden kan direkt spara meddelandet i EML‑format. För att spara meddelandena i MSG‑format, anropa först IEWSClient.fetchMessage() metod som returnerar en instans av MailMessage klass. Anropa sedan MailMessage.save() metod för att spara meddelandet till MSG. Följande kodsnutt visar hur du hämtar meddelanden från en Exchange Server‑brevlåda och sparar dem i MSG‑format med 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());
}

Hämtar ExchangeMessageInfo från meddelande‑URI

Ett e‑postmeddelande representeras av sin unika identifierare, URI, och är en integrerad del av ExchangeMessageInfo objekt. Om endast meddelande‑URI är tillgängligt, då ExchangeMessageInfo objekt kan också hämtas med denna tillgängliga information. Den överlagrade versionen av listMessages tar en lista med Id:n att använda ExchangeMessageInfoCollection. Följande kodsnutt visar hur du får ExchangeMessageInfo från meddelande‑URI.

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

Hämta meddelanden från en Exchange Server-inkorg

Listning av meddelanden på en Exchange Server använde listMessages() metod för att hämta en lista med meddelanden från en Exchange Server-inkorg. Den listMessages() metoden hämtar grundläggande information om meddelanden, till exempel ämne, meddelande‑ID, från och till. För att få kompletta meddelandedetaljer tillhandahåller Aspose.Email.Exchange IEWSClient.fetchMessage‑metoden. Denna metod accepterar meddelandets URI som parameter och returnerar en instans av MailMessage klass. Den MailMessage klassen ger sedan meddelandedetaljer såsom kropp, rubriker och bilagor. Läs mer om MailMessage API, eller ta reda på hur du hanterar e‑post med MailMessage klass. För att hämta meddelanden från Exchange Server‑brevlåda:

  1. Skapa en instans av typen IEWSClient.
  2. Ange servernamn, användarnamn, lösenord och domän.
  3. Anropa listMessages för att få ExchangeMessageInfoCollection.
  4. Loopa igenom ExchangeMessageInfoCollection för att få ExchangeMessageInfo.UniqueURI‑värden.
  5. Anropa IEWSClient.fetchMessage() och skicka med ExchangeMessageInfo.UniqueURI som parameter.

Följande kodsnutt visar hur du ansluter till Exchange Server‑brevlådan och hämtar alla meddelanden med hjälp av 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());
    }
}

Använda FetchItem‑metoden för att hämta ett meddelande

Den FetchItem metod föredras mer om du vill hämta en MapiMessage och arbeta med MAPI‑egenskaper. Du kan också använda denna metod för att hämta valfri Outlook‑post, såsom en kontakt, möte, uppgift osv.

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

Förhämta meddelandestorlek

Microsoft Outlook InterOp tillhandahåller funktionen att hämta meddelandestorlek innan hela meddelandet hämtas från servern. I fallet med Aspose.Email API representeras summeringsinformationen hämtad från Exchange‑servern av ExchangeMessageInfo klass. Den tillhandahåller samma funktion för att hämta meddelandestorlek med Size‑egenskapen. För att hämta meddelandestorleken används standardanropet till IEWSClients listMessages som hämtar en samling av ExchangeMessageInfo. Följande kodsnutt visar hur du visar meddelandestorlek med hjälp av ExchangeMessageInfo klass.

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

Ladda ner meddelanden rekursivt

Den EWSClient’s listSubFolders() metod kan användas för att hämta meddelanden från mappar och undermappar i en Exchange Server-brevlåda rekursivt. Detta kräver Exchange Server 2007 eller högre, eftersom den använder EWS. Följande kodsnutt visar hur du laddar ner hela brevlådan (mappar och undermappar) från en Exchange Server. Mappstrukturen skapas lokalt och alla meddelanden laddas ner.

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

Ladda ner meddelanden från offentliga mappar

Microsoft Exchange Server låter användare skapa offentliga mappar och posta meddelanden i dem. För att göra detta via din applikation, använd Aspose.Email:s EWSClient klass för att ansluta till Exchange Server och läsa samt ladda ner meddelanden och inlägg från offentliga mappar. Följande kodsnutt visar hur du läser alla offentliga mappar och undermappar samt listar och laddar ner eventuella meddelanden som finns i dessa mappar. Detta exempel fungerar bara med Microsoft Exchange Server 2007 eller senare eftersom endast dessa stöder 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);
        }
    }
}

Flytta meddelanden

Du kan flytta e‑postmeddelanden från en mapp till en annan med hjälp av IEWSClient klass flytta metod. Den tar parametrarna:

  • Den unika URI:n för meddelandet som ska flyttas.
  • Den unika URI:n för destinationsmappen.

Flytta meddelanden mellan mappar

Följande kodsnutt visar hur du flyttar ett meddelande i en brevlåda från Inkorg-mappen till en mapp som heter Processed. I detta exempel, applikationen:

  1. Läser meddelanden från inkorgsmappen.
  2. Behandlar några av meddelandena baserat på vissa kriterier (i detta exempel söker vi ett nyckelord i meddelandets ämne).
  3. Flyttar meddelanden som uppfyller det givna villkoret till den bearbetade mappen.
// 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
    }
}

Radera meddelanden

Du kan ta bort e‑postmeddelanden från en mapp med hjälp av IEWSClient klass deleteItem metod. Den tar meddelandets unika URI som parameter.

Följande kodsnutt visar hur du tar bort ett meddelande från Inkorgen. För detta exempel är koden:

  1. Läser meddelanden från inkorgsmappen.
  2. Bearbeta meddelanden baserat på vissa kriterier (i detta exempel hittar vi ett nyckelord i meddelandets ämne).
  3. Tar bort meddelandet.
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
    }
}

Kopierar meddelanden

Aspose.Email API tillåter att kopiera ett meddelande från en mapp till en annan med hjälp av copyItem metod. Den överlagrade versionen av denna metod returnerar den unika URI:n för det kopierade meddelandet som visas i den här artikeln.

Kopiera ett meddelande till en annan mapp

Följande kodsnutt visar hur du kopierar ett meddelande till en annan mapp.

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