windows-nt/Source/XPSP1/NT/sdktools/debuggers/excepmon/emsvc/email.cpp
2020-09-26 16:20:57 +08:00

174 lines
4 KiB
C++

#include "stdafx.h"
// This flag indicates that the CDO's IDispatch must be used natively.
//#define _USECDODISP
#ifndef _USECDODISP
//
// Use CDO by importing the typelib into the project
//
#include <cdonts.tlh>
// BUGBUG need to know the right place to pick up cdonts.dll
//#import <cdonts.dll> no_namespace rename("GetMessage", "GetMessageCDOEm" )
HRESULT
SendMail
(
IN LPCTSTR lpszFrom,
IN LPCTSTR lpszTo,
IN LPCTSTR lpszSubject,
IN LPCTSTR lpszMessage,
IN short nImportance = CdoNormal
)
{
_ASSERTE(lpszFrom != NULL);
_ASSERTE(lpszTo != NULL);
HRESULT hr = E_FAIL;
_bstr_t btFrom = _T(""),
btTo = _T(""),
btSubject = _T(""),
btMessage = _T("");
// __try
{
btFrom = lpszFrom;
btTo = lpszTo;
btSubject = lpszSubject;
btMessage = lpszMessage;
CoInitialize(NULL);
INewMail *pNewMail = NULL;
hr = CoCreateInstance(
__uuidof(NewMail),
NULL,
CLSCTX_INPROC_SERVER,
__uuidof(INewMail),
(void**) &pNewMail
);
if( SUCCEEDED(hr) ) {
hr = pNewMail->Send( btFrom, btTo, btSubject, btMessage, nImportance );
pNewMail->Release();
}
CoUninitialize();
}
// __except ( EXCEPTION_EXECUTE_HANDLER, 1 )
// {
// hr = E_UNEXPECTED;
// _ASSERTE(false);
// }
return hr;
}
void __stdcall _com_issue_errorex (
long hr,
struct IUnknown * pUnk,
struct _GUID const & refGuid
)
{
throw _com_error ( hr );
}
#else // _USECDODISP
#include <afxdisp.h>
class INewMail : public COleDispatchDriver
{
public:
INewMail() {} // Calls COleDispatchDriver default constructor
// Operations
public:
void Send(const VARIANT& From, const VARIANT& To, const VARIANT& Subject, const VARIANT& Body, const VARIANT& Importance);
void AttachFile(const VARIANT& Source, const VARIANT& FileName, const VARIANT& EncodingMethod);
void AttachURL(const VARIANT& Source, const VARIANT& ContentLocation, const VARIANT& ContentBase, const VARIANT& EncodingMethod);
};
void INewMail::Send(const VARIANT& From, const VARIANT& To, const VARIANT& Subject, const VARIANT& Body, const VARIANT& Importance)
{
static BYTE parms[] =
VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT;
InvokeHelper(0xa, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
&From, &To, &Subject, &Body, &Importance);
}
void INewMail::AttachFile(const VARIANT& Source, const VARIANT& FileName, const VARIANT& EncodingMethod)
{
static BYTE parms[] =
VTS_VARIANT VTS_VARIANT VTS_VARIANT;
InvokeHelper(0xb, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
&Source, &FileName, &EncodingMethod);
}
void INewMail::AttachURL(const VARIANT& Source, const VARIANT& ContentLocation, const VARIANT& ContentBase, const VARIANT& EncodingMethod)
{
static BYTE parms[] =
VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT;
InvokeHelper(0xc, DISPATCH_METHOD, VT_EMPTY, NULL, parms,
&Source, &ContentLocation, &ContentBase, &EncodingMethod);
}
HRESULT
SendMail
(
IN LPCTSTR lpszFrom,
IN LPCTSTR lpszTo,
IN LPCTSTR lpszSubject,
IN LPCTSTR lpszMessage,
IN short nImportance
)
{
_ASSERTE(lpszFrom != NULL);
_ASSERTE(lpszTo != NULL);
HRESULT hr = E_FAIL;
_bstr_t btFrom = _T(""),
btTo = _T(""),
btSubject = _T(""),
btMessage = _T("");
btFrom = lpszFrom;
btTo = lpszTo;
btSubject = lpszSubject;
btMessage = lpszMessage;
hr = CoInitialize ( NULL );
INewMail Mail;
BOOL fOk = Mail.CreateDispatch ( _T("cdonts.newmail") );
if ( fOk ) {
variant_t vFrom = lpszFrom;
variant_t vTo = lpszTo;
variant_t vSubject = lpszSubject;
variant_t vImp = nImportance;
Mail.Send ( vFrom, vTo, vSubject, vSubject, vImp );
}
CoUninitialize();
return hr;
}
#endif