Bekerja dengan Kotak Surat dan Pesan Exchange - Membaca Email dari Server Exchange dengan Java

Mendapatkan Informasi Kotak Surat Menggunakan EWS

The EWSClient kelas memiliki anggota yang dapat digunakan untuk mendapatkan informasi kotak surat dari Exchange Server dengan memanggil IEWSClient.getMailboxInfo() metode. Mengembalikan sebuah instance tipe ExchangeMailboxInfo. Dapatkan informasi kotak surat dari properti seperti MailboxUri, InboxUri dan DraftsUri. Artikel ini menunjukkan cara mengakses informasi kotak surat menggunakan Exchange Web Services.

Jika Anda ingin terhubung ke Exchange Server menggunakan Exchange Web Services (EWS), gunakan EWSClient kelas. Kelas ini menggunakan EWS untuk terhubung dan mengelola item pada Exchange Server. Potongan kode Java berikut menunjukkan cara mendapatkan informasi kotak surat menggunakan layanan web exchange.

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

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

Mengirim Pesan Email

Anda dapat mengirim pesan email menggunakan Exchange Server dengan bantuan alat di Aspose.Email.Exchange. Metode IEWSClient.Send() menerima sebuah MailMessage instance sebagai parameter dan mengirim email. Artikel ini menjelaskan cara mengirim pesan email menggunakan Exchange Web Services.

Aspose.Email menyediakan kelas IEWSClient untuk terhubung ke Microsoft Exchange Server menggunakan Exchange Web Services. Potongan kode berikut menunjukkan cara menggunakan EWS untuk mengirim email menggunakan Microsoft Exchange Server. Potongan kode Java berikut menunjukkan cara mengirim pesan email menggunakan 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);

Mendapatkan Kelas Pesan

The getMessageClass() metode dari ExchangeMessageInfo kelas mendapatkan string yang mewakili kelas untuk pesan. Contoh kode di bawah menunjukkan cara mendapatkan kelas pesan:

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

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

Membaca Email dari Kotak Surat Pengguna Lain

Beberapa akun di Server Exchange memiliki hak untuk mengakses banyak kotak surat, dan beberapa pengguna memiliki banyak akun email pada Server Exchange yang sama. Dalam kedua kasus, pengguna dapat mengakses kotak surat pengguna lain menggunakan Aspose.Email untuk Java. API ini menyediakan mekanisme untuk mengakses folder dan email dari kotak surat lain menggunakan IEWSClient kelas. Fungsionalitas ini dapat dicapai menggunakan overload getMailboxInfo() metode dan menyediakan alamat email pengguna sebagai parameter.

Potongan kode berikut menunjukkan cara membaca email menggunakan IEWSClient kelas.

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

Mendaftar Pesan

Daftar email dalam kotak surat Exchange dapat diambil dengan memanggil IEWSClient.listMessages metode. Dapatkan informasi dasar tentang pesan, seperti subjek, pengirim, penerima, dan ID pesan, menggunakan listMessages metode.

Daftar Pesan Sederhana

Untuk mendaftar pesan di kotak surat Exchange:

  1. Buat sebuah instansi dari IEWSClient kelas.
  2. Panggil metode listMessages dan buat koleksi pesan.
  3. Lakukan perulangan pada koleksi dan tampilkan informasi pesan.

Potongan kode Java berikut menunjukkan cara terhubung ke server exchange menggunakan EWS dan menampilkan pesan dari folder kotak masuk.

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

Mendaftar Pesan Dari Berbagai Folder

Potongan kode di atas, daftar semua pesan di folder Kotak Masuk. Dimungkinkan untuk mendapatkan daftar pesan dari folder lain juga. The IEWSClient.listMessages() metode menerima URI folder sebagai parameter. Selama URI folder valid, Anda dapat mendapatkan daftar pesan dari folder tersebut. Gunakan properti IEWSClient.getMailboxInfo().getXXXFolderUri untuk mendapatkan URI berbagai folder. Sisa kode sama seperti untuk mendapatkan daftar pesan. Potongan kode berikut menunjukkan cara mendaftar pesan dari berbagai folder menggunakan 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);

Mendaftar Pesan dengan Dukungan Paging

Potongan kode Java berikut menunjukkan cara mendapatkan daftar pesan dengan dukungan paging.

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

