249 lines
6.7 KiB
C++
249 lines
6.7 KiB
C++
|
// oe.cpp
|
||
|
//
|
||
|
#include "oe.h"
|
||
|
|
||
|
|
||
|
/*
|
||
|
HRESULT GetServerAndPort(IN INETSERVER & rServer, OUT CHost & host, OUT DWORD & dwPort)
|
||
|
{
|
||
|
#ifdef UNICODE
|
||
|
TCHAR wcsServer[128];
|
||
|
|
||
|
mbstowcs(wcsServer, rServer.szServerName, 128);
|
||
|
host.SetHost(wcsServer);
|
||
|
#else
|
||
|
host.SetHost(rServer.szServerName);
|
||
|
#endif
|
||
|
dwPort = (long)rServer.dwPort;
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
enum MAIL_TYPE
|
||
|
{
|
||
|
MAIL_NONE,
|
||
|
MAIL_SMTP,
|
||
|
MAIL_SMTP2,
|
||
|
MAIL_IMAP,
|
||
|
MAIL_POP3,
|
||
|
MAIL_HTTP,
|
||
|
};
|
||
|
|
||
|
HRESULT GetDefaultOutBoundMailServer2(IN IImnAccount * pIImnAccount,
|
||
|
OUT INETSERVER & rServer,
|
||
|
OUT DWORD & dwMailType)
|
||
|
{
|
||
|
ISMTPTransport *pSMTPTransport;
|
||
|
ISMTPTransport2 *pSMTPTransport2;
|
||
|
HRESULT hr;
|
||
|
|
||
|
// Create the SMTP transport object
|
||
|
//
|
||
|
hr = CoCreateInstance(CLSID_ISMTPTransport, NULL, CLSCTX_INPROC_SERVER, IID_ISMTPTransport, (LPVOID *)&pSMTPTransport);
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
// Get the SMTP server information
|
||
|
//
|
||
|
hr = pSMTPTransport->InetServerFromAccount(pIImnAccount, &rServer);
|
||
|
dwMailType = MAIL_SMTP;
|
||
|
pSMTPTransport->Release();
|
||
|
}
|
||
|
|
||
|
if( FAILED(hr) )
|
||
|
{
|
||
|
// Unable to get SMTP server info, lets try and get SMTP transport 2 server information
|
||
|
//
|
||
|
hr = CoCreateInstance(CLSID_ISMTPTransport, NULL, CLSCTX_INPROC_SERVER, IID_ISMTPTransport2, (LPVOID *)&pSMTPTransport2);
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
// Get SMTP2 server info
|
||
|
//
|
||
|
hr = pSMTPTransport2->InetServerFromAccount(pIImnAccount, &rServer);
|
||
|
dwMailType = MAIL_SMTP2;
|
||
|
pSMTPTransport->Release();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if( FAILED(hr) )
|
||
|
{
|
||
|
// Make sure to clear the struct
|
||
|
//
|
||
|
memset(&rServer,0,sizeof(rServer));
|
||
|
dwMailType = MAIL_NONE;
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT GetDefaultInBoundMailServer2(IN IImnAccount * pIImnAccount,
|
||
|
OUT INETSERVER & rServer,
|
||
|
OUT DWORD & dwMailType)
|
||
|
{
|
||
|
IPOP3Transport *pPOP3Transport;
|
||
|
IIMAPTransport *pIMAPTransport;
|
||
|
IHTTPMailTransport *pHTTPTransport;
|
||
|
HRESULT hr;
|
||
|
|
||
|
|
||
|
// Create the HTTP transport object
|
||
|
//
|
||
|
hr = CoCreateInstance(CLSID_IHTTPMailTransport, NULL, CLSCTX_INPROC_SERVER, IID_IHTTPMailTransport, (LPVOID *)&pHTTPTransport);
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
// Get the HTTP server information
|
||
|
//
|
||
|
hr = pHTTPTransport->InetServerFromAccount(pIImnAccount, &rServer);
|
||
|
dwMailType = MAIL_HTTP;
|
||
|
pHTTPTransport->Release();
|
||
|
}
|
||
|
|
||
|
if( FAILED(hr) )
|
||
|
{
|
||
|
// Create the POP3 transport object
|
||
|
//
|
||
|
hr = CoCreateInstance(CLSID_IPOP3Transport, NULL, CLSCTX_INPROC_SERVER, IID_IPOP3Transport, (LPVOID *)&pPOP3Transport);
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
// Get the POP3 server information
|
||
|
//
|
||
|
hr = pPOP3Transport->InetServerFromAccount(pIImnAccount, &rServer);
|
||
|
dwMailType = MAIL_POP3;
|
||
|
pPOP3Transport->Release();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if( FAILED(hr) )
|
||
|
{
|
||
|
// Create the SMTP transport object
|
||
|
//
|
||
|
hr = CoCreateInstance(CLSID_IIMAPTransport, NULL, CLSCTX_INPROC_SERVER, IID_IIMAPTransport, (LPVOID *)&pIMAPTransport);
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
// Get the SMTP server information
|
||
|
//
|
||
|
hr = pIMAPTransport->InetServerFromAccount(pIImnAccount, &rServer);
|
||
|
dwMailType = MAIL_IMAP;
|
||
|
pIMAPTransport->Release();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if( FAILED(hr) )
|
||
|
{
|
||
|
memset(&rServer,0,sizeof(rServer));
|
||
|
dwMailType = MAIL_NONE;
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT GetOEDefaultMailServer2(OUT INETSERVER & rInBoundServer,
|
||
|
OUT DWORD & dwInBoundMailType,
|
||
|
OUT INETSERVER & rOutBoundServer,
|
||
|
OUT DWORD & dwOutBoundMailType)
|
||
|
{
|
||
|
IImnAccountManager2 *pIImnAccountManager2 = NULL;
|
||
|
IImnAccountManager *pIImnAccountManager = NULL;
|
||
|
IImnAccount *pIImnAccount = NULL;
|
||
|
HRESULT hr;
|
||
|
|
||
|
|
||
|
hr = CoCreateInstance(CLSID_ImnAccountManager, NULL, CLSCTX_INPROC_SERVER, IID_IImnAccountManager, (void**)&pIImnAccountManager);
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
hr = pIImnAccountManager->QueryInterface(__uuidof(IImnAccountManager2), (void**)&pIImnAccountManager2);
|
||
|
if(SUCCEEDED(hr))
|
||
|
{
|
||
|
hr = pIImnAccountManager2->InitUser(NULL, (GUID)UID_GIBC_DEFAULT_USER, 0);
|
||
|
|
||
|
}
|
||
|
|
||
|
if(SUCCEEDED(hr))
|
||
|
{
|
||
|
hr = pIImnAccountManager->Init(NULL);
|
||
|
}
|
||
|
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
hr = pIImnAccountManager->GetDefaultAccount(ACCT_MAIL, &pIImnAccount);
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
HRESULT hr2, hr3;
|
||
|
|
||
|
hr = E_FAIL;
|
||
|
|
||
|
hr2 = GetDefaultInBoundMailServer2(pIImnAccount,rInBoundServer,dwInBoundMailType);
|
||
|
hr3 = GetDefaultOutBoundMailServer2(pIImnAccount,rOutBoundServer,dwOutBoundMailType);
|
||
|
|
||
|
if( SUCCEEDED(hr2) || SUCCEEDED(hr3) )
|
||
|
{
|
||
|
hr = S_OK;
|
||
|
}
|
||
|
pIImnAccount->Release();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pIImnAccountManager->Release();
|
||
|
if( pIImnAccountManager2 )
|
||
|
{
|
||
|
pIImnAccountManager2->Release();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
HRESULT GetOEDefaultNewsServer2(OUT INETSERVER & rNewsServer)
|
||
|
{
|
||
|
IImnAccountManager2 *pIImnAccountManager2 = NULL;
|
||
|
IImnAccountManager *pIImnAccountManager = NULL;
|
||
|
IImnAccount *pIImnAccount = NULL;
|
||
|
INNTPTransport *pNNTPTransport;
|
||
|
HRESULT hr;
|
||
|
|
||
|
|
||
|
hr = CoCreateInstance(CLSID_ImnAccountManager, NULL, CLSCTX_INPROC_SERVER, IID_IImnAccountManager, (void**)&pIImnAccountManager);
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
hr = pIImnAccountManager->QueryInterface(__uuidof(IImnAccountManager2), (void**)&pIImnAccountManager2);
|
||
|
if(SUCCEEDED(hr))
|
||
|
{
|
||
|
hr = pIImnAccountManager2->InitUser(NULL, (GUID)UID_GIBC_DEFAULT_USER, 0);
|
||
|
|
||
|
}
|
||
|
|
||
|
if(SUCCEEDED(hr))
|
||
|
{
|
||
|
hr = pIImnAccountManager->Init(NULL);
|
||
|
}
|
||
|
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
hr = pIImnAccountManager->GetDefaultAccount(ACCT_NEWS, &pIImnAccount);
|
||
|
if( SUCCEEDED(hr) )
|
||
|
{
|
||
|
hr = CoCreateInstance(CLSID_INNTPTransport, NULL, CLSCTX_INPROC_SERVER, IID_INNTPTransport, (LPVOID *)&pNNTPTransport);
|
||
|
if(SUCCEEDED(hr))
|
||
|
{
|
||
|
|
||
|
hr = pNNTPTransport->InetServerFromAccount(pIImnAccount, &rNewsServer);
|
||
|
pIImnAccount->Release();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
pIImnAccountManager->Release();
|
||
|
if( pIImnAccountManager2 )
|
||
|
{
|
||
|
pIImnAccountManager2->Release();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|