⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outlooksession.cpp

📁 windows mobile中操作outlook
💻 CPP
字号:
// OutlookSession.cpp: implementation of the OutlookSession class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "OutlookSession.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

OutlookSession::OutlookSession()
{
	m_pSession = NULL;
	m_pMsgStoresTable = NULL;
	m_pMsgStore = NULL;
	m_pFolder = NULL;
}

OutlookSession::~OutlookSession()
{
	if( m_pFolder != NULL )
		m_pFolder->Release();

	if( m_pMsgStoresTable != NULL )
		m_pMsgStoresTable->Release();

	if( m_pMsgStore != NULL )
		m_pMsgStore->Release();

	if( m_pSession != NULL )
	{
		m_pSession->Logoff(NULL, MAPI_LOGOFF_SHARED, 0);
		m_pSession->Release();
	}
}


int OutlookSession::OpenSession(LPCTSTR pcszName, ULONG ul)
{
	HRESULT hr;
	
	hr = MAPIInitialize(NULL);
	if( FAILED(hr) ) 
	{
		return hr;
	}

	hr = MAPILogonEx(NULL, NULL, NULL, NULL, &m_pSession);
	if( FAILED(hr) ) 
	{
		return hr;
	}
	
	hr = m_pSession->GetMsgStoresTable(0, &m_pMsgStoresTable);
	if( FAILED(hr) ) 
	{
		return hr;
	}

	LPSRowSet pRows = NULL;
	SizedSPropTagArray(2, Columns) = {2,{PR_DISPLAY_NAME,PR_ENTRYID}};
	
	hr = m_pSession->GetMsgStoresTable(0, &m_pMsgStoresTable);
	if( FAILED(hr) ) return hr;
	
    hr = m_pMsgStoresTable->SetColumns((LPSPropTagArray)&Columns, 0);
	if( FAILED(hr) ) return hr;
	
	LPSPropValue lpProp = NULL;
	while (TRUE)
	{
		hr = m_pMsgStoresTable->QueryRows(1, 0, &pRows);
		if (FAILED(hr) || pRows->cRows != 1)
			break;
		
		lpProp = &pRows->aRow[0].lpProps[0];
		
		if(_tcscmp(lpProp->Value.LPSZ, pcszName) == 0)
			break;
	}
	
	hr = m_pSession->OpenMsgStore(0, pRows->aRow[0].lpProps[1].Value.bin.cb,
			(ENTRYID*)pRows->aRow[0].lpProps[1].Value.bin.lpb,
			NULL, MDB_NO_DIALOG | MAPI_BEST_ACCESS, &m_pMsgStore);
	
	MAPIFreeBuffer(pRows);

    LPSPropValue	rgprops = NULL;
    ULONG			cValues = 0;
	ULONG           rgTags[] = { 1, ul};
	
    hr = m_pMsgStore->GetProps((LPSPropTagArray) rgTags, MAPI_UNICODE, &cValues, &rgprops);
	if( FAILED(hr) ) return hr;
	
    if(rgprops[0].ulPropTag != ul)
	{
		return hr;
	}
	
    hr = m_pMsgStore->OpenEntry(rgprops[0].Value.bin.cb, 
            (LPENTRYID)rgprops[0].Value.bin.lpb, NULL, MAPI_MODIFY, 
            NULL, (LPUNKNOWN*)&m_pFolder);
	
	MAPIFreeBuffer(rgprops);
	
	return hr;
}

