|
|
// 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; }
|