📄 outlooksession.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 + -