Mendapatkan Informasi Tipe Pesan dari ExchangeMessageInfo

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

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

Menyimpan Pesan

Artikel ini menunjukkan cara mengambil pesan dari kotak surat Exchange Server dan menyimpannya ke disk dalam format EML dan MSG:

  • Simpan sebagai EML di disk.
  • Simpan ke aliran memori.
  • Simpan sebagai MSG.

Menyimpan Pesan ke EML

Untuk mendapatkan pesan dan menyimpannya dalam format EML:

  1. Buat sebuah instance dari kelas IEWSClient.
  2. Berikan mailboxUri, nama pengguna, kata sandi, dan domain.
  3. Panggil metode IEWSClient.listMessages() untuk mendapatkan sebuah instance dari koleksi ExchangeMessagesInfoCollection.
  4. Iterasikan koleksi ExchangeMessagesInfoCollection untuk mendapatkan URI unik setiap pesan.
  5. Panggil metode IEWSClient.saveMessage() dan berikan URI unik sebagai parameter.
  6. Berikan metode saveMessage() dengan jalur ke lokasi tempat Anda ingin menyimpan file.

Potongan kode berikut menunjukkan cara menggunakan EWS untuk terhubung ke Exchange Server dan menyimpan pesan sebagai file 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");
}

Menyimpan Pesan ke Aliran Memori

Alih-alih menyimpan file EML ke disk, Anda dapat menyimpannya ke aliran memori. Ini berguna ketika Anda ingin menyimpan aliran ke lokasi penyimpanan seperti basis data. Setelah aliran disimpan ke basis data, Anda dapat memuat kembali file EML ke dalam MailMessage kelas. Potongan kode berikut menunjukkan cara menyimpan pesan dari kotak surat Exchange Server ke aliran memori menggunakan 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);
}

Menyimpan Pesan dalam Format MSG

The IEWSClient.saveMessage() metode dapat langsung menyimpan pesan ke format EML. Untuk menyimpan pesan ke format MSG, pertama panggil IEWSClient.fetchMessage() metode yang mengembalikan sebuah instance dari MailMessage kelas. Kemudian panggil the MailMessage.save() metode untuk menyimpan pesan ke MSG. Potongan kode berikut menunjukkan cara mengambil pesan dari kotak surat Exchange Server dan menyimpannya ke format MSG menggunakan 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());
}

Mendapatkan ExchangeMessageInfo dari URI Pesan

Sebuah pesan email direpresentasikan oleh pengidentifikasi uniknya, URI, dan merupakan bagian integral dari ExchangeMessageInfo objek. Jika hanya URI pesan yang tersedia, maka ExchangeMessageInfo objek juga dapat diambil menggunakan informasi yang tersedia ini. Versi overload dari listMessages mengambil daftar Id untuk digunakan ExchangeMessageInfoCollection. Potongan kode berikut menunjukkan cara mendapatkan ExchangeMessageInfo dari URI pesan.

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

Ambil Pesan dari Kotak Surat Exchange Server

Mendaftarkan Pesan pada Exchange Server menggunakan listMessages() metode untuk mendapatkan daftar pesan dari kotak surat Exchange Server. The listMessages() metode ini mendapatkan informasi dasar tentang pesan, misalnya subjek, ID pesan, pengirim, dan penerima. Untuk mendapatkan detail lengkap pesan, Aspose.Email.Exchange menyediakan metode IEWSClient.fetchMessage(). Metode ini menerima URI pesan sebagai parameter dan mengembalikan sebuah instance dari MailMessage kelas. The MailMessage kelas kemudian menyediakan detail pesan seperti isi, header, dan lampiran. Pelajari lebih lanjut tentang MailMessage API, atau cari tahu cara mengelola email dengan MailMessage kelas. Untuk mengambil pesan dari Kotak Surat Server Exchange:

  1. Buat sebuah instance tipe IEWSClient.
  2. Tentukan nama server, nama pengguna, kata sandi, dan domain.
  3. Panggil listMessages untuk mendapatkan ExchangeMessageInfoCollection.
  4. Iterasikan koleksi ExchangeMessageInfoCollection untuk mendapatkan nilai ExchangeMessageInfo.UniqueURI.
  5. Panggil IEWSClient.fetchMessage() dan berikan ExchangeMessageInfo.UniqueURI sebagai parameter.

