2012-09-13 22 views
6

現在、C#を使用してOutlook 2010のAddInを作成しています。私が望むのは、私がAppointmentItemからプルするRecipientオブジェクトからCompanyNameプロパティを取得することです。そこで、AppointmentItemの受信者を持つことは、ExchangeUserである可能性がある各受信者のCompanyNameを調べることです。C#Outlook受信者からCompanyNameプロパティを取得する

私のコードはこれです:contactItemは常にnullである

Recipients recipients = appointmentItem.Recipients; 
foreach (Recipient rec in recipients) 
{ 
    resolved = rec.Resolve(); 
    if (resolved) 
    { 
     ContactItem contactItem = rec.AddressEntry.GetContact(); 
     String companyName = contactItem.CompanyName;  
     // ... 
    } 

このようにすると、NULLポインタが返されます。

ExchangeUser u = rec.AddressEntry.GetExchangeUser(); 
companyName = u.CompanyName; 

私は単にCompanyName情報にアクセスできません。私は情報が存在することを知っている。しかし、CompanyNameの他にも多くの他の属性もNULLポインタのように見えます。

誰かが私にそれについてのヒントを与えることができますか?

ありがとうございます。

答えて

3

下記のコードで試してみてください。私のために働く。

CODE:

bool resolved; 
     Microsoft.Office.Interop.Outlook.Application olApplication = new Microsoft.Office.Interop.Outlook.Application(); 

     // get nameSpace and logon. 
     Microsoft.Office.Interop.Outlook.NameSpace olNameSpace = olApplication.GetNamespace("mapi"); 
     olNameSpace.Logon("Outlook", "", false, true); 

     // get the Calender items 
     Microsoft.Office.Interop.Outlook.MAPIFolder _olCalender = olNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar); 

     // Get the Items (Appointments) collection from the Calendar folder. 
     Microsoft.Office.Interop.Outlook.Items oItems = _olCalender.Items; 



     foreach (object o in oItems) 
     { 

      if (o is Microsoft.Office.Interop.Outlook.AppointmentItem) 
      { 
       Microsoft.Office.Interop.Outlook.Recipients recipients = ((Microsoft.Office.Interop.Outlook.AppointmentItem)o).Recipients; 
       foreach (Microsoft.Office.Interop.Outlook.Recipient rec in recipients) 
       { 
        resolved = rec.Resolve(); 
        if (resolved) 
        { 
         Microsoft.Office.Interop.Outlook.ContactItem contactItem = rec.AddressEntry.GetContact(); 
         MessageBox.Show(contactItem.CompanyName); 
        } 
       } 

      } 
     } 

それが動作するはずです願っています。

1

私はこれを試していませんが、役立つかもしれません。 CompanyNameはContactItemのプロパティなので、受信者をContactItemに変換する必要があります。以下のコードは、受信者の電子メールアドレスを使用してアドレス帳の連絡先を探します。ここからCompanyNameを見つけることができます:

Outlook.MAPIFolder fldContacts = (Outlook.MAPIFolder)OutlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts); 
for (int i =1; i <aitem.Recipients.Count+1 ; i++) 
{ 
    Outlook.Recipient r = aitem.Recipients.Item(i); 
    if (!r.Resolved) r.Resolve(); 
    if (r.Resolved) 
    { 
    Outlook.ContactItem ci = (fldContacts.Items.Find("[Email1Address] = '" + r.Address + "'") as Outlook.ContactItem); 
    if (ci != null) 
    { 
     //Now you got the contact deal with it here 
    } 
    } 
} 
関連する問題