Exchange メールボックスとメッセージの操作 - Java で Exchange サーバーからメールを読む

EWS を使用したメールボックス情報の取得

この EWSClient クラスには、Exchange Server からメールボックス情報を取得するために呼び出すことができるメンバーがあります。 IEWSClient.getMailboxInfo() メソッド。型のインスタンスを返します。 ExchangeMailboxInfo. プロパティからメールボックス情報を取得します(例: MailboxUri, InboxUri および DraftsUri。この記事では、Exchange Web Services を使用してメールボックス情報にアクセスする方法を示します。

Exchange Web Services (EWS) を使用して Exchange Server に接続したい場合は、以下を使用してください EWSClient クラス。このクラスは EWS を使用して Exchange Server に接続し、アイテムを管理します。以下の Java コードスニペットは、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());

メールメッセージの送信

Exchange Server を使用してメールメッセージを送信するには、以下のツールを活用できます Aspose.Email.ExchangeIEWSClient.Send() メソッドはパラメータを受け取ります。 MailMessage インスタンスをパラメータとして渡し、メールを送信します。この記事では、Exchange Web Services を使用してメールメッセージを送信する方法を説明します。

Aspose.Email は、Exchange Web Services を使用して Microsoft Exchange Server に接続するための IEWSClient クラスを提供します。以下のコードスニペットは、EWS を使用して Microsoft Exchange Server でメールを送信する方法を示しています。次の Java コードスニペットは、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);

メッセージクラスの取得

この getMessageClass() メソッド( ExchangeMessageInfo クラスはメッセージのクラスを表す文字列を取得します。以下のコードサンプルは、メッセージクラスを取得する方法を示しています。

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

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

他のユーザーのメールボックスからメールを読む

Exchange サーバー上の一部のアカウントは複数のメールボックスへのアクセス権を持ち、また同じ Exchange サーバー上で複数のメールアカウントを持つユーザーもいます。いずれの場合も、Aspose.Email for Java を使用して他のユーザーのメールボックスにアクセスできます。この API は、他のメールボックスのフォルダーやメールにアクセスする仕組みを提供します。 IEWSClient クラス。この機能はオーバーロードされたものを使用して実現できます getMailboxInfo() メソッドで、ユーザーのメールアドレスをパラメータとして提供します。

以下のコードスニペットは、メールを読み取る方法を示しています。使用するのは IEWSClient クラス。

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

メッセージ一覧

Exchange メールボックス内のメールメッセージ一覧は、以下を呼び出すことで取得できます。 IEWSClient.listMessages メソッド。件名、送信者、受信者、メッセージ ID などの基本情報を取得します。 listMessages メソッド。

シンプルなメッセージ一覧

Exchange メールボックスのメッセージを一覧表示するには:

  1. インスタンスを作成します IEWSClient クラス。
  2. listMessages メソッドを呼び出し、メッセージコレクションを作成します。
  3. コレクションをループしてメッセージ情報を表示します。

以下の Java コードスニペットは、EWS を使用して Exchange サーバーに接続し、Inbox フォルダーからメッセージを一覧表示する方法を示しています。

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

// Call ListMessages method to list messages info from Inbox
ExchangeMessageInfoCollection msgCollection = client.listMessages(client.getMailboxInfo().getInboxUri());

// Loop through the collection to display the basic information
for (ExchangeMessageInfo msgInfo : (Iterable<ExchangeMessageInfo>) msgCollection) {
    System.out.println("Subject: " + msgInfo.getSubject());
    System.out.println("From: " + msgInfo.getFrom().toString());
    System.out.println("To: " + msgInfo.getTo().toString());
    System.out.println("Message ID: " + msgInfo.getMessageId());
    System.out.println("Unique URI: " + msgInfo.getUniqueUri());
}

異なるフォルダーからのメッセージ一覧

上記のコードスニペットは、Inbox フォルダー内のすべてのメッセージを一覧表示します。他のフォルダーからもメッセージリストを取得することが可能です。 IEWSClient.listMessages() このメソッドはフォルダー URI をパラメータとして受け取ります。フォルダー URI が有効であれば、そのフォルダーからメッセージのリストを取得できます。IEWSClient.getMailboxInfo().getXXXFolderUri プロパティを使用して、さまざまなフォルダーの URI を取得します。残りのコードはメッセージリスト取得時と同様です。以下のコードスニペットは、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);

