2011-07-12 9 views
23

Czy ktoś może mi powiedzieć, jak uzyskać treść wiadomości e-mail, potwierdzenie, nadawcę, informacje o CC za pomocą interfejsu API usługi Web Service? Wiem tylko, jak uzyskać temat.Jak uzyskać adres e-mail, potwierdzenie odbioru, informacje o nadawcy i CC za pomocą 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 />"; 
    } 

Moje środowisko programistyczne jest asp.net C# Exchange Server 2010 Dziękuję.

Odpowiedz

10

Korzystanie FindItems dostaną tylko Ci do tej pory, ponieważ nie zwraca tylko pierwsze 255 bajtów ciała. Co należy zrobić, to połączenie FindItem zażądać identyfikatory maile i wydać jeden lub więcej GetItem połączeń, aby uzyskać właściwości, które Cię interesują.

+1

Bardziej poprawnie, musisz ".Bind" do każdej pozycji. na przykład 'Powołanie = a = Spotkanie.Bind (_service, appt.Id)' gdzie 'appt' to element, który otrzymałeś od' FindApointpoint'. Zasysa, że ​​'FindItem' nie może zwrócić wszystkiego; oznacza więcej podróży w obie strony. – tig

+6

Ale można zmniejszyć to do ~ 2 połączeń. Użyj service.BindToItems(), aby załadować wiele przedmiotów naraz ... –

+0

Doskonały Henning! Dzięki za wskazówkę. – tig

2

tutaj znajdziesz rozwiązanie.

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

Ponieważ oryginalne pytanie specjalnie poprosił o „ciała email, pokwitowań, nadawcy i CC info, "Myślałem, że odniosę się do nich. Zakładam, że "odbiór" to informacje o odbiorcy, a nie funkcja "powiadom nadawcy" wiadomości e-mail, której nikt nie używa. Wygląda na to, że CC jest traktowany tak samo jak odbiorcy.

Podobała mi się odpowiedź Henninga, aby zredukować funkcję dwóch połączeń, ale miałam małą trudność w ustaleniu, jak sobie poradzić z PropertySet. Wyszukiwarka Google nie było od razu jasne w tej sprawie, a skończyło się używając cudzego 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

Zamiast używać ExtendedProperties, można również przesyłać EmailMessage i odczytać właściwość chcesz bezpośrednio. Na przykład adres nadawcy:

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

Czy jest jakaś korzyść z używania tego zamiast przedmiotu. ? W przypadku e-maila nadawcy wyraźnie, ale co z treścią na przykład? –

Powiązane problemy