Веб-страница ASP.NET, получающая электронные письма от проблемы перспективы - PullRequest
0 голосов
/ 07 июля 2011

Мы только что запустили новую задачу для получения электронной почты с сервера Exchange для разных учетных записей с помощью веб-приложения asp.net.Я не имел такого опыта в прошлом, но после поиска в Интернете я нашел фрагмент кода, который может общаться с внешним видом и получать электронную почту оттуда.Тем не менее, каждый раз, когда я тестирую код, возникает исключение:

"Невозможно привести объект COM типа 'System .__ ComObject' к типу интерфейса 'Microsoft.Office.Interop.Outlook.PostItem '. Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID' {00063024-0000-0000-C000-000000000046} 'завершился неудачно из-за следующей ошибки: такой интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)). "

Кто-нибудь знает причину?

Кстати, любое предложение, помогающее при получении писем с сервера обмена напрямую, высоко ценится!

Мой код:

        Microsoft.Office.Interop.Outlook.Application app = null;
        Microsoft.Office.Interop.Outlook._NameSpace ns = null;
        Microsoft.Office.Interop.Outlook.PostItem item = null;
        Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
        Microsoft.Office.Interop.Outlook.MAPIFolder subFolder = null;
        try
        {
            app = new Microsoft.Office.Interop.Outlook.Application();
            ns = app.GetNamespace("MAPI");
            ns.Logon("user", "password", false, false);
            inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("Folder Name:{0},EntryId:{1}", inboxFolder.Name, inboxFolder.EntryID);
            sb.AppendFormat(" Num Items:{0}", inboxFolder.Items.Count.ToString());
            Response.Write(sb);
            for (int i = 1; i <= inboxFolder.Items.Count; i++)
            {
                item = (Microsoft.Office.Interop.Outlook.PostItem)inboxFolder.Items[i];//this is the exception happened line
                Console.WriteLine("Item: {0}", i.ToString());
                Console.WriteLine("Subject: {0}", item.Subject); 
                Console.WriteLine("Sent: {0} {1}" item.SentOn.ToLongDateString(), item.SentOn.ToLongTimeString());
                Console.WriteLine("Categories: {0}", item.Categories);
                Console.WriteLine("Body: {0}", item.Body);
                Console.WriteLine("HTMLBody: {0}", item.HTMLBody); 

            }
        }
        catch (Exception)
        {

            throw;
        }
        finally
        {
            ns = null;
            app = null;
            inboxFolder = null;
        }

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Вот так:

С этими строками ...

Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

... вы создаете ссылку на Входящие пользователя. Все идет нормально.

Но тогда вот ...

for (int i = 1; i <= inboxFolder.Items.Count; i++)
{
    item = (Microsoft.Office.Interop.Outlook.PostItem)inboxFolder.Items[i];
    //other stuff...
}

... вы говорите: "для каждого элемента в папке" Входящие "предположим, что элемент является элементом сообщения".

Согласно MSDN, PostItem :

Представляет сообщение в общей папке что другие могут просматривать.

Входящие пользователя не будут заполнены сообщениями. Он будет содержать MailItem объекты, представляющие электронные письма пользователя. В таком случае эта строка кода, вероятно, должна быть

item = (Microsoft.Office.Interop.Outlook.MailItem)inboxFolder.Items[i];

Предостережение : Я не знаю достаточно об API Outlook, чтобы понять, возможно ли в папке «Входящие» объекты объектов Outlook, кроме объектов MailItem, но я бы не стал ставить. Для справки, полный список * 1028 объектов объектов Outlook здесь .

0 голосов
/ 12 августа 2011

Используйте, как показано ниже:

// not PostItem
item = (Microsoft.Office.Interop.Outlook.MailItem)inboxFolder.Items[i];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...