Как получить тело письма, квитанцию, информацию об отправителе и CC, используя EWS? - PullRequest
25 голосов
/ 12 июля 2011

Может кто-нибудь сказать мне, как получить тело электронной почты, квитанцию, отправителя, данные CC, используя API веб-службы Exchange? Я только знаю, как получить предмет.

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
    service.Credentials = new NetworkCredential("user", "password", "domain");
    service.Url = new Uri("https://208.243.49.20/ews/exchange.asmx");
    ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
    FindItemsResults<Item> findResults = service.FindItems(
        WellKnownFolderName.Inbox,
        new ItemView(10));

    foreach (Item item in findResults.Items)
    {
        div_email.InnerHtml += item.Subject+"<br />";
    }

Моя среда разработки asp.net c # Exchange-server 2010 Спасибо.

Ответы [ 4 ]

33 голосов
/ 14 февраля 2013

Поскольку в первоначальном вопросе конкретно задавались «тело письма, квитанция, информация об отправителе и CC», я решил обратиться к ним. Я предполагаю, что «квитанция» - это информация о получателе, а не функция «уведомить отправителя» электронной почты, которую никто не использует. Похоже, что CC обрабатывается так же, как и получатели.

Мне понравился ответ Хеннинга о сокращении функции до двух вызовов, но мне было немного трудно понять, как обрабатывать PropertySet. Поиск в Google не сразу понял, и в итоге я воспользовался чужим учебником :

// Simplified mail item
public class MailItem
{
    public string From;
    public string[] Recipients;
    public string Subject;
    public string Body;
}

public MailItem[] GetUnreadMailFromInbox()
{
    FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, new ItemView(128));
    ServiceResponseCollection<GetItemResponse> items = 
        service.BindToItems(findResults.Select(item => item.Id), new PropertySet(BasePropertySet.FirstClassProperties, EmailMessageSchema.From, EmailMessageSchema.ToRecipients));
    return items.Select(item => {
        return new MailItem() {
            From = ((Microsoft.Exchange.WebServices.Data.EmailAddress)item.Item[EmailMessageSchema.From]).Address,
            Recipients = ((Microsoft.Exchange.WebServices.Data.EmailAddressCollection)item.Item[EmailMessageSchema.ToRecipients]).Select(recipient => recipient.Address).ToArray(),
            Subject = item.Item.Subject,
            Body = item.Item.Body.ToString(),
        };
    }).ToArray();
}
10 голосов
/ 13 июля 2011

Использование FindItems покажет только вам, потому что оно возвращает только первые 255 байтов тела. Вам нужно сделать комбинацию FindItem, чтобы запросить идентификаторы писем и выполнить один или несколько вызовов GetItem, чтобы получить интересующие вас свойства.

2 голосов
/ 02 марта 2016

Вместо использования ExtendedProperties, вы также можете привести к EmailMessage и прочитать свойство, которое вы хотите напрямую. Например, адрес отправителя:

((Microsoft.Exchange.WebServices.Data.EmailMessage)(item)).From.Address;
2 голосов
/ 12 июля 2011

здесь вы найдете решение.

http://blogs.msdn.com/b/akashb/archive/2010/03/05/how-to-build-a-complex-search-using-searchfilter-and-searchfiltercollection-in-ews-managed-api-1-0.aspx


 // Send the request to search the Inbox and get the results.
        FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, FinalsearchFilter, view);



        // Process each item.
        if (findResults.Items.Count > 0)
        {
            foreach (Item myItem in findResults.Items)
            {
                if (myItem is EmailMessage)
                {
                    Console.WriteLine((myItem as EmailMessage).Subject);
                }
                if (myItem.ExtendedProperties.Count > 0)
                {
                    // Display the extended property's name and property.
                    foreach (ExtendedProperty extendedProperty in myItem.ExtendedProperties)
                    {
                        Console.WriteLine(" Extended Property Name: " + extendedProperty.PropertyDefinition.Name);
                        Console.WriteLine(" Extended Property Value: " + extendedProperty.Value);
                    }
                }

            }
        }
        else
        {
            Console.WriteLine("No Items Found!");
        }

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