Werken met Exchange-mailbox en berichten - E-mail lezen van Exchange Server in Java

Mailboxinformatie ophalen met EWS

De EWSClient klasse heeft leden die kunnen worden gebruikt om mailbox‑informatie van een Exchange‑Server op te halen door de IEWSClient.getMailboxInfo() methode. Het retourneert een instantie van het type ExchangeMailboxInfo. Haal mailbox‑informatie op uit eigenschappen zoals MailboxUri, InboxUri en DraftsUri. Dit artikel toont hoe je mailboxinformatie benadert met Exchange Web Services.

Als je verbinding wilt maken met de Exchange Server via Exchange Web Services (EWS), gebruik dan de EWSClient klasse. Deze klasse gebruikt EWS om verbinding te maken met en items te beheren op een Exchange Server. Het volgende Java-codefragment toont hoe je mailboxinformatie krijgt met behulp van de 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());

E-mailberichten verzenden

Je kunt e-mailberichten verzenden via een Exchange Server met behulp van de tools in Aspose.Email.Exchange. De IEWSClient.Send() methode accepteert een MailMessage instantie als parameter en stuurt de e-mail. Dit artikel legt uit hoe je e-mailberichten verzendt met Exchange Web Services.

Aspose.Email biedt de IEWSClient-klasse om verbinding te maken met Microsoft Exchange Server via Exchange Web Services. Het volgende codefragment toont hoe je EWS gebruikt om e-mails te verzenden via Microsoft Exchange Server. Het volgende Java-codefragment toont hoe je e-mailberichten verzendt met 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);

Berichtklasse ophalen

De getMessageClass() methode van de ExchangeMessageInfo klasse krijgt een tekenreeks die de klasse van het bericht voorstelt. De onderstaande codevoorbeeld toont hoe je de berichtklasse krijgt:

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

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

E-mails lezen uit de mailbox van een andere gebruiker

Sommige accounts op Exchange-servers hebben het recht om toegang te krijgen tot meerdere mailboxen, en sommige gebruikers hebben meerdere e-mailaccounts op dezelfde Exchange-server. In beide gevallen kunnen gebruikers de mailboxen van andere gebruikers benaderen met Aspose.Email voor Java. Deze API biedt een mechanisme om mappen en e-mails uit andere mailboxen te benaderen met behulp van de IEWSClient klasse. Deze functionaliteit kan worden bereikt met de overlaste getMailboxInfo() methode en het e-mailadres van de gebruiker als parameter opgeeft.

Het volgende codefragment toont hoe je e-mails leest met behulp van IEWSClient klasse.

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

Berichten weergeven

Een lijst met e‑mailberichten in een Exchange‑mailbox kan worden opgehaald door de IEWSClient.listMessages methode. Haal de basisinformatie over berichten op, zoals onderwerp, afzender, geadresseerde en bericht‑ID, met behulp van de listMessages methode.

Eenvoudige berichtenlijst

Om de berichten in een Exchange-mailbox weer te geven:

  1. Maak een instantie van de IEWSClient klasse.
  2. Roep de listMessages-methode aan en maak een berichtcollectie.
  3. Itereer door de collectie en geef berichtinformatie weer.

Het volgende Java-codefragment toont hoe je verbinding maakt met een exchange server via EWS en berichten uit de inbox-map weergeeft.

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

Berichten weergeven uit verschillende mappen

De bovenstaande codefragmenten, lijst alle berichten in de Inbox-map. Het is mogelijk de lijst van berichten uit andere mappen te krijgen. De IEWSClient.listMessages() methode accepteert een map-URI als parameter. Zolang de map-URI geldig is, kun je de lijst met berichten van die map krijgen. Gebruik de IEWSClient.getMailboxInfo().getXXXFolderUri eigenschap om de URI van verschillende mappen op te halen. De rest van de code is hetzelfde als voor het ophalen van een lijst met berichten. Het volgende codefragment laat zien hoe je berichten van verschillende mappen weergeeft met behulp van 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);

Berichten weergeven met pagineringsondersteuning

Het volgende Java-codefragment toont hoe je een lijst van berichten krijgt met pagineringsondersteuning.

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

