4

Exchangeに接続されたOutlookからインターネット形式のアドレスを読み取ろうとしています。Outlookの連絡先からすべての連絡先を読み取りました。つまり、グローバルアドレスブック(GAB)からではありません。問題は、Exchange GABの連絡先に保存されているすべてのユーザーに対して、X.500形式の連絡先しか読み取れなかったことです。この場合は役に立たないアドレス。Exchangeサーバーのドメインにない手動で追加されたすべての連絡先については、インターネットアドレスが期待どおりにエクスポートされます。

基本的に、連絡先を列挙するために次のコードスニペットを使用しました。

static void Main(string[] args)
{
    var outlookApplication = new Application();
    NameSpace mapiNamespace = outlookApplication.GetNamespace("MAPI");
    MAPIFolder contacts = mapiNamespace.GetDefaultFolder(OlDefaultFolders.olFolderContacts);

    for (int i = 1; i < contacts.Items.Count + 1; i++)
    {
        try
        {
            ContactItem contact = (ContactItem)contacts.Items[i];
            Console.WriteLine(contact.FullName);
            Console.WriteLine(contact.Email1Address);
            Console.WriteLine(contact.Email2Address);
            Console.WriteLine(contact.Email3Address);
            Console.WriteLine();
        }
        catch (System.Exception e) { }
    }
    Console.Read();
}

X.500の代わりにインターネットアドレスを抽出する方法はありますか?

4

1 に答える 1

5

ContactItemからに変換する必要がありますAddressEntry-一度に1つのメールアドレス。

これを行うには、オブジェクトモデルAddressEntryを介してviaにアクセスする必要があります。Recipient実際の受信者を取得する唯一の方法EntryIDは、のを利用するPropertyAccessorことですContactItem

const string Email1EntryIdPropertyAccessor = "http://schemas.microsoft.com/mapi/id/{00062004-0000-0000-C000-000000000046}/80850102";
string address = string.Empty;
Outlook.Folder folder = this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts) as Outlook.Folder;
foreach (var contact in folder.Items.Cast<Outlook.ContactItem>().Where(c=>!string.IsNullOrEmpty(c.Email1EntryID)))
{
    Outlook.PropertyAccessor propertyAccessor = contact.PropertyAccessor;
    object rawPropertyValue = propertyAccessor.GetProperty(Email1EntryIdPropertyAccessor);
    string recipientEntryID = propertyAccessor.BinaryToString(rawPropertyValue);
    Outlook.Recipient recipient = this.Application.Session.GetRecipientFromID(recipientEntryID);
    if (recipient != null && recipient.Resolve() && recipient.AddressEntry != null)
        address = recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
}
于 2012-07-09T16:01:03.660 に答える