2011-07-12 22 views
23

Exchange WebサービスAPIを使用してメールの本文、受信者、送信者、CC情報を取得する方法を教えてもらえますか?私は対象を取得する方法だけを知っています。EWSを使用して本文、領収書、送信者、CC情報を取得する方法は?

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 C#の取引サーバ2010 ありがとうです。

答えて

10

は、これまでにあなたを取得します。あなたがすべきことは、メールのIDを要求し、興味のあるプロパティを取得するために、1つ以上のGetItemコールを発行するFindItemの組み合わせです。

+1

より正確には、各項目に '.Bind'する必要があります。例えば'Appointment = a = Appointment.Bind(_service、appt.Id)'ここで、 'appt'は' FindAppointments'から得たアイテムでした。 'FindItem'がすべてを返すことができないことを悔やむ。より多くの往復を意味します。 – tig

+6

しかしそれを〜2コールに減らすことができます。一度に複数のアイテムを読み込むにはservice.BindToItems()を使用してください... –

+0

優れたヘニング!先端に感謝します。 – tig

2

ここに解決策があります。それは本体のみの最初の255のバイトを返さないためFindItemsを使用して

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

元の質問は、特に電子メールの本文、領収書、差出人」を求めていたので、 CC情報、 "私はそれらに対処すると思った。私は "レシート"は受信者の情報であり、誰も使用しない電子メールの "通知する送信者"の機能ではないと仮定します。 CCは受信者と同じように扱われるようです。

機能を2つの呼び出しに減らすためのヘニングの答えが気に入っていましたが、PropertySetの処理方法を理解するのに少し難しかったです。 Google検索では、この上ですぐに明確ではありませんでした、と私は他の誰かのtutorialを使用して終了:代わりにExtendedPropertiesを使用して、あなたはまた、EmailMessageのにキャストし、あなたが直接するプロパティを読むことができる

// 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

。たとえば、送信者のアドレス:

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

アイテムの代わりにこれを使用する利点はありますか? ?送信者のメールのケースではっきりとは、しかし、例えば身体はどうですか? –

関連する問題