Berichttype-informatie ophalen vanuit ExchangeMessageInfo

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

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

Berichten opslaan

Dit artikel toont hoe je berichten van een Exchange Server-mailbox haalt en ze opslaat op schijf in EML- en MSG-formaten:

  • Opslaan als EML op schijf.
  • Opslaan naar geheugenstroom.
  • Opslaan als MSG.

Berichten opslaan naar EML

Om berichten te krijgen en op te slaan in EML-formaat:

  1. Maak een instantie van de IEWSClient-klasse aan.
  2. Geef de mailboxUri, gebruikersnaam, wachtwoord en domein op.
  3. Roep de IEWSClient.listMessages() methode aan om een instantie van de ExchangeMessagesInfoCollection-collectie te krijgen.
  4. Loop door de ExchangeMessagesInfoCollection-collectie om de unieke URI voor elk bericht te verkrijgen.
  5. Roep de IEWSClient.saveMessage() methode aan en geef de unieke URI als parameter door.
  6. Geef de saveMessage() methode een pad waar je het bestand wilt opslaan.

Het volgende codefragment laat zien hoe je EWS gebruikt om verbinding te maken met de Exchange Server en berichten op te slaan als EML-bestanden.

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

Berichten opslaan naar een geheugenstroom

In plaats van EML-bestanden op schijf op te slaan, is het mogelijk deze op te slaan in een geheugenstroom. Dit is handig wanneer je de stroom wilt opslaan op een opslaglocatie zoals een database. Zodra de stroom is opgeslagen in een database, kun je het EML-bestand opnieuw laden in de MailMessage klasse. Het volgende codefragment laat zien hoe je berichten van een Exchange Server-mailbox opslaat naar een geheugenstroom met behulp van 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);
}

Berichten opslaan in MSG-formaat

De IEWSClient.saveMessage() methode kan het bericht direct opslaan in EML-formaat. Om de berichten op te slaan in MSG-formaat, roep eerst de IEWSClient.fetchMessage() methode die een instantie van de retourneert MailMessage klasse. Roep vervolgens de MailMessage.save() methode om het bericht op te slaan als MSG. Het volgende codefragment laat zien hoe je berichten van een Exchange Server-mailbox krijgt en ze opslaat in het MSG-formaat met behulp van 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());
}

ExchangeMessageInfo ophalen vanuit bericht-URI

Een e-mailbericht wordt weergegeven door zijn unieke identifier, URI, en is een integraal onderdeel van de ExchangeMessageInfo object. In het geval dat alleen de bericht-URI beschikbaar is, dan ExchangeMessageInfo object kan ook worden opgehaald met deze beschikbare informatie. De overlaste versie van listMessages neemt een lijst van ID’s om te gebruiken ExchangeMessageInfoCollection. Het volgende codefragment laat zien hoe je krijgt ExchangeMessageInfo van bericht-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());
}

Berichten ophalen uit een Exchange Server mailbox

Berichtenlijst op een Exchange Server gebruikte de listMessages() methode om een lijst van berichten uit een Exchange Server mailbox te krijgen. De listMessages() methode haalt basisinformatie op over berichten, bijvoorbeeld het onderwerp, de bericht-ID, van en aan. Om de volledige berichtdetails te krijgen, biedt Aspose.Email.Exchange de IEWSClient.fetchMessage() methode. Deze methode accepteert de bericht-URI als parameter en retourneert een instantie van de MailMessage klasse. De MailMessage klasse biedt vervolgens berichtdetails zoals body, headers en bijlagen. Ontdek meer over de MailMessage API, of ontdek hoe je e-mails beheert met de MailMessage klasse. Om berichten op te halen van de Exchange Server-mailbox:

  1. Maak een instantie van het type IEWSClient aan.
  2. Specificeer de servernaam, gebruikersnaam, wachtwoord en domein.
  3. Roep listMessages aan om de ExchangeMessageInfoCollection te krijgen.
  4. Loop door de ExchangeMessageInfoCollection-collectie om ExchangeMessageInfo.UniqueURI-waarden te verkrijgen.
  5. Roep IEWSClient.fetchMessage() aan en geef ExchangeMessageInfo.UniqueURI als parameter door.

