Как получить электронную почту, квитанцию, отправитель и информацию о CC с помощью EWS?
Может ли кто-нибудь сказать мне, как получить почтовый ящик, квитанцию, отправитель, информацию 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 С# Exchange-server 2010
Спасибо.
Ответы
Ответ 1
Использование FindItems
покажет вам только то, что оно возвращает только первые 255 байт тела. Вы должны сделать комбинацию FindItem
, чтобы запросить идентификаторы писем и выпустить один или несколько вызовов GetItem
, чтобы получить интересующие вас свойства.
Ответ 2
Поскольку в первоначальном вопросе, в котором конкретно задавался вопрос "тело электронной почты, квитанция, отправитель и информация о 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();
}
Ответ 3
здесь вы найдете решение.
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 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!");
}
}
Ответ 4
Вместо использования ExtendedProperties вы также можете отправить в EmailMessage и прочитать прямое свойство. Например, адрес отправителя:
((Microsoft.Exchange.WebServices.Data.EmailMessage)(item)).From.Address;