Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

249 lines
7.1 KiB

// 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;
pSMTPTransport2->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);
pNNTPTransport->Release();
}
pIImnAccount->Release();
}
}
pIImnAccountManager->Release();
if( pIImnAccountManager2 )
{
pIImnAccountManager2->Release();
}
}
return hr;
}