De volgende codefragment laat zien hoe je verbinding maakt met de Exchange Server-mailbox en alle berichten ophaalt met behulp van 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());
    }
}

De FetchItem-methode gebruiken om een bericht op te halen

De FetchItem methode heeft de voorkeur als je een wilt ophalen MapiMessage en werken met MAPI-eigenschappen. Je kunt deze methode ook gebruiken om elk Outlook-item op te halen, zoals een contact, afspraak, taak, enz.

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

Berichtgrootte vooraf ophalen

Microsoft Outlook InterOp biedt de mogelijkheid om de berichtgrootte op te halen voordat het volledige bericht van de server wordt opgehaald. In het geval van de Aspose.Email API wordt de samenvattende informatie die van de Exchange-server wordt opgehaald, weergegeven door ExchangeMessageInfo klasse. Het biedt dezelfde functionaliteit om de berichtgrootte op te halen met de Size-eigenschap. Om de berichtgrootte op te halen, wordt de standaardaanroep naar IEWSClient’s listMessages gebruikt die een verzameling van ExchangeMessageInfo. Het volgende codefragment toont hoe je de berichtgrootte weergeeft met behulp van de ExchangeMessageInfo klasse.

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

Berichten recursief downloaden

De EWSClient’s listSubFolders() methode kan worden gebruikt om berichten uit mappen en submappen van een Exchange Server-mailbox recursief op te halen. Dit vereist Exchange Server 2007 of hoger, omdat het EWS gebruikt. Het volgende codefragment laat zien hoe je de volledige mailbox (mappen en submappen) van een Exchange Server downloadt. De mapstructuur wordt lokaal aangemaakt en alle berichten worden gedownload.

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

Berichten downloaden uit openbare mappen

Microsoft Exchange Server laat gebruikers openbare mappen aanmaken en berichten posten. Om dit via je applicatie te doen, gebruik Aspose.Email’s EWSClient klasse om verbinding te maken met de Exchange Server en berichten en berichten uit openbare mappen te lezen en te downloaden. Het volgende codefragment laat zien hoe je alle openbare mappen en submappen uitleest, en eventuele berichten die in deze mappen worden gevonden, lijst en downloadt. Dit voorbeeld werkt alleen met Microsoft Exchange Server 2007 of hoger, aangezien alleen deze EWS ondersteunen.

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

Berichten verplaatsen

Je kunt e‑mailberichten van de ene map naar de andere verplaatsen met behulp van de IEWSClient klasse verplaatsen methode. Deze neemt de parameters:

  • De unieke URI van het bericht dat verplaatst moet worden.
  • De unieke URI van de bestemmingsmap.

Berichten verplaatsen tussen mappen

De volgende codefragment toont hoe je een bericht in een mailbox van de Inbox-map naar een map genaamd Verwerkt verplaatst. In dit voorbeeld, de applicatie:

  1. Leest berichten uit de Inbox‑map.
  2. Verwerkt sommige berichten op basis van criteria (in dit voorbeeld zoeken we een trefwoord in het onderwerp van het bericht).
  3. Verplaatst berichten die aan de gegeven voorwaarde voldoen naar de verwerkte map.
// 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
    }
}

Berichten verwijderen

Je kunt e-mailberichten uit een map verwijderen met behulp van de IEWSClient klasse deleteItem methode. Het neemt de unieke URI van het bericht als parameter.

Het volgende codefragment toont hoe je een bericht uit de Inbox-map verwijdert. Voor dit voorbeeld is de code:

  1. Leest berichten uit de Inbox‑map.
  2. Verwerk berichten op basis van bepaalde criteria (in dit voorbeeld zoeken we een trefwoord in het onderwerp van het bericht).
  3. Verwijdert het bericht.
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
    }
}

Berichten kopiëren

Aspose.Email API stelt je in staat een bericht van de ene map naar een andere map te kopiëren met behulp van de copyItem methode. De overladen versie van deze methode retourneert de unieke URI van het gekopieerde bericht zoals getoond in dit artikel.

Een bericht naar een andere map kopiëren

Het volgende codefragment toont hoe je een bericht naar een andere map kopieert.

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