подсчитать количество писем определенной даты в Outlook с помощью С#

Я пишу инструмент для перемещения почты Outlook в Excel. В нем я использовал два средства выбора даты, одну дату начала и другую дату окончания. Я не знаю, как сформировать цикл, который зацикливается на определенную дату, а затем переходит к следующей.

for (DateTime j = fd; j <= td; j=j.AddDays(1))
{

                    var outlookXcell = ((Microsoft.Office.Interop.Outlook.MailItem) myInbox.Items[fd]);
                    MessageBox.Show(outlookXcell.SenderName);
                    var mailSub = outlookXcell.Subject;

                    var mailcontent = outlookXcell.Body;

                    var senderemailid = outlookXcell.SenderEmailAddress;
}

person Vecto7    schedule 01.12.2014    source источник
comment
Пожалуйста, покажите, что вы пробовали.   -  person Sybren    schedule 01.12.2014
comment
Перебор дат кажется правильным, поэтому, очевидно, проблема в другом. Название вопроса и тело на самом деле не совпадают. Пожалуйста уточни.   -  person Jcl    schedule 01.12.2014
comment
var outlookXcell = ((Microsoft.Office.Interop.Outlook.MailItem) myInbox.Items[fd]); Вышеприведенный код неверен, и если он принимает дату, он не зацикливает каждую почту в эту дату. Моя основная задача - отфильтровать почту по дате и сохранить их в Excel.   -  person Vecto7    schedule 01.12.2014


Ответы (3)


Как упомянул Евгений, Items.Find/FindNext/Restrict сделает эту работу. Запрос, который вам нужен, выглядит примерно так: ([ReceivedTime] > '10/01/2014') AND ([ReceivedTime] < '12/01/2014')

person Dmitry Streblechenko    schedule 01.12.2014
comment
Да, в нем сначала я фильтрую его по дате, затем мне нужно перейти к количеству писем в нем, поэтому я изо всех сил пытаюсь подсчитать количество писем с определенной датой. - person Vecto7; 02.12.2014
comment
Благодарю за ваш ответ:-) - person Vecto7; 02.12.2014
comment
Если вы вызываете Restrict, все, что вам нужно сделать, это прочитать свойство Items.Count из коллекции, возвращаемой Restrict. - person Dmitry Streblechenko; 02.12.2014

Вы можете использовать методы Find/FindNext или Restrict, чтобы получить коллекцию элементов, соответствующую вашим потребностям. Например, см. Как: использовать методы Find и FindNext для извлечения элементов почты Outlook из папки (C#, VB.NET) .

person Eugene Astafiev    schedule 01.12.2014
comment
Благодарю за ваш ответ:-) - person Vecto7; 02.12.2014

Atlast занимаясь исследованиями и разработками, я решил решить. Если вы чувствуете, что можете помочь оптимизировать код, работайте лучше. Добавьте комментарии.

int mCount = myInbox.Items.Count;
     for (int a = 1; a < mCount; a++)

            {
               var itemn = (Microsoft.Office.Interop.Outlook.MailItem)myInbox.Items[a];

                if (itemn.CreationTime >= fd && itemn.CreationTime < td)
                {
                    string subject = itemn.Subject;
                    DateTime reciv = itemn.CreationTime;
                    var mContent = itemn.Body;
                    var senderId = itemn.SenderEmailAddress;

                    worksheet.Cells[xlrow, 2] = reciv;
                    worksheet.Cells[xlrow, 3] = senderId;
                    worksheet.Cells[xlrow, 4] = subject + worksheet.Cells.WrapText;
                    worksheet.Cells[xlrow, 5] = mContent + worksheet.Cells.WrapText;
                    worksheet.Cells.WrapText = true;
                    xlrow++;
                }

            }
person Vecto7    schedule 02.12.2014
comment
Не делай этого. Это крайне неэффективно. Используйте Item.Find/FindNext/Restrict. - person Dmitry Streblechenko; 02.12.2014