void OutlookSession::SaveMailToDraft()
{
	HRESULT hr;
	OutlookSession session;
	LPMESSAGE pMessage = NULL;
	LPSTREAM pStream = NULL;

	//打开邮件草稿箱
	hr = session.OpenSession(_T("EMAIL"), PR_CE_IPM_DRAFTS_ENTRYID);
	if(hr != S_OK)
	{
		return;
	}

	//创建一封新邮件
	hr = session.m_pFolder->CreateMessage(NULL, 0, &pMessage);
	if(hr != S_OK)
	{
		return;
	}

	INT			nBufSize = CbNewADRLIST(1);
	LPADRLIST	pAddressList = NULL;

	hr = MAPIAllocateBuffer(nBufSize, (LPVOID FAR *)&pAddressList);
	memset(pAddressList, 0, nBufSize);

	LPTSTR pszTo = L"my@sohu.com";
	LPTSTR pszSubject = "测试";

	hr = MAPIAllocateBuffer(sizeof(SPropValue) * 3, (LPVOID FAR *)&pAddressList->aEntries[0].rgPropVals);
	memset(pAddressList->aEntries[0].rgPropVals, 0, sizeof(SPropValue) * 3);
	pAddressList->aEntries[0].rgPropVals[0].ulPropTag = PR_RECIPIENT_TYPE;
	pAddressList->aEntries[0].rgPropVals[0].Value.ul = MAPI_TO;
	pAddressList->aEntries[0].rgPropVals[1].ulPropTag = PR_ADDRTYPE;
	pAddressList->aEntries[0].rgPropVals[1].Value.LPSZ = TEXT("SMTP");
	pAddressList->aEntries[0].rgPropVals[2].ulPropTag = PR_EMAIL_ADDRESS;
	pAddressList->aEntries[0].rgPropVals[2].Value.LPSZ = pszTo;
	pAddressList->aEntries[0].cValues = 3;
	pAddressList->cEntries++;
	hr = pMessage->ModifyRecipients(MODRECIP_ADD, pAddressList);
	MAPIFreeBuffer(pAddressList->aEntries[0].rgPropVals);
	MAPIFreeBuffer(pAddressList);

	SPropValue prop[2];
	prop[0].ulPropTag	= PR_SUBJECT;
	prop[0].Value.LPSZ = L"主题";

	prop[1].ulPropTag	= PR_MESSAGE_FLAGS;
	prop[1].Value.ul = MSGFLAG_FROMME | MSGFLAG_UNSENT;//未发送

	hr = pMessage->SetProps(2, prop, NULL);
	
	CString strContent = L"测试内容";

	//邮件正文
	hr = pMessage->OpenProperty(PR_BODY, NULL, 0, 
				MAPI_MODIFY | MAPI_CREATE, (LPUNKNOWN*)&pStream);
	pStream->Write(strContent.LockBuffer(), strContent.GetLength() * 2, NULL);
	
	pStream->Commit(STGC_DEFAULT);
	pStream->Release();
	pStream = NULL;

	pMessage->Release();
	pMessage = NULL;
}

void OutlookSession::SaveMailToSend()
{
	HRESULT hr;

	LPMESSAGE pMessage = NULL;
	LPSTREAM pStream = NULL;

	//打开邮件发件箱
	hr = OpenSession(_T("EMAIL"), PR_IPM_OUTBOX_ENTRYID);
	if(hr != S_OK)
	{
		return;
	}

	//创建一封新邮件
	hr = m_pFolder->CreateMessage(NULL, 0, &pMessage);
	if(hr != S_OK)
	{
		return;
	}

	INT			nBufSize = CbNewADRLIST(1);
	LPADRLIST	pAddressList = NULL;

	hr = MAPIAllocateBuffer(nBufSize, (LPVOID FAR *)&pAddressList);
	memset(pAddressList, 0, nBufSize);

	LPTSTR pszTo = L"my@sohu.com";
	LPTSTR pszSubject = L"测试";

	hr = MAPIAllocateBuffer(sizeof(SPropValue) * 3, (LPVOID FAR *)&pAddressList->aEntries[0].rgPropVals);
	memset(pAddressList->aEntries[0].rgPropVals, 0, sizeof(SPropValue) * 3);
	pAddressList->aEntries[0].rgPropVals[0].ulPropTag = PR_RECIPIENT_TYPE;
	pAddressList->aEntries[0].rgPropVals[0].Value.ul = MAPI_TO;
	pAddressList->aEntries[0].rgPropVals[1].ulPropTag = PR_ADDRTYPE;
	pAddressList->aEntries[0].rgPropVals[1].Value.LPSZ = TEXT("SMTP");
	pAddressList->aEntries[0].rgPropVals[2].ulPropTag = PR_EMAIL_ADDRESS;
	pAddressList->aEntries[0].rgPropVals[2].Value.LPSZ = pszTo;
	pAddressList->aEntries[0].cValues = 3;
	pAddressList->cEntries++;
	hr = pMessage->ModifyRecipients(MODRECIP_ADD, pAddressList);
	MAPIFreeBuffer(pAddressList->aEntries[0].rgPropVals);
	MAPIFreeBuffer(pAddressList);

	SPropValue prop[2];
	prop[0].ulPropTag	= PR_SUBJECT;
	prop[0].Value.LPSZ = L"主题";

	prop[1].ulPropTag	= PR_MESSAGE_FLAGS;
	prop[1].Value.ul = MSGFLAG_FROMME | MSGFLAG_UNSENT;//未发送

	hr = pMessage->SetProps(2, prop, NULL);

        CString strContent = L"测试内容";
	//邮件正文
	hr = pMessage->OpenProperty(PR_BODY, NULL, 0, 
				MAPI_MODIFY | MAPI_CREATE, (LPUNKNOWN*)&pStream);
	pStream->Write(strContent.LockBuffer(), strContent.GetLength() * 2, NULL);
	
	pStream->Commit(STGC_DEFAULT);
	pStream->Release();
	pStream = NULL;

	pMessage->Release();
	pMessage = NULL;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -