如何导入outlook联系人?
现在可以导入outlook联系人,但是outlook分组中的联系人读不出来,并且分组后面建立的所有联系人读不出来!
即没有分组的时候都可以读出来!
问题:如何读出outlook中,各个分组的联系人! 问题点数:100、回复次数:11Top
1 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-08-17 16:18:18 得分 10
http://www.vckbase.net/document/viewdoc/?id=660Top
2 楼platinum15(心碎便便)回复于 2005-08-17 17:59:57 得分 0
这个好像就也是读不出分组中的联系人Top
3 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-08-17 18:19:25 得分 20
An excellant post in codeguru.
Import address book from OE
Some of this code is EXTREMELY complicated to say the very least. Good luck.
You will need to include:
#include "mapix.h"
#include "addrlkup.h"
First call the GETMSExchangeUSers() function seen below:
void CMAPITestDlg::GetMSExchangeUsers(CStringList &NameList)
{
CString cst;
HRESULT hr = ::MAPIInitialize(NULL);
ASSERT(S_OK == hr);
LPMAPISESSION pSession = NULL;
hr = ::MAPILogonEx(0, NULL, NULL, MAPI_LOGON_UI | MAPI_ALLOW_OTHERS | MAPI_EXTENDED, &pSession);
ASSERT(SUCCEEDED(hr));
LPADRBOOK lpAdrBook = NULL;
hr = pSession->OpenAddressBook(0, 0, MAPI_ACCESS_MODIFY, &lpAdrBook);
ASSERT(SUCCEEDED(hr));
ULONG cbeid = 0;
LPENTRYID peid = NULL;
hr = HrFindExchangeGlobalAddressList(lpAdrBook, &cbeid, &peid);
if (SUCCEEDED(hr))
{
ULONG openFlags = MAPI_BEST_ACCESS;
hr = lpAdrBook->OpenEntry(cbeid, peid, NULL, openFlags, &ulObjType, (LPUNKNOWN *)&dlpPABEntry);
if (hr ==S_OK)
{
SizedSPropTagArray(2, sptStoTbl) = {2, {PR_DISPLAY_NAME, PR_EMS_AB_PROXY_ADDRESSES}};
if (HR_SUCCEEDED(((LPABCONT)dlpPABEntry)->GetContentsTable(0L, &lppabcont)))
{
if (HR_SUCCEEDED(lppabcont->SetColumns((LPSPropTagArray)&sptStoTbl, TBL_BATCH)))
{
hr = ((LPMAPITABLE)lppabcont)->GetRowCount(0, &lpulCount);
int x = 0;
int iTotNum = lpulCount;
int num_iterations = (lpulCount / 50);
int num_left = (lpulCount - (num_iterations * 50));
m_Count = lpulCount;
while (x < num_iterations)
{
if (HR_SUCCEEDED(((LPMAPITABLE)lppabcont)->QueryRows((LONG)lpulCount, 0, &lprws)))
{
for (int i = 0; i < (int)(*lprws).cRows; i++)
{
CString stro, addr, ListElement;
stro.Format("%s", lprws->aRow.lpProps[0].Value.lpszA);
ListElement = stro;
if (IsItValid(stro) == 1)
{
++cntr;
++m_MostRecentCount;
cst.Format("%d", cntr);
NameList.AddTail(ListElement);
CString ice;
ice.Format("%d of %d", cntr, iTotNum);
SetDlgItemText(IDC_NUM, ice);
}
}
}
++x;
}
if (HR_SUCCEEDED(((LPMAPITABLE)lppabcont)->QueryRows((LONG)lpulCount, 0, &lprws)))
{
for (int i = 0; i < num_left; i++)
{
CString stro, addr, ListElement;
stro.Format("%s", lprws->aRow.lpProps[0].Value.lpszA);
ListElement = stro;
if (IsItValid(stro) == 1)
{
++cntr;
++m_MostRecentCount;
cst.Format("%d", cntr);
NameList.AddTail(ListElement);
}
}
}
}
}
}
}
else
{
AfxMessageBox("Error...");
}
if (peid)
{
::MAPIFreeBuffer(peid);
}
if (lpAdrBook)
{
lpAdrBook->Release();
}
::MAPIUninitialize();
}Top
4 楼platinum15(心碎便便)回复于 2005-08-17 20:05:24 得分 0
vcmute(横秋) ( ) 好多变量没声名,msdn都没找到这些方法!
能不能把链接贴给我Top
5 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-08-18 01:11:25 得分 65
http://www.vckbase.net/document/viewdoc/?id=660的例子进行如下修改可以达到你的要求
我的outlook是2003
#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\mso.dll" named_guids
#import "C:\Program Files\Microsoft Office\OFFICE11\MSOUTL.olb" \
no_namespace exclude("_IRecipientControl", "_DRecipientControl")
......
_ApplicationPtr pApp;
HRESULT hr;
m_ListEmail.ResetContent();
try
{
hr=pApp.CreateInstance(__uuidof(Application));
if (FAILED(hr))
{
AfxMessageBox("Outlook实例创建失败");
return 1;
}
// 获取默认Outlook中联系人文件夹
MAPIFolderPtr pFolder = pApp->GetNamespace(_bstr_t("MAPI"))->GetDefaultFolder(olFolderContacts);
_FoldersPtr pFolders;
while (pFolder)
{
_ItemsPtr pItems;
_ContactItemPtr pContact;
pItems=pFolder->GetItems();
if (pItems==NULL)
{
AfxMessageBox("不能得到联系人条目");
return 1;
}
pContact=pItems->GetFirst();
while(pContact)
{
CString strTemp;
strTemp=(char *)pContact->GetFullName();
strTemp=strTemp + "<";
strTemp=strTemp + (char *)pContact->GetEmail1Address();
strTemp=strTemp + ">";
m_ListEmail.AddString(strTemp);
pContact=pItems->GetNext();
}
pFolders = pFolder->GetFolders();
if (pFolders)
pFolder = pFolders->GetFirst();
}
}
catch(_com_error &e)
{
AfxMessageBox((char *)e.Description());
}
......
I don't know why 似乎GetFolders是取下一个Top