Outlookオブジェクトモデルを使用して、Outlookコンタクトに表示されるフィールドを取得できますか
-
06-07-2019 - |
質問
iはoutlookオブジェクトモデルを使用してグローバルアドレス帳を参照できますが、とにかくcsharpのoutlookオブジェクトモデルを使用すると、次の人物のプロパティを取得できます:
市、州、国/地域 エイリアス タイトル 電話
iはAddressEntryオブジェクトでこれらのプロパティを見つけられないようです。
編集:ここで賞金を開始しました。 LDAPクエリを使用してこれを機能させましたが、それらは非常に苦痛です。 OutlookがシンプルなAPIでこれをサポートしていないことにショックを受けました。私は他の誰かがそれを機能させたかどうか、Outlookがこれをサポートしない理由を説明/正当化できるかどうかを見たかったです
解決
Microsoft.Office.Interop.Outlookの使用
AddressUserオブジェクトでExchangeUserオブジェクトとGetExchangeUserメソッドを使用する必要があります。
using System;
using Microsoft.Office.Interop.Outlook;
static class Program
{
static void Main(string[] args)
{
ExchangeUser oExUser;
Application app = new Microsoft.Office.Interop.Outlook.Application();
foreach (AddressList addressList in app.Session.AddressLists)
{
if (addressList.Name == "Global Address List")
{
foreach (AddressEntry item in addressList.AddressEntries)
{
Console.WriteLine(item.Address);
oExUser = item.GetExchangeUser();
if (oExUser != null)
{
Console.WriteLine(oExUser.FirstName);
Console.WriteLine(oExUser.LastName);
Console.WriteLine(oExUser.StreetAddress);
Console.WriteLine(oExUser.CompanyName);
Console.WriteLine(oExUser.Department);
Console.WriteLine(oExUser.OfficeLocation);
Console.WriteLine(oExUser.JobTitle);
}
Console.WriteLine();
}
}
}
Console.Read();
}
}
他のヒント
Outlookオブジェクトモデルを使用する必要がある場合は常に、リデンプションライブラリを使用することをお勧めします。 (C#からのCOM相互運用に関係しますが、それは問題ではないはずです。)そこで、 RDO(リデンプションデータオブジェクト)ライブラリ、および RDOAddressBookを確認する必要があります。
および RDOAddressEntry
オブジェクト。 RDOAddressEntry
オブジェクトは、探しているすべてのプロパティを公開します。
Redemptionライブラリは、Outlookセキュリティに関連する問題を回避し、通常のOOMで公開されるよりも多くのプロパティへのアクセスも許可します。残念ながら、まだメール処理のためだけにライブラリを使用しているため、特定の問題を解決するための実用的なサンプルを提供することはできません。ただし、Redemptionサイトには多くのコード例があります。
他の質問で示唆されているように、アドレス帳の下のLDAPデータベースへの直接アクセスに頼らなければなりません。