ページングサポート付きメッセージ一覧

以下の Java コードスニペットは、ページング機能付きでメッセージのリストを取得する方法を示しています。

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

ExchangeMessageInfo からメッセージタイプ情報を取得

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

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

メッセージの保存

この記事では、Exchange Server のメールボックスからメッセージを取得し、EML および MSG 形式でディスクに保存する方法を示します。

  • ディスクに EML として保存。
  • メモリストリームに保存。
  • MSG として保存。

EML 形式でメッセージを保存

メッセージを取得し、EML 形式で保存するには:

  1. IEWSClient クラスのインスタンスを作成します。
  2. mailboxUri、ユーザー名、パスワード、ドメインを指定してください。
  3. IEWSClient.listMessages() メソッドを呼び出して、ExchangeMessagesInfoCollection のインスタンスを取得します。
  4. ExchangeMessagesInfoCollection コレクションをループし、各メッセージのユニーク URI を取得します。
  5. IEWSClient.saveMessage() メソッドを呼び出し、ユニークな URI をパラメータとして渡します。
  6. saveMessage() メソッドに、ファイルを保存したいパスを指定してください。

以下のコードスニペットは、EWS を使用して Exchange Server に接続し、メッセージを 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");
}

メモリストリームへのメッセージ保存

EML ファイルをディスクに保存する代わりに、メモリストリームに保存することが可能です。これは、ストリームをデータベースなどの保存場所に保存したい場合に便利です。ストリームがデータベースに保存されたら、EML ファイルを再度ロードできます。 MailMessage クラス。以下のコードスニペットは、EWS を使用して Exchange Server のメールボックスからメッセージをメモリストリームに保存する方法を示しています。

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

MSG 形式でメッセージを保存

この IEWSClient.saveMessage() このメソッドはメッセージを直接 EML 形式で保存できます。MSG 形式で保存するには、まず以下を呼び出します IEWSClient.fetchMessage() インスタンスを返すメソッド MailMessage クラス。その後、呼び出します。 MailMessage.save() メッセージを MSG 形式で保存するメソッド。以下のコードスニペットは、Exchange Server のメールボックスからメッセージを取得し、EWS を使用して MSG 形式で保存する方法を示しています。

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

Message URI から ExchangeMessageInfo を取得する

メールメッセージは固有の識別子である URI によって表され、~の不可欠な部分です ExchangeMessageInfo オブジェクト。メッセージ URI のみが利用可能な場合は、 ExchangeMessageInfo この利用可能な情報を使用してオブジェクトを取得することもできます。オーバーロードバージョンは listMessages 使用する ID のリストを受け取ります ExchangeMessageInfoCollection。以下のコードスニペットは、取得方法を示しています。 ExchangeMessageInfo メッセージ 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());
}

Exchange Server のメールボックスからメッセージを取得

Exchange Server でのメッセージ一覧取得に使用された listMessages() Exchange Server のメールボックスからメッセージのリストを取得するメソッド。 listMessages() このメソッドはメッセージの基本情報(例:件名、メッセージ ID、送信元、宛先)を取得します。完全なメッセージ詳細を取得するには、Aspose.Email.Exchange が IEWSClient.fetchMessage() メソッドを提供しています。このメソッドはメッセージ URI をパラメータとして受け取り、インスタンスを返します。 MailMessage クラス。 MailMessage クラスは本文、ヘッダー、添付ファイルなどのメッセージ詳細を提供します。詳細をご確認ください。 MailMessage API、またはメール管理方法をご確認ください。 MailMessage クラス。Exchange Server のメールボックスからメッセージを取得するには:

  1. IEWSClient のインスタンスを作成します。
  2. サーバー名、ユーザー名、パスワード、ドメインを指定します。
  3. listMessages を呼び出して ExchangeMessageInfoCollection を取得します。
  4. ExchangeMessageInfoCollection コレクションをループし、ExchangeMessageInfo.UniqueURI の値を取得します。
  5. IEWSClient.fetchMessage() を呼び出し、パラメータとして ExchangeMessageInfo.UniqueURI を渡します。

