2011-07-12 20 views
23

Bất cứ ai có thể cho tôi biết cách nhận thông tin về cơ thể, biên nhận, người gửi, thông tin CC bằng cách sử dụng API dịch vụ Web Exchange không? Tôi chỉ biết làm thế nào để có được chủ đề.Làm cách nào để nhận thông tin về cơ thể, biên lai, người gửi và thông tin qua email bằng 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 />"; 
    } 

Môi trường phát triển của tôi là asp.net C# Exchange-server 2010 Cảm ơn bạn.

Trả lời

10

Sử dụng FindItems sẽ chỉ giúp bạn có được cho đến nay, bởi vì nó chỉ trả lại 255 byte đầu tiên của một cơ thể. Những gì bạn nên làm là kết hợp của FindItem để yêu cầu id của các thư và phát hành một hoặc nhiều yêu cầu GetItem để nhận các thuộc tính mà bạn quan tâm.

+1

Chính xác hơn, bạn cần '.Bind' cho từng mục. ví dụ. 'Appointment = a = Appointment.Bind (_service, appt.Id)' trong đó 'appt' là một mục bạn nhận được từ' FindAppointments'. Sucks rằng 'FindItem' không thể trả lại tất cả mọi thứ; có nghĩa là nhiều chuyến đi khứ hồi hơn. – tig

+6

Nhưng bạn có thể giảm nó xuống ~ 2 cuộc gọi. Sử dụng dịch vụ.BindToItems() để tải nhiều mục cùng một lúc ... –

+0

Tuyệt vời Henning! Cảm ơn vì tiền hỗ trợ. – tig

2

tại đây bạn sẽ tìm thấy giải pháp.

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

Vì câu hỏi ban đầu được yêu cầu cụ thể cho "email body, receipt, sender và thông tin CC, "Tôi nghĩ tôi sẽ giải quyết những điều đó. Tôi cho rằng "nhận" là thông tin người nhận và không phải là thông báo "thông báo cho người gửi" của email mà không ai sử dụng. CC có vẻ như nó được xử lý giống như người nhận.

Tôi thích câu trả lời của Henning để giảm chức năng cho hai cuộc gọi, nhưng có một chút khó khăn trong việc tìm ra cách xử lý một PropertySet. tìm kiếm Google Hiện chưa rõ về vấn đề này, và tôi đã kết thúc sử dụng của người khác 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

Thay vì sử dụng ExtendedProperties, bạn cũng có thể cast vào EmailMessage và đọc các tài sản mà bạn muốn trực tiếp. Ví dụ: địa chỉ người gửi:

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

Có bất kỳ lợi ích nào khi sử dụng thay vì mục này không. ? Trong trường hợp email người gửi rõ ràng, nhưng về cơ thể chẳng hạn? –

Các vấn đề liên quan