8

Mapi 経由で Outllok から連絡先をインポートしたい。標準的な連絡先での最初のステップは問題ありません。

MAPIFolder contactObjects = 
outlookObj.Session.GetDefaultFolder(OlDefaultFolders.olFolderContacts);
foreach (ContactItem contactObject in contactObjects.Items) {
    ... import contact ...
}

2 番目のステップでは、さらに共有の連絡先をインポートしたいと考えています。私が見つけた唯一のものは使用していました

OpenSharedItem(sharedContacts.vcf)

開きたいファイル(共有アイテム)の名前がわかりません。誰かが共有連絡先にアクセスする方法を知っていて、私を助けてくれますか?

トビ


アップデート:

vcf-Files のヒントをありがとう。しかし、どこでそれらを見つけることができますか?


アップデート2:

OutlookSpy で遊んでみました。連絡先を共有しているフォルダーにアクセスできましたが、ID を知っているだけでした (もちろん、他のユーザーの場合は異なります)。

var ns = outlookObj.GetNamespace("MAPI");
var flr = ns.GetFolderFromID("00000000176A90DED92CE6439C1CB89AFE3668F90100D1AD8F66B576B54FB731302D9BB9F6C40007E4BAC5020000");

foreach (var contactObject in flr.Items) {
       ...
}

ID を知らずにフォルダにアクセスするにはどうすればよいですか?

4

4 に答える 4

2

vCard ファイルを明示的に解析するか、Redemption を使用する必要があります。RDOContactItemを使用して vCard ファイルをインポートできます。Import- http://www.dimastr.com/redemption/RDOMail.htm#methods

于 2012-11-02T17:43:50.433 に答える
1

タイトルで尋ねられているように、質問に対する解決策はほとんど簡単です。あなたはただ呼び出す必要があります:

Recipient recip = Application.Session.CreateRecipient("Firstname Lastname");
MAPIFolder sharedContactFolder = Application.Session.GetSharedDefaultFolder(recip, OlDefaultFolders.olFolderContacts);

これは私の問題を解決しないので、別の質問をします!

于 2012-11-23T09:40:17.367 に答える
0

Outlookから連絡を取るためにプログラミングを行いました。私はあなたにこれを助けるためにいくつかのサンプルコードを与えています..それはあなたが望んでいることを完全に望んでいませんが、これはあなたの問題を助けると思います...

  using System.Collections.Generic; 

// ... 

private List<Outlook.ContactItem> GetListOfContacts(Outlook._Application OutlookApp) 

    { 
    List<Outlook.ContactItem> contItemLst = null; 
    Outlook.Items folderItems =null; 
    Outlook.MAPIFolder mapiFoldSuggestedConts = null; 
    Outlook.NameSpace nameSpc = null; 
    Outlook.MAPIFolder mapiFoldrConts = null; 
    object itemObj = null; 

    try 
    { 

        contItemLst = new List<Outlook.ContactItem>(); 
        nameSpc = OutlookApp.GetNamespace("MAPI"); 
        // getting items from the Contacts folder in Outlook 
        mapiFoldrConts = 
             nameSpc.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts); 

        folderItems = mapiFoldrConts.Items; 
        for (int i = 1; folderItems.Count >= i; i++) 
        { 

            itemObj = folderItems[i]; 
            if (itemObj is Outlook.ContactItem) 
                contItemLst.Add(itemObj as Outlook.ContactItem); 
            else 
                Marshal.ReleaseComObject(itemObj); 
        } 

        Marshal.ReleaseComObject(folderItems); 
        folderItems = null; 
        // getting items from the Suggested Contacts folder in Outlook 
        mapiFoldSuggestedConts = nameSpc.GetDefaultFolder( 

             Outlook.OlDefaultFolders.olFolderSuggestedContacts); 

        folderItems = mapiFoldSuggestedConts.Items; 

        for (int i = 1; folderItems.Count >= i; i++) 
        { 

            itemObj = folderItems[i]; 
            if (itemObj is Outlook.ContactItem) 
                contItemLst.Add(itemObj as Outlook.ContactItem); 

            else 
                Marshal.ReleaseComObject(itemObj); 
        } 
    } 

    catch (Exception ex) 
    { 
        System.Windows.Forms.MessageBox.Show(ex.Message); 
    } 

    finally 
    { 

        if (folderItems != null) 
            Marshal.ReleaseComObject(folderItems); 
        if (mapiFoldrConts != null) 
            Marshal.ReleaseComObject(mapiFoldrConts); 
        if (mapiFoldSuggestedConts != null) 
            Marshal.ReleaseComObject(mapiFoldSuggestedConts); 
        if (nameSpc != null) Marshal.ReleaseComObject(nameSpc); 
    } 

    return contItemLst; 

} 
于 2012-11-20T15:43:56.033 に答える