2011-07-12 1 views
23

Quelqu'un peut-il me dire comment obtenir un corps d'e-mail, un reçu, un expéditeur, des informations CC à l'aide de l'API Exchange Web Service? Je sais seulement comment être sujet.Comment obtenir le corps de l'e-mail, le reçu, l'expéditeur et l'information CC en utilisant EWS?

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 />"; 
    } 

Mon environnement de développement est asp.net C# Exchange Server 2010 Je vous remercie.

Répondre

10

En utilisant FindItems ne vous obtenez à ce jour, car il ne retourne que les 255 premiers octets d'un corps. Ce que vous devez faire est une combinaison de FindItem pour demander les identifiants des mails et émettre un ou plusieurs appels GetItem pour obtenir les propriétés qui vous intéressent.

+1

Plus correctement, vous devez '.Bind' à chaque élément. par exemple. 'Appointment = a = Appointment.Bind (_service, appt.Id)' où 'appt' était un élément de' FindAppointments'. Suce que 'FindItem' ne peut pas tout retourner; signifie plus d'allers-retours. – tig

+6

Mais vous pouvez le réduire à ~ 2 appels. Utilisez le service.BindToItems() pour charger plusieurs éléments à la fois ... –

+0

Excellent Henning! Merci pour le conseil. – tig

2

Ici, vous trouverez la solution.

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!"); 
     } 

    } 
31

Depuis la question originale spécifiquement demandée "corps de l'email, reçu, expéditeur et CC info, "Je pensais que j'aborderais ceux-là. Je suppose que "reçu" est l'information du destinataire, et non la fonction "notifier l'expéditeur" de l'email que personne n'utilise. CC semble être traité de la même manière que les destinataires.

J'ai aimé la réponse de Henning pour réduire la fonction à deux appels, mais j'ai eu un peu de difficulté à comprendre comment gérer un PropertySet. recherche Google n'a pas été immédiatement clair sur ce point, et je fini par utiliser quelqu'un d'autre tutorial:

// 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(); 
} 
2

Au lieu d'utiliser les ExtendedProperties, vous pouvez aussi jeter à EmailMessage et lire la propriété que vous souhaitez écouter. Par exemple l'adresse de l'expéditeur:

((Microsoft.Exchange.WebServices.Data.EmailMessage)(item)).From.Address; 
+0

Y a-t-il un avantage à l'utiliser à la place de l'article? ? Dans le cas email de l'expéditeur clairement, mais qu'en est-il du corps par exemple? –

Questions connexes