1

我正在使用潮汐dk 制作一个桌面应用程序,与 MS Outlook 连接。应用程序运行良好,但...

当我从 Outlook 获得联系人时,我使用它。

def getContacts()

        #ouverture de l'application outlook
        begin
            application = WIN32OLE.new('Outlook.Application')
        rescue Exception=>e
            alert("An error occurred while opening outlook, no contacts will be loaded");
            return false
        end

        mapi = application.GetNameSpace('MAPI')

        contacts = mapi.GetDefaultFolder(10).Items
        contacts.each do |contact|

            begin
                puts contact.FullName
                puts contact.Email1Address
                puts contact.BusinessTelephoneNumber
                addContactApp(contact.FullName, contact.Email1Address)
            rescue Exception=>e
                alert("An error occurred while loading contacts");
            end
        end
    end

这也有效......但我的联系人列表中有多个文件夹,我想从 MS Outlook 中的所有文件夹中获取所有联系人。是否可以获取所有联系人文件夹?

4

3 回答 3

2

从集合开始Namespace.Folders并递归处理每个文件夹及其子文件夹 ( MAPIFolder.Folders) 检查MAPIFolder.DefaultItemType属性。

于 2013-07-22T13:54:50.840 回答
1

这根本不是我的想法:您只处理默认联系人文件夹的子文件夹中的项目。如果您有一个包含与收件箱或联系人文件夹本身处于同一级别的联系人的文件夹,则不会对其进行处理 - 您需要从 Namespace.Folders 开始并检查 DefaultItemType 属性以确保您只处理联系人文件夹。其次,您假设您只有联系人。如果您有分发列表,您的代码将引发错误,因为 DistListItem 对象不支持 FullName/Email1Address/等。特性。检查 Class 属性(由所有 OOM 对象公开)是否等于 40 (OlObjectClass.olContact)。

于 2013-07-23T16:50:06.800 回答
0

谢谢你的回答!!我已经尝试过了,它工作正常!

mapi = application.GetNameSpace('MAPI')
        contacts_all_folders = mapi.GetDefaultFolder(10).Folders
        contacts_all_folders.each do |folder|           
            var myfolder = mapi.GetDefaultFolder(10).Folders(folder.Name).Items
            myfolder.each do |contact|
                begin
                    puts contact.FullName
                    puts contact.Email1Address
                    puts contact.BusinessTelephoneNumber
                    addContactApp(contact.FullName, contact.Email1Address)
                rescue Exception=>e
                    alert("An error occurred while loading contacts "+e);
                end
            end
        end
于 2013-07-23T07:11:37.943 回答