0

受信トレイと送信ボックスのフォルダーからメールを取得し、件名を比較して、一致する場合はすべて新しいカスタム フォルダーに入れたいと考えています。これまでのコードは次のとおりです。

Outlook.MAPIFolder inBox = (Outlook.MAPIFolder)
        this.Application.ActiveExplorer().Session.GetDefaultFolder
        (Outlook.OlDefaultFolders.olFolderInbox);

// sentBox フォルダ用にもこれを作成しました

            string userName = (string)this.Application.ActiveExplorer()
                .Session.CurrentUser.Name;
            Outlook.MAPIFolder customFolder = null;

                customFolder = (Outlook.MAPIFolder)inBox.Folders.Add(userName,
                    Outlook.OlDefaultFolders.olFolderInbox);

                inBox.Folders[userName].Display();

// これは、一致するメールを配置するカスタム フォルダーです

        for (int i = 1; i <= sentboxFolder.Items.Count; i++)
        {
            outboxItem =  sentboxFolder.Items[i];


            for (int a = 1; a <= inBox.Items.Count; a++)
            {
               inboxItem = inBox.Items[a];

                if ("RE: " + outboxItem.Subject == inboxItem.Subject)
                {

                    customFolder.Items.Add(inboxItem);

// ここで、受信トレイと送信トレイのフォルダーをループし、件名が一致する場合は、受信トレイの部分をカスタム フォルダーに追加します。

3 つの質問があります: 1. 一致する両方のメールを 1 つのフォルダーに入れる方法はありますか? 2. 主題を比較する以外に、もっとスマートな方法があるはずです。ここで会話 ID を使用する方法を教えてください。3. 最後の行で、実際のオブジェクト インスタンスではないため、受信ボックス アイテムをカスタム フォルダに追加できないという例外が発生します。これを修正するには、mailitem をどこでインスタンス化する必要がありますか?

前もって感謝します。

4

1 に答える 1

2

まず、特にループでは、複数のドット表記を使用しないでください。ループに入る前に、Items コレクションをキャッシュしてください。

2 つ目は、フォルダー内のすべてのアイテムをループして一致を探すのではなく、Items.Find を使用することです。

そうは言っても、 MailItem.Move(OtherFolder) を使用できます。元のアイテムを保持したい場合は、MailItem.Copy (新しいアイテムを返す) を使用してから、それをターゲット フォルダーに移動します。

于 2013-07-30T14:16:04.730 に答える