Как мне ExchangeService.FindItems найти все электронные письма - PullRequest
0 голосов
/ 26 сентября 2018

Мы только что перешли на Microsoft Exchange Online (EOP и EOP2). Почтовые сообщения работают нормально.

Сейчас я просто хочу открыть почтовый ящик, отсканировать все электронные письма и вернуть простую информацию, такую ​​как Senderили MailDate etc

Все, что мне нужно, это простой рабочий пример.Самое близкое, что я получил, ниже

FindItemsResults<Item> items = await serviceInstance.FindItems(WellKnownFolderName.Inbox, "to:" + sEmail, new ItemView(15));

Но это дает мне эту ошибку

Cannot implicitly convert type 'System.Threading.Tasks.Task<Microsoft.Exchange.WebServices.Data.FindItemsResults<Microsoft.Exchange.WebServices.Data.Item>>' to 'Microsoft.Exchange.WebServices.Data.FindItemsResults<Microsoft.Exchange.WebServices.Data.Item>'

        string sEmail = "xxxxxx@xxxxxxx.co,";
        string sPassword = "*********";
        string sResult = "";

        ExchangeService serviceInstance = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

        //Provide the  account user credentials
        serviceInstance.Credentials = new WebCredentials(sEmail, sPassword);//ConfigurationManager.AppSettings["Domain"].ToString());

        try
        {
            // Use Autodiscover to set the URL endpoint.
            serviceInstance.AutodiscoverUrl(sEmail, RedirectionUrlValidationCallback); //works up to here

            //error here
            FindItemsResults<Item> items = serviceInstance.FindItems(WellKnownFolderName.Inbox, "to:" + sEmail, new ItemView(15));

            //no error here but can't do a foreach on "items"
            //var items = serviceInstance.FindItems(WellKnownFolderName.Inbox, "to:" + sEmail, new ItemView(15));

            sResult = "Found:" + "\r\n";

            foreach (EmailMessage msg in items)
            {
                sResult += msg.Subject + "\r\n";
            }
        }
        catch (Exception ex)
        {
            serviceInstance = null;
            sResult = ex.Message;
        }

Что я делаю неправильно, вещи раньше былитак просто?

Я использую

  • VS2017, ASP.Net (Стандарт 4.6.1)
  • Microsoft.Exchange.WebServices.NETStandard (v4.0.30319)

Я пробовал множество примеров здесь и на других сайтах безрезультатно.

У кого-нибудь есть действительно простой рабочий пример, пожалуйста

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Попробуйте следующее:

var items = serviceInstance.FindItems(WellKnownFolderName.Inbox, "to:" + sEmail, new ItemView(15));    
var emailMessages = items.Items.Cast<EmailMessage>();

или

var emailMessages = items.Items.OfType<EmailMessage>();

, тогда ваш foreach должен работать.

0 голосов
/ 27 сентября 2018

djack

Я проверяю ваш код. В методе serviceInstance.FindItems получена следующая ошибка.

Параметр queryString действителен только для версии Exchange Server Exchange2010 или более поздней версии.

Итак, вы должны создать Exchange 2010 или более позднюю версию сервера Exchange.Ниже приведен подробный код.

 //The parameter queryString is only valid for Exchange Server version Exchange2010 or a later version.
        ExchangeService serviceInstance = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        //Provide the  account user credentials
        serviceInstance.Credentials = new WebCredentials(sEmail, sPassword);//ConfigurationManager.AppSettings["Domain"].ToString());
        try
        {
            // Use Autodiscover to set the URL endpoint.
            serviceInstance.AutodiscoverUrl(sEmail, RedirectionUrlValidationCallback); //works up to here
            //error here
            FindItemsResults<Item> items = serviceInstance.FindItems(WellKnownFolderName.Inbox, "to:" + sEmail, new ItemView(15));
            //no error here but can't do a foreach on "items"
            //var items = serviceInstance.FindItems(WellKnownFolderName.Inbox, "to:" + sEmail, new ItemView(15));
            sResult = "Found:" + "\r\n";
            if (items != null)
            {
                Console.WriteLine(items.Items.Count);
                foreach (EmailMessage msg in items.Items)
                {
                    //sResult += msg.Subject + "\r\n";
                    Console.WriteLine(msg.Subject);
                }
            }
            else
            {
                Console.WriteLine("is null");
            }
        }
        catch (System.Exception ex)
        {
            serviceInstance = null;
            sResult = ex.Message;
            Console.WriteLine(sResult);
        }
        Console.WriteLine("fhdfhk");
        Console.ReadKey();

С наилучшими пожеланиями,

Эван

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...