c# - solicitando - traza de correo electronico
¿Cómo obtener el cuerpo del correo electrónico, el recibo, el remitente y la información de CC utilizando EWS? (4)
Aquí encontrarás la solución.
// 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!");
}
}
¿Alguien puede decirme cómo obtener un cuerpo de correo electrónico, recibo, remitente, información de CC utilizando la API del servicio web de Exchange? Sólo sé cómo conseguir sujeto.
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 />";
}
Mi entorno de desarrollo es asp.net c # Exchange-server 2010 Gracias.
Debido a que la pregunta original pedía específicamente "cuerpo del correo electrónico, recibo, remitente e información de CC", pensé que iba a abordarlos. Asumo que "recibo" es la información del destinatario y no la función de "notificar al remitente" del correo electrónico que nadie usa. CC parece que se maneja de la misma manera que los destinatarios.
Me gustó la respuesta de Henning para reducir la función a dos llamadas, pero tuve un poco de dificultad para averiguar cómo manejar un PropertySet
. La búsqueda en Google no se aclaró de inmediato, y terminé usando el tutorial otra persona:
// 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();
}
El uso de FindItems
solo te llevará hasta el momento, ya que solo devuelve los primeros 255 bytes de un cuerpo. Lo que debe hacer es una combinación de FindItem
para solicitar los identificadores de los correos y emitir una o más llamadas GetItem
para obtener las propiedades que le interesan.
En lugar de usar ExtendedProperties, también puede convertir a EmailMessage y leer la propiedad que desee directamente. Por ejemplo, la dirección del remitente:
((Microsoft.Exchange.WebServices.Data.EmailMessage)(item)).From.Address;