我使用tidesdk制作桌面应用,与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中的所有文件夹中获取所有联系人。是否可以获取所有联系人文件夹?
答案 0 :(得分:2)
从Namespace.Folders
集合开始,递归处理每个文件夹及其子文件夹(MAPIFolder.Folders
),检查MAPIFolder.DefaultItemType
属性。
答案 1 :(得分:1)
这完全不是我想到的:您只处理默认“联系人”文件夹的子文件夹中的项目。如果您的联系人与收件箱或联系人文件夹本身处于同一级别的文件夹,则不会处理它 - 您需要从Namespace.Folders开始并检查DefaultItemType属性以确保您只处理联系人文件夹。其次,你假设你只有联系人。如果您有一个通讯组列表,您的代码将引发错误,因为DistListItem对象不支持FullName / Email1Address / etc.属性。检查Class属性(由所有OOM对象公开)是否等于40(OlObjectClass.olContact)。
答案 2 :(得分: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