Arul R Ece Ответов: 3

Перемещение непрочитанных писем в другую папку в папке Входящие Outlook с помощью c#


Привет,

Я использую приведенный ниже код для перемещения всех непрочитанных писем в другую папку из папки "Входящие" в outlook.
Но этот код не работал должным образом, например, если 4 письма находятся в непрочитанном состоянии, он перемещает только 2 письма в эту папку, поэтому он был неудачным для оставшихся 2 писем .
Можете ли вы, пожалуйста, руководство, чтобы решить эту проблему.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Outlook;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Microsoft.Office.Interop.Outlook.Application myApp = new Microsoft.Office.Interop.Outlook.ApplicationClass();
            Microsoft.Office.Interop.Outlook.NameSpace mapiNameSpace = myApp.GetNamespace("MAPI");
            Microsoft.Office.Interop.Outlook.MAPIFolder myInbox = mapiNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
            //            Microsoft.Office.Interop.Outlook.MailItem newEmail = null;
            Microsoft.Office.Interop.Outlook.MailItem movemail = null;
            Microsoft.Office.Interop.Outlook.Items items = (Microsoft.Office.Interop.Outlook.Items)myInbox.Items;
            Microsoft.Office.Interop.Outlook.MAPIFolder destFolder = myInbox.Folders["Arch"];
            items.Restrict("[UnRead] = true");
            // Microsoft.Office.Interop.Outlook.MAPIFolder destFolder1 = mapiNameSpace.Folders["CQ Web"];
            foreach (object eMail in items.Restrict("[UnRead] = true"))
            {
                
                    movemail = eMail as Microsoft.Office.Interop.Outlook.MailItem;
                    if (movemail != null)
                    {

                        
                        movemail.Move(destFolder);
                        
                    }
                }                
            
        }
    }
}

3 Ответов

Рейтинг:
1

pietar

По какой-то причине ...

items.Restrict("[UnRead] = true")
так не пойдет. Я столкнулся с этой проблемой при написании макроса outlook. Не очень хороший обходной путь к этому-использовать цикл while:
while(items.Restrict("[UnRead] = true").Count > 0) {
    foreach(...)


Рейтинг:
0

Member 13923791

Эта проблема возникает из-за того, что количество писем в папке "Входящие" будет уменьшаться каждый раз, когда вы перемещаетесь.Чтобы исправить эту ошибку, не используйте функцию foreach, пожалуйста, используйте for. Ниже приведен код, который я использовал:

MAPIFolder inBox = this.Application.ActiveExplorer().Session.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
            Items items = inBox.Items;
            //MailItem moveMail = null;
            //items.Restrict("[UnRead] = true");
            MAPIFolder destFolder = inBox.Folders["Fishing"];
            MessageBox.Show(items.Count.ToString());
            //MessageBox.Show(items.ToString());
            //while (items.Count != 0)
            //foreach (MailItem eMail in items)
            int ItemsCount = items.Count;
            for(int i=ItemsCount;i>0;i--)
            {
                try
                {
                    {
                        if (items[i].Subject.Contains("Fishing"))
                        {
                                items[i].Move(destFolder);
                            MessageBox.Show("Done!");
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Error when moving email: "+ex);
                }
            }


Рейтинг:
0

Member 13300545

Приведенный выше код , который является правильным, перемещает всю непрочитанную электронную почту в нужное место вложенной папки, но в то же время он жестко удаляет непрочитанную электронную почту и электронную почту, которые сбрасываются в "восстановленную удаленную электронную почту с сервера "

Пожалуйста, предоставьте мне решение без получения сброшенного непрочитанного письма в "восстановленное удаление электронной почты с сервера"

Спасибо


CHill60

Если у вас есть вопрос, то воспользуйтесь ссылкой "задать вопрос"!