以下のコードスニペットは、Exchange Server のメールボックスに接続し、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());
    }
}

FetchItem メソッドを使用してメッセージを取得する

この FetchItem メソッドは、取得したい場合により好まれます。 MapiMessage および MAPI プロパティで操作します。このメソッドは、連絡先、予定、タスクなど、任意の Outlook アイテムを取得するためにも使用できます。

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

メッセージサイズの事前取得

Microsoft Outlook InterOp は、サーバーから完全なメッセージを取得する前にメッセージサイズを取得する機能を提供します。Aspose.Email API の場合、Exchange サーバーから取得された要約情報は以下で表されます。 ExchangeMessageInfo クラスです。Size プロパティを使用してメッセージサイズを取得する同様の機能を提供します。メッセージサイズを取得するには、IERWSClient の listMessages の標準呼び出しが使用され、コレクションが取得されます。 ExchangeMessageInfo。次のコードスニペットは、以下の方法でメッセージサイズを表示する方法を示します。 ExchangeMessageInfo クラス。

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

メッセージを再帰的にダウンロード

この EWSClientlistSubFolders() メソッドは、Exchange Serverのメールボックス内のフォルダーおよびサブフォルダーからメッセージを再帰的に取得するために使用できます。これはEWSを使用するため、Exchange Server 2007以降が必要です。次のコードスニペットは、Exchange Serverのメールボックス全体(フォルダーとサブフォルダー)をダウンロードする方法を示します。フォルダー構造はローカルに作成され、すべてのメッセージがダウンロードされます。

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

パブリックフォルダーからメッセージをダウンロード

Microsoft Exchange Server はユーザーがパブリックフォルダーを作成し、メッセージを投稿できるようにします。アプリケーションからこれを行うには、Aspose.Email の EWSClient Exchange Serverに接続し、パブリックフォルダーからメッセージや投稿を読み取ってダウンロードするクラス。次のコードスニペットは、すべてのパブリックフォルダーとサブフォルダーを読み取り、これらのフォルダー内に見つかったメッセージを一覧表示しダウンロードする方法を示します。この例は、EWSをサポートするMicrosoft Exchange Server 2007以降でのみ動作します。

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

メッセージの移動

以下を使って、メールメッセージをあるフォルダーから別のフォルダーへ移動できます。 IEWSClient クラス 移動 メソッド。パラメータは次のとおりです:

  • 移動するメッセージの一意な URI。
  • 宛先フォルダーの一意な URI。

フォルダー間のメッセージ移動

次のコードスニペットは、メールボックス内のメッセージを受信トレイフォルダーから「Processed」フォルダーへ移動する方法を示します。この例では、アプリケーションは:

  1. Inbox フォルダーからメッセージを読み取ります。
  2. いくつかの基準に基づいてメッセージを処理します(この例ではメッセージの件名にキーワードを検索)。
  3. 指定された条件を満たすメッセージを処理済みフォルダーに移動します。
// 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
    }
}

メッセージの削除

フォルダーからメールメッセージを削除するには、以下を利用できます。 IEWSClient クラス deleteItem メソッドです。メッセージの一意な URI をパラメータとして受け取ります。

以下のコードスニペットは、受信トレイフォルダーからメッセージを削除する方法を示しています。この例の目的のために、コードは:

  1. Inbox フォルダーからメッセージを読み取ります。
  2. いくつかの条件に基づいてメッセージを処理します(この例では、メッセージの件名にキーワードがあるかを検出します)。
  3. メッセージを削除します。
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
    }
}

メッセージのコピー

Aspose.Email API は、あるフォルダーから別のフォルダーへメッセージをコピーすることを可能にします、使用するのは copyItem メソッド。このメソッドのオーバーロード版は、この記事に示されているように、コピーされたメッセージのユニーク URI を返します。

メッセージを別のフォルダーへコピー

以下のコードスニペットは、メッセージを別のフォルダーにコピーする方法を示しています。

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