Potongan kode berikut menunjukkan Anda menghubungkan ke kotak surat Exchange Server dan mengambil semua pesan menggunakan 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());
    }
}

Menggunakan metode FetchItem untuk mengambil pesan

The FetchItem metode lebih disarankan jika Anda ingin mengambil sebuah MapiMessage dan beroperasi dengan properti MAPI. Anda juga dapat menggunakan metode ini untuk mengambil item Outlook apa pun, seperti kontak, janji, tugas, dll.

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

Pra-Ambil Ukuran Pesan

Microsoft Outlook InterOp menyediakan fitur mengambil ukuran pesan sebelum sebenarnya mengambil pesan lengkap dari server. Pada Aspose.Email API, informasi ringkasan yang diambil dari server Exchange diwakili oleh ExchangeMessageInfo kelas. Ini menyediakan fitur yang sama untuk mengambil ukuran pesan menggunakan properti Size. Untuk mengambil ukuran pesan, panggilan standar ke listMessages milik IEWSClient digunakan yang mengambil koleksi ExchangeMessageInfo. Potongan kode berikut menunjukkan cara menampilkan ukuran pesan menggunakan ExchangeMessageInfo kelas.

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

Unduh Pesan Secara Rekursif

The EWSClient’s listSubFolders() metode dapat digunakan untuk mengambil pesan dari folder dan subfolder dalam kotak surat Exchange Server secara rekursif. Ini memerlukan Exchange Server 2007 atau lebih tinggi, karena menggunakan EWS. Potongan kode berikut menunjukkan cara mengunduh seluruh kotak surat (folder dan subfolder) dari Exchange Server. Struktur folder dibuat secara lokal dan semua pesan diunduh.

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

Unduh Pesan dari Folder Publik

Microsoft Exchange Server memungkinkan pengguna membuat folder publik dan memposting pesan di dalamnya. Untuk melakukan ini melalui aplikasi Anda, gunakan Aspose.Email’s EWSClient kelas untuk terhubung ke Exchange Server dan membaca serta mengunduh pesan dan posting dari folder publik. Potongan kode berikut menunjukkan cara membaca semua folder publik, serta subfoldernya, dan mencantumkan serta mengunduh setiap pesan yang ditemukan di folder tersebut. Contoh ini hanya berfungsi dengan Microsoft Exchange Server 2007 atau lebih tinggi karena hanya versi tersebut yang mendukung 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);
        }
    }
}

Memindahkan Pesan

Anda dapat memindahkan pesan email dari satu folder ke folder lain dengan bantuan IEWSClient kelas pindahkan metode. Memerlukan parameter:

  • URI unik dari pesan yang akan dipindahkan.
  • URI unik dari folder tujuan.

Memindahkan Pesan antar Folder

Potongan kode berikut menunjukkan cara memindahkan pesan dalam kotak surat dari folder Kotak Masuk ke folder yang disebut Diproses. Dalam contoh ini, aplikasi:

  1. Membaca pesan dari folder Inbox.
  2. Memproses beberapa pesan berdasarkan kriteria tertentu (dalam contoh ini, kita menemukan kata kunci pada subjek pesan).
  3. Memindahkan pesan yang memenuhi kondisi yang diberikan ke folder diproses.
// 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
    }
}

Menghapus Pesan

Anda dapat menghapus email dari sebuah folder dengan bantuan IEWSClient kelas deleteItem metode. Metode ini mengambil URI unik pesan sebagai parameter.

Potongan kode berikut menunjukkan cara menghapus pesan dari folder Kotak Masuk. Untuk tujuan contoh ini, kode:

  1. Membaca pesan dari folder Inbox.
  2. Proses pesan berdasarkan beberapa kriteria (dalam contoh ini, kami menemukan kata kunci dalam subjek pesan).
  3. Menghapus pesan.
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
    }
}

Menyalin Pesan

API Aspose.Email memungkinkan menyalin pesan dari satu folder ke folder lain menggunakan copyItem metode. Versi overload dari metode ini mengembalikan URI Unik dari pesan yang disalin seperti yang ditunjukkan dalam artikel ini.

Menyalin Pesan ke Folder Lain

Potongan kode berikut menunjukkan cara menyalin pesan ke folder lain.

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