/*** Autogenerated by WIDL 1.3.20 from mimeole.idl - Do not edit ***/

#include <rpc.h>
#include <rpcndr.h>

#ifndef __WIDL_MIMEOLE_H
#define __WIDL_MIMEOLE_H

/* Forward declarations */

#ifndef __IMimeInternational_FWD_DEFINED__
#define __IMimeInternational_FWD_DEFINED__
typedef interface IMimeInternational IMimeInternational;
#endif

#ifndef __IMimeSecurity_FWD_DEFINED__
#define __IMimeSecurity_FWD_DEFINED__
typedef interface IMimeSecurity IMimeSecurity;
#endif

#ifndef __IMimeHeaderTable_FWD_DEFINED__
#define __IMimeHeaderTable_FWD_DEFINED__
typedef interface IMimeHeaderTable IMimeHeaderTable;
#endif

#ifndef __IMimePropertySchema_FWD_DEFINED__
#define __IMimePropertySchema_FWD_DEFINED__
typedef interface IMimePropertySchema IMimePropertySchema;
#endif

#ifndef __IMimePropertySet_FWD_DEFINED__
#define __IMimePropertySet_FWD_DEFINED__
typedef interface IMimePropertySet IMimePropertySet;
#endif

#ifndef __IMimeAddressTable_FWD_DEFINED__
#define __IMimeAddressTable_FWD_DEFINED__
typedef interface IMimeAddressTable IMimeAddressTable;
#endif

#ifndef __IMimeWebDocument_FWD_DEFINED__
#define __IMimeWebDocument_FWD_DEFINED__
typedef interface IMimeWebDocument IMimeWebDocument;
#endif

#ifndef __IMimeBody_FWD_DEFINED__
#define __IMimeBody_FWD_DEFINED__
typedef interface IMimeBody IMimeBody;
#endif

#ifndef __IMimeMessageTree_FWD_DEFINED__
#define __IMimeMessageTree_FWD_DEFINED__
typedef interface IMimeMessageTree IMimeMessageTree;
#endif

#ifndef __IMimeMessage_FWD_DEFINED__
#define __IMimeMessage_FWD_DEFINED__
typedef interface IMimeMessage IMimeMessage;
#endif

#ifndef __IMimeMessageCallback_FWD_DEFINED__
#define __IMimeMessageCallback_FWD_DEFINED__
typedef interface IMimeMessageCallback IMimeMessageCallback;
#endif

#ifndef __IPersistMime_FWD_DEFINED__
#define __IPersistMime_FWD_DEFINED__
typedef interface IPersistMime IPersistMime;
#endif

#ifndef __IMimeMessageParts_FWD_DEFINED__
#define __IMimeMessageParts_FWD_DEFINED__
typedef interface IMimeMessageParts IMimeMessageParts;
#endif

#ifndef __IMimeEnumHeaderRows_FWD_DEFINED__
#define __IMimeEnumHeaderRows_FWD_DEFINED__
typedef interface IMimeEnumHeaderRows IMimeEnumHeaderRows;
#endif

#ifndef __IMimeEnumProperties_FWD_DEFINED__
#define __IMimeEnumProperties_FWD_DEFINED__
typedef interface IMimeEnumProperties IMimeEnumProperties;
#endif

#ifndef __IMimeEnumAddressTypes_FWD_DEFINED__
#define __IMimeEnumAddressTypes_FWD_DEFINED__
typedef interface IMimeEnumAddressTypes IMimeEnumAddressTypes;
#endif

#ifndef __IMimeEnumMessageParts_FWD_DEFINED__
#define __IMimeEnumMessageParts_FWD_DEFINED__
typedef interface IMimeEnumMessageParts IMimeEnumMessageParts;
#endif

#ifndef __IHashTable_FWD_DEFINED__
#define __IHashTable_FWD_DEFINED__
typedef interface IHashTable IHashTable;
#endif

#ifndef __IMimeAllocator_FWD_DEFINED__
#define __IMimeAllocator_FWD_DEFINED__
typedef interface IMimeAllocator IMimeAllocator;
#endif

#ifndef __IMimeObjResolver_FWD_DEFINED__
#define __IMimeObjResolver_FWD_DEFINED__
typedef interface IMimeObjResolver IMimeObjResolver;
#endif

#ifndef __IFontCache_FWD_DEFINED__
#define __IFontCache_FWD_DEFINED__
typedef interface IFontCache IFontCache;
#endif

#ifndef __IFontCacheNotify_FWD_DEFINED__
#define __IFontCacheNotify_FWD_DEFINED__
typedef interface IFontCacheNotify IFontCacheNotify;
#endif

#ifndef __IMimeEditTag_FWD_DEFINED__
#define __IMimeEditTag_FWD_DEFINED__
typedef interface IMimeEditTag IMimeEditTag;
#endif

#ifndef __IMimeEditTagCollection_FWD_DEFINED__
#define __IMimeEditTagCollection_FWD_DEFINED__
typedef interface IMimeEditTagCollection IMimeEditTagCollection;
#endif

#ifndef __IMimeSecurityCallback_FWD_DEFINED__
#define __IMimeSecurityCallback_FWD_DEFINED__
typedef interface IMimeSecurityCallback IMimeSecurityCallback;
#endif

/* Headers for imported files */

#include <ocidl.h>
#include <objidl.h>
#include <propidl.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __IMimeMessageCallback_FWD_DEFINED__
#define __IMimeMessageCallback_FWD_DEFINED__
typedef interface IMimeMessageCallback IMimeMessageCallback;
#endif

#ifndef __IMimeEnumAddressTypes_FWD_DEFINED__
#define __IMimeEnumAddressTypes_FWD_DEFINED__
typedef interface IMimeEnumAddressTypes IMimeEnumAddressTypes;
#endif

#ifndef __IMimeMessageParts_FWD_DEFINED__
#define __IMimeMessageParts_FWD_DEFINED__
typedef interface IMimeMessageParts IMimeMessageParts;
#endif

#ifndef __IMimeMessageTree_FWD_DEFINED__
#define __IMimeMessageTree_FWD_DEFINED__
typedef interface IMimeMessageTree IMimeMessageTree;
#endif

#ifndef __IMimeBody_FWD_DEFINED__
#define __IMimeBody_FWD_DEFINED__
typedef interface IMimeBody IMimeBody;
#endif

#ifndef __IMimeEnumProperties_FWD_DEFINED__
#define __IMimeEnumProperties_FWD_DEFINED__
typedef interface IMimeEnumProperties IMimeEnumProperties;
#endif

DEFINE_GUID(CLSID_IMimeBody,      0xfd853cdb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IMimeAllocator, 0xfd853cdd, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IMimeMessage,   0xfd853ce3, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IMimeSecurity,  0xfd853cde, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IVirtualStream, 0xfd853cdf, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
#define MIME_E_REG_CREATE_KEY         0x800cce01
#define MIME_E_REG_QUERY_INFO         0x800cce02
#define MIME_E_INVALID_ENCTYPE        0x800cce03
#define MIME_E_BOUNDARY_MISMATCH      0x800cce04
#define MIME_E_NOT_FOUND              0x800cce05
#define MIME_E_NO_DATA                0x800cce05
#define MIME_E_BUFFER_TOO_SMALL       0x800cce06
#define MIME_E_INVALID_ITEM_FLAGS     0x800cce07
#define MIME_E_ONE_LINE_ITEME         0x800cce08
#define MIME_E_INVALID_HANDLE         0x800cce09
#define MIME_E_CHARSET_TRANSLATE      0x800cce0a
#define MIME_E_NOT_INITIALIZED        0x800cce0b
#define MIME_E_INVALID_CHARSET_TYPE   0x800cce31
#define MIME_E_INVALID_TEXT_TYPE      0x800cce38
#define MIME_E_SECURITY_NOOP          0x800cceb1
#define MIME_S_SECURITY_NOOP          0x000cceb1
typedef enum tagMIMEPROPID {
    PID_HDR_NEWSGROUP  = 2,
    PID_HDR_NEWSGROUPS = 3,
    PID_HDR_REFS       = 4,
    PID_HDR_SUBJECT    = 5,
    PID_HDR_FROM       = 6,
    PID_HDR_MESSAGEID  = 7,
    PID_HDR_RETURNPATH = 8,
    PID_HDR_RR         = 9,
    PID_HDR_RETRCPTO   = 10,
    PID_HDR_APPARTO    = 11,
    PID_HDR_DATE       = 12,
    PID_HDR_RECEIVED   = 13,
    PID_HDR_REPLYTO    = 14,
    PID_HDR_XMAILER    = 15,
    PID_HDR_BCC        = 16,
    PID_HDR_MIMEVER    = 17,
    PID_HDR_CNTTYPE    = 18,
    PID_HDR_CNTXFER    = 19,
    PID_HDR_CNTID      = 20,
    PID_HDR_CNTDESC    = 21,
    PID_HDR_CNTDISP    = 22,
    PID_HDR_CNTBASE    = 23,
    PID_HDR_CNTLOC     = 24,
    PID_HDR_TO         = 25,
    PID_HDR_PATH       = 26,
    PID_HDR_FOLLOWUPTO = 27,
    PID_HDR_EXPIRES    = 28,
    PID_HDR_CC         = 29,
    PID_HDR_SENDER     = 61,
    PID_HDR_INREPLYTO  = 77,
} MIMEPROPID;
#define TYPEDID_MASK                  ((ULONG)0xffff)
#define TYPEDID_TYPE(t)               ((VARTYPE)((t) & TYPEDID_MASK))
#define OID_HIDE_TNEF_ATTACHMENTS     (0x000e0000 | VT_BOOL)
#define OID_SECURITY_TYPE             (0x00180000 | VT_UI4)
#define OID_SECURITY_HWND_OWNER       (0x00320000 | VT_UI4)
#define OID_HEADER_RELOAD_TYPE        (0x00370000 | VT_UI4)
#define OID_SHOW_MACBINARY            (0x00390000 | VT_BOOL)

DEFINE_GUID(LIBID_MIMEOLE, 0xe4b28371, 0x83b0, 0x11d0, 0x82,0x59, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);

typedef void *HCHARSET;
typedef void *HBODY;
typedef void *HHEADERROW;
typedef HCHARSET *LPHCHARSET;
typedef HBODY *LPHBODY;
typedef HHEADERROW *LPHHEADERROW;
typedef DWORD TYPEDID;
typedef const PROPVARIANT *LPCPROPVARIANT;
typedef const BLOB *LPCBLOB;
typedef enum tagRELOADTYPE {
    RELOAD_HEADER_NONE = 0,
    RELOAD_HEADER_RESET = 1,
    RELOAD_HEADER_APPEND = 2,
    RELOAD_HEADER_REPLACE = 3
} RELOADTYPE;
typedef enum tagMIMESAVETYPE {
    SAVE_RFC822 = 0,
    SAVE_RFC1521 = 1
} MIMESAVETYPE;
typedef enum tagCSETAPPLYTYPE {
    CSET_APPLY_UNTAGGED = 0,
    CSET_APPLY_ALL = 1,
    CSET_APPLY_TAG_ALL = 2
} CSETAPPLYTYPE;
typedef enum tagENCODINGTYPE {
    IET_BINARY = 0,
    IET_BASE64 = 1,
    IET_UUENCODE = 2,
    IET_QP = 3,
    IET_7BIT = 4,
    IET_8BIT = 5,
    IET_INETCSET = 6,
    IET_UNICODE = 7,
    IET_RFC1522 = 8,
    IET_ENCODED = 9,
    IET_CURRENT = 10,
    IET_UNKNOWN = 11,
    IET_BINHEX40 = 12,
    IET_LAST = 13
} ENCODINGTYPE;
#define IET_DECODED (IET_BINARY)

#define CCHMAX_HEADER_LINE (1000)

/*****************************************************************************
 * IMimeInternational interface
 */
#ifndef __IMimeInternational_INTERFACE_DEFINED__
#define __IMimeInternational_INTERFACE_DEFINED__

typedef IMimeInternational *LPMIMEINTERNATIONAL;
typedef DWORD CODEPAGEID;
#define CP_USASCII (1252)

#define CP_UNICODE (1200)

#define CP_JAUTODETECT (50932)

#define CP_KAUTODETECT (50949)

#define CP_ISO2022JPESC (50221)

#define CP_ISO2022JPSIO (50222)

#define CCHMAX_CSET_NAME (128)

#define CCHMAX_LANG_NAME (128)

#define CCHMAX_FACE_NAME (128)

typedef struct tagINETCSETINFO {
    CHAR szName[128];
    HCHARSET hCharset;
    CODEPAGEID cpiWindows;
    CODEPAGEID cpiInternet;
    DWORD dwReserved1;
} INETCSETINFO;
typedef struct tagINETCSETINFO *LPINETCSETINFO;
typedef enum tagINETLANGMASK {
    ILM_FAMILY = 0x1,
    ILM_NAME = 0x2,
    ILM_BODYCSET = 0x4,
    ILM_HEADERCSET = 0x8,
    ILM_WEBCSET = 0x10,
    ILM_FIXEDFONT = 0x20,
    ILM_VARIABLEFONT = 0x40
} INETLANGMASK;
typedef struct tagCODEPAGEINFO {
    DWORD dwMask;
    CODEPAGEID cpiCodePage;
    BOOL fIsValidCodePage;
    ULONG ulMaxCharSize;
    BOOL fInternetCP;
    CODEPAGEID cpiFamily;
    CHAR szName[128];
    CHAR szBodyCset[128];
    CHAR szHeaderCset[128];
    CHAR szWebCset[128];
    CHAR szFixedFont[128];
    CHAR szVariableFont[128];
    ENCODINGTYPE ietNewsDefault;
    ENCODINGTYPE ietMailDefault;
    DWORD dwReserved1;
} CODEPAGEINFO;
typedef struct tagCODEPAGEINFO *LPCODEPAGEINFO;
typedef struct tagRFC1522INFO {
    BOOL fRfc1522Allowed;
    BOOL fRfc1522Used;
    BOOL fAllow8bit;
    HCHARSET hRfc1522Cset;
} RFC1522INFO;
typedef struct tagRFC1522INFO *LPRFC1522INFO;
typedef enum tagCHARSETTYPE {
    CHARSET_BODY = 0,
    CHARSET_HEADER = 1,
    CHARSET_WEB = 2
} CHARSETTYPE;
DEFINE_GUID(IID_IMimeInternational, 0xc5588349, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeInternational : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE SetDefaultCharset(
        HCHARSET hCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDefaultCharset(
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCodePageCharset(
        CODEPAGEID cpiCodePage,
        CHARSETTYPE ctCsetType,
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindCharset(
        LPCSTR pszCharset,
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCharsetInfo(
        HCHARSET hCharset,
        LPINETCSETINFO pCsetInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCodePageInfo(
        CODEPAGEID cpiCodePage,
        LPCODEPAGEINFO pCodePageInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE CanConvertCodePages(
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest) = 0;

    virtual HRESULT STDMETHODCALLTYPE DecodeHeader(
        HCHARSET hCharset,
        LPCSTR pszData,
        LPPROPVARIANT pDecoded,
        LPRFC1522INFO pRfc1522Info) = 0;

    virtual HRESULT STDMETHODCALLTYPE EncodeHeader(
        HCHARSET hCharset,
        LPPROPVARIANT pData,
        LPSTR *ppszEncoded,
        LPRFC1522INFO pRfc1522Info) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertBuffer(
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPBLOB pIn,
        LPBLOB pOut,
        ULONG *pcbRead) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConvertString(
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPPROPVARIANT pIn,
        LPPROPVARIANT pOut) = 0;

    virtual HRESULT STDMETHODCALLTYPE MLANG_ConvertInetReset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE MLANG_ConvertInetString(
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPCSTR pSource,
        int *pnSizeOfSource,
        LPSTR pDestination,
        int *pnDstSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE Rfc1522Decode(
        LPCSTR pszValue,
        LPSTR pszCharset,
        ULONG cchmax,
        LPSTR *ppszDecoded) = 0;

    virtual HRESULT STDMETHODCALLTYPE Rfc1522Encode(
        LPCSTR pszValue,
        HCHARSET hCharset,
        LPSTR *ppszEncoded) = 0;

};
#else
typedef struct IMimeInternationalVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeInternational* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeInternational* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeInternational* This);

    /*** IMimeInternational methods ***/
    HRESULT (STDMETHODCALLTYPE *SetDefaultCharset)(
        IMimeInternational* This,
        HCHARSET hCharset);

    HRESULT (STDMETHODCALLTYPE *GetDefaultCharset)(
        IMimeInternational* This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *GetCodePageCharset)(
        IMimeInternational* This,
        CODEPAGEID cpiCodePage,
        CHARSETTYPE ctCsetType,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *FindCharset)(
        IMimeInternational* This,
        LPCSTR pszCharset,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *GetCharsetInfo)(
        IMimeInternational* This,
        HCHARSET hCharset,
        LPINETCSETINFO pCsetInfo);

    HRESULT (STDMETHODCALLTYPE *GetCodePageInfo)(
        IMimeInternational* This,
        CODEPAGEID cpiCodePage,
        LPCODEPAGEINFO pCodePageInfo);

    HRESULT (STDMETHODCALLTYPE *CanConvertCodePages)(
        IMimeInternational* This,
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest);

    HRESULT (STDMETHODCALLTYPE *DecodeHeader)(
        IMimeInternational* This,
        HCHARSET hCharset,
        LPCSTR pszData,
        LPPROPVARIANT pDecoded,
        LPRFC1522INFO pRfc1522Info);

    HRESULT (STDMETHODCALLTYPE *EncodeHeader)(
        IMimeInternational* This,
        HCHARSET hCharset,
        LPPROPVARIANT pData,
        LPSTR *ppszEncoded,
        LPRFC1522INFO pRfc1522Info);

    HRESULT (STDMETHODCALLTYPE *ConvertBuffer)(
        IMimeInternational* This,
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPBLOB pIn,
        LPBLOB pOut,
        ULONG *pcbRead);

    HRESULT (STDMETHODCALLTYPE *ConvertString)(
        IMimeInternational* This,
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPPROPVARIANT pIn,
        LPPROPVARIANT pOut);

    HRESULT (STDMETHODCALLTYPE *MLANG_ConvertInetReset)(
        IMimeInternational* This);

    HRESULT (STDMETHODCALLTYPE *MLANG_ConvertInetString)(
        IMimeInternational* This,
        CODEPAGEID cpiSource,
        CODEPAGEID cpiDest,
        LPCSTR pSource,
        int *pnSizeOfSource,
        LPSTR pDestination,
        int *pnDstSize);

    HRESULT (STDMETHODCALLTYPE *Rfc1522Decode)(
        IMimeInternational* This,
        LPCSTR pszValue,
        LPSTR pszCharset,
        ULONG cchmax,
        LPSTR *ppszDecoded);

    HRESULT (STDMETHODCALLTYPE *Rfc1522Encode)(
        IMimeInternational* This,
        LPCSTR pszValue,
        HCHARSET hCharset,
        LPSTR *ppszEncoded);

    END_INTERFACE
} IMimeInternationalVtbl;
interface IMimeInternational {
    CONST_VTBL IMimeInternationalVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeInternational_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeInternational_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeInternational_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeInternational methods ***/
#define IMimeInternational_SetDefaultCharset(This,hCharset) (This)->lpVtbl->SetDefaultCharset(This,hCharset)
#define IMimeInternational_GetDefaultCharset(This,phCharset) (This)->lpVtbl->GetDefaultCharset(This,phCharset)
#define IMimeInternational_GetCodePageCharset(This,cpiCodePage,ctCsetType,phCharset) (This)->lpVtbl->GetCodePageCharset(This,cpiCodePage,ctCsetType,phCharset)
#define IMimeInternational_FindCharset(This,pszCharset,phCharset) (This)->lpVtbl->FindCharset(This,pszCharset,phCharset)
#define IMimeInternational_GetCharsetInfo(This,hCharset,pCsetInfo) (This)->lpVtbl->GetCharsetInfo(This,hCharset,pCsetInfo)
#define IMimeInternational_GetCodePageInfo(This,cpiCodePage,pCodePageInfo) (This)->lpVtbl->GetCodePageInfo(This,cpiCodePage,pCodePageInfo)
#define IMimeInternational_CanConvertCodePages(This,cpiSource,cpiDest) (This)->lpVtbl->CanConvertCodePages(This,cpiSource,cpiDest)
#define IMimeInternational_DecodeHeader(This,hCharset,pszData,pDecoded,pRfc1522Info) (This)->lpVtbl->DecodeHeader(This,hCharset,pszData,pDecoded,pRfc1522Info)
#define IMimeInternational_EncodeHeader(This,hCharset,pData,ppszEncoded,pRfc1522Info) (This)->lpVtbl->EncodeHeader(This,hCharset,pData,ppszEncoded,pRfc1522Info)
#define IMimeInternational_ConvertBuffer(This,cpiSource,cpiDest,pIn,pOut,pcbRead) (This)->lpVtbl->ConvertBuffer(This,cpiSource,cpiDest,pIn,pOut,pcbRead)
#define IMimeInternational_ConvertString(This,cpiSource,cpiDest,pIn,pOut) (This)->lpVtbl->ConvertString(This,cpiSource,cpiDest,pIn,pOut)
#define IMimeInternational_MLANG_ConvertInetReset(This) (This)->lpVtbl->MLANG_ConvertInetReset(This)
#define IMimeInternational_MLANG_ConvertInetString(This,cpiSource,cpiDest,pSource,pnSizeOfSource,pDestination,pnDstSize) (This)->lpVtbl->MLANG_ConvertInetString(This,cpiSource,cpiDest,pSource,pnSizeOfSource,pDestination,pnDstSize)
#define IMimeInternational_Rfc1522Decode(This,pszValue,pszCharset,cchmax,ppszDecoded) (This)->lpVtbl->Rfc1522Decode(This,pszValue,pszCharset,cchmax,ppszDecoded)
#define IMimeInternational_Rfc1522Encode(This,pszValue,hCharset,ppszEncoded) (This)->lpVtbl->Rfc1522Encode(This,pszValue,hCharset,ppszEncoded)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMimeInternational_SetDefaultCharset_Proxy(
    IMimeInternational* This,
    HCHARSET hCharset);
void __RPC_STUB IMimeInternational_SetDefaultCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_GetDefaultCharset_Proxy(
    IMimeInternational* This,
    LPHCHARSET phCharset);
void __RPC_STUB IMimeInternational_GetDefaultCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_GetCodePageCharset_Proxy(
    IMimeInternational* This,
    CODEPAGEID cpiCodePage,
    CHARSETTYPE ctCsetType,
    LPHCHARSET phCharset);
void __RPC_STUB IMimeInternational_GetCodePageCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_FindCharset_Proxy(
    IMimeInternational* This,
    LPCSTR pszCharset,
    LPHCHARSET phCharset);
void __RPC_STUB IMimeInternational_FindCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_GetCharsetInfo_Proxy(
    IMimeInternational* This,
    HCHARSET hCharset,
    LPINETCSETINFO pCsetInfo);
void __RPC_STUB IMimeInternational_GetCharsetInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_GetCodePageInfo_Proxy(
    IMimeInternational* This,
    CODEPAGEID cpiCodePage,
    LPCODEPAGEINFO pCodePageInfo);
void __RPC_STUB IMimeInternational_GetCodePageInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_CanConvertCodePages_Proxy(
    IMimeInternational* This,
    CODEPAGEID cpiSource,
    CODEPAGEID cpiDest);
void __RPC_STUB IMimeInternational_CanConvertCodePages_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_DecodeHeader_Proxy(
    IMimeInternational* This,
    HCHARSET hCharset,
    LPCSTR pszData,
    LPPROPVARIANT pDecoded,
    LPRFC1522INFO pRfc1522Info);
void __RPC_STUB IMimeInternational_DecodeHeader_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_EncodeHeader_Proxy(
    IMimeInternational* This,
    HCHARSET hCharset,
    LPPROPVARIANT pData,
    LPSTR *ppszEncoded,
    LPRFC1522INFO pRfc1522Info);
void __RPC_STUB IMimeInternational_EncodeHeader_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_ConvertBuffer_Proxy(
    IMimeInternational* This,
    CODEPAGEID cpiSource,
    CODEPAGEID cpiDest,
    LPBLOB pIn,
    LPBLOB pOut,
    ULONG *pcbRead);
void __RPC_STUB IMimeInternational_ConvertBuffer_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_ConvertString_Proxy(
    IMimeInternational* This,
    CODEPAGEID cpiSource,
    CODEPAGEID cpiDest,
    LPPROPVARIANT pIn,
    LPPROPVARIANT pOut);
void __RPC_STUB IMimeInternational_ConvertString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_MLANG_ConvertInetReset_Proxy(
    IMimeInternational* This);
void __RPC_STUB IMimeInternational_MLANG_ConvertInetReset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_MLANG_ConvertInetString_Proxy(
    IMimeInternational* This,
    CODEPAGEID cpiSource,
    CODEPAGEID cpiDest,
    LPCSTR pSource,
    int *pnSizeOfSource,
    LPSTR pDestination,
    int *pnDstSize);
void __RPC_STUB IMimeInternational_MLANG_ConvertInetString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_Rfc1522Decode_Proxy(
    IMimeInternational* This,
    LPCSTR pszValue,
    LPSTR pszCharset,
    ULONG cchmax,
    LPSTR *ppszDecoded);
void __RPC_STUB IMimeInternational_Rfc1522Decode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeInternational_Rfc1522Encode_Proxy(
    IMimeInternational* This,
    LPCSTR pszValue,
    HCHARSET hCharset,
    LPSTR *ppszEncoded);
void __RPC_STUB IMimeInternational_Rfc1522Encode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMimeInternational_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeSecurity interface
 */
#ifndef __IMimeSecurity_INTERFACE_DEFINED__
#define __IMimeSecurity_INTERFACE_DEFINED__

typedef IMimeSecurity *LPMIMESECURITY;
#ifdef __WINE_WINCRYPT_H
typedef PCCERT_CONTEXT PCX509CERT;
#else
typedef const void *PCX509CERT;
typedef void *HCERTSTORE;
#endif
typedef BLOB THUMBBLOB;
typedef void *HCAPICERTSTORE;
#define MST_NONE             0x00000000
#define MST_THIS_SIGN        0x00000001
#define MST_THIS_ENCRYPT     0x00000002
#define MST_BLOB_FLAG        0x00000004
#define MST_THIS_BLOBSIGN    (MST_BLOB_FLAG | MST_THIS_SIGN)
#define MST_CHILD_SIGN       0x00000100
#define MST_CHILD_ENCRYPT    0x00000200
#define MST_SUBMSG_SIGN      0x00001000
#define MST_SUBMSG_ENCRYPT   0x00002000
#define MST_RECEIPT_REQUEST  0x00010000
#define MST_CLASS_SMIME_V1   0x00000000
#define MST_CLASS_PGP        0x01000000
typedef enum tagCERTSTATE {
    CERTIFICATE_OK = 0,
    CERTIFICATE_NOT_PRESENT = 1,
    CERTIFICATE_EXPIRED = 2,
    CERTIFICATE_CHAIN_TOO_LONG = 3,
    CERTIFICATE_MISSING_ISSUER = 4,
    CERTIFICATE_CRL_LISTED = 5,
    CERTIFICATE_NOT_TRUSTED = 6,
    CERTIFICATE_INVALID = 7,
    CERTIFICATE_ERROR = 8,
    CERTIFICATE_NOPRINT = 9,
    CERTIFICATE_UNKNOWN = 10
} CERTSTATE;
typedef enum tagCERTNAMETYPE {
    SIMPLE = 0,
    OID = 1,
    X500 = 2
} CERTNAMETYPE;
typedef enum tagCERTDATAID {
    CDID_EMAIL = 0,
    CDID_MAX = 1
} CERTDATAID;
typedef struct tagX509CERTRESULT {
    DWORD cEntries;
    CERTSTATE *rgcs;
    PCX509CERT *rgpCert;
} X509CERTRESULT;
typedef struct tagX509CERTRESULT *PX509CERTRESULT;
typedef const X509CERTRESULT *PCX509CERTRESULT;
DEFINE_GUID(IID_IMimeSecurity, 0xc5588353, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeSecurity : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE InitNew(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CheckInit(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE EncodeMessage(
        IMimeMessageTree *pTree,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE EncodeBody(
        IMimeMessageTree *pTree,
        HBODY hEncodeRoot,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE DecodeMessage(
        IMimeMessageTree *pTree,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE DecodeBody(
        IMimeMessageTree *pTree,
        HBODY hDecodeRoot,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumCertificates(
        HCAPICERTSTORE hc,
        DWORD dwUsage,
        PCX509CERT pPrev,
        PCX509CERT *ppCert) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCertificateName(
        const PCX509CERT pX509Cert,
        const CERTNAMETYPE cn,
        LPSTR *ppszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMessageType(
        const HWND hwndParent,
        IMimeBody *pBody,
        DWORD *pdwSecType) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCertData(
        const PCX509CERT pX509Cert,
        const CERTDATAID dataid,
        LPPROPVARIANT pValue) = 0;

};
#else
typedef struct IMimeSecurityVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeSecurity* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeSecurity* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeSecurity* This);

    /*** IMimeSecurity methods ***/
    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimeSecurity* This);

    HRESULT (STDMETHODCALLTYPE *CheckInit)(
        IMimeSecurity* This);

    HRESULT (STDMETHODCALLTYPE *EncodeMessage)(
        IMimeSecurity* This,
        IMimeMessageTree *pTree,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *EncodeBody)(
        IMimeSecurity* This,
        IMimeMessageTree *pTree,
        HBODY hEncodeRoot,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *DecodeMessage)(
        IMimeSecurity* This,
        IMimeMessageTree *pTree,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *DecodeBody)(
        IMimeSecurity* This,
        IMimeMessageTree *pTree,
        HBODY hDecodeRoot,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *EnumCertificates)(
        IMimeSecurity* This,
        HCAPICERTSTORE hc,
        DWORD dwUsage,
        PCX509CERT pPrev,
        PCX509CERT *ppCert);

    HRESULT (STDMETHODCALLTYPE *GetCertificateName)(
        IMimeSecurity* This,
        const PCX509CERT pX509Cert,
        const CERTNAMETYPE cn,
        LPSTR *ppszName);

    HRESULT (STDMETHODCALLTYPE *GetMessageType)(
        IMimeSecurity* This,
        const HWND hwndParent,
        IMimeBody *pBody,
        DWORD *pdwSecType);

    HRESULT (STDMETHODCALLTYPE *GetCertData)(
        IMimeSecurity* This,
        const PCX509CERT pX509Cert,
        const CERTDATAID dataid,
        LPPROPVARIANT pValue);

    END_INTERFACE
} IMimeSecurityVtbl;
interface IMimeSecurity {
    CONST_VTBL IMimeSecurityVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeSecurity_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeSecurity_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeSecurity_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeSecurity methods ***/
#define IMimeSecurity_InitNew(This) (This)->lpVtbl->InitNew(This)
#define IMimeSecurity_CheckInit(This) (This)->lpVtbl->CheckInit(This)
#define IMimeSecurity_EncodeMessage(This,pTree,dwFlags) (This)->lpVtbl->EncodeMessage(This,pTree,dwFlags)
#define IMimeSecurity_EncodeBody(This,pTree,hEncodeRoot,dwFlags) (This)->lpVtbl->EncodeBody(This,pTree,hEncodeRoot,dwFlags)
#define IMimeSecurity_DecodeMessage(This,pTree,dwFlags) (This)->lpVtbl->DecodeMessage(This,pTree,dwFlags)
#define IMimeSecurity_DecodeBody(This,pTree,hDecodeRoot,dwFlags) (This)->lpVtbl->DecodeBody(This,pTree,hDecodeRoot,dwFlags)
#define IMimeSecurity_EnumCertificates(This,hc,dwUsage,pPrev,ppCert) (This)->lpVtbl->EnumCertificates(This,hc,dwUsage,pPrev,ppCert)
#define IMimeSecurity_GetCertificateName(This,pX509Cert,cn,ppszName) (This)->lpVtbl->GetCertificateName(This,pX509Cert,cn,ppszName)
#define IMimeSecurity_GetMessageType(This,hwndParent,pBody,pdwSecType) (This)->lpVtbl->GetMessageType(This,hwndParent,pBody,pdwSecType)
#define IMimeSecurity_GetCertData(This,pX509Cert,dataid,pValue) (This)->lpVtbl->GetCertData(This,pX509Cert,dataid,pValue)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMimeSecurity_InitNew_Proxy(
    IMimeSecurity* This);
void __RPC_STUB IMimeSecurity_InitNew_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeSecurity_CheckInit_Proxy(
    IMimeSecurity* This);
void __RPC_STUB IMimeSecurity_CheckInit_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeSecurity_EncodeMessage_Proxy(
    IMimeSecurity* This,
    IMimeMessageTree *pTree,
    DWORD dwFlags);
void __RPC_STUB IMimeSecurity_EncodeMessage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeSecurity_EncodeBody_Proxy(
    IMimeSecurity* This,
    IMimeMessageTree *pTree,
    HBODY hEncodeRoot,
    DWORD dwFlags);
void __RPC_STUB IMimeSecurity_EncodeBody_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeSecurity_DecodeMessage_Proxy(
    IMimeSecurity* This,
    IMimeMessageTree *pTree,
    DWORD dwFlags);
void __RPC_STUB IMimeSecurity_DecodeMessage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeSecurity_DecodeBody_Proxy(
    IMimeSecurity* This,
    IMimeMessageTree *pTree,
    HBODY hDecodeRoot,
    DWORD dwFlags);
void __RPC_STUB IMimeSecurity_DecodeBody_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeSecurity_EnumCertificates_Proxy(
    IMimeSecurity* This,
    HCAPICERTSTORE hc,
    DWORD dwUsage,
    PCX509CERT pPrev,
    PCX509CERT *ppCert);
void __RPC_STUB IMimeSecurity_EnumCertificates_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeSecurity_GetCertificateName_Proxy(
    IMimeSecurity* This,
    const PCX509CERT pX509Cert,
    const CERTNAMETYPE cn,
    LPSTR *ppszName);
void __RPC_STUB IMimeSecurity_GetCertificateName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeSecurity_GetMessageType_Proxy(
    IMimeSecurity* This,
    const HWND hwndParent,
    IMimeBody *pBody,
    DWORD *pdwSecType);
void __RPC_STUB IMimeSecurity_GetMessageType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeSecurity_GetCertData_Proxy(
    IMimeSecurity* This,
    const PCX509CERT pX509Cert,
    const CERTDATAID dataid,
    LPPROPVARIANT pValue);
void __RPC_STUB IMimeSecurity_GetCertData_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMimeSecurity_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeHeaderTable interface
 */
#ifndef __IMimeHeaderTable_INTERFACE_DEFINED__
#define __IMimeHeaderTable_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeHeaderTable, 0xfd853cd1, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeHeaderTable : public IPersistStream
{
};
#else
typedef struct IMimeHeaderTableVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeHeaderTable* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeHeaderTable* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeHeaderTable* This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimeHeaderTable* This,
        CLSID *pClassID);

    /*** IPersistStream methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimeHeaderTable* This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimeHeaderTable* This,
        IStream *pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimeHeaderTable* This,
        IStream *pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimeHeaderTable* This,
        ULARGE_INTEGER *pcbSize);

    END_INTERFACE
} IMimeHeaderTableVtbl;
interface IMimeHeaderTable {
    CONST_VTBL IMimeHeaderTableVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeHeaderTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeHeaderTable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeHeaderTable_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimeHeaderTable_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStream methods ***/
#define IMimeHeaderTable_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimeHeaderTable_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimeHeaderTable_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimeHeaderTable_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
#endif

#endif


#endif  /* __IMimeHeaderTable_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimePropertySchema interface
 */
#ifndef __IMimePropertySchema_INTERFACE_DEFINED__
#define __IMimePropertySchema_INTERFACE_DEFINED__

typedef enum tagMIMEPROPFLAGS {
    MPF_INETCSET = 0x1,
    MPF_RFC1522 = 0x2,
    MPF_ADDRESS = 0x4,
    MPF_HASPARAMS = 0x8,
    MPF_MIME = 0x10,
    MPF_READONLY = 0x20
} MIMEPROPFLAGS;
DEFINE_GUID(IID_IMimePropertySchema, 0xfd853cec, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimePropertySchema : public IUnknown
{
};
#else
typedef struct IMimePropertySchemaVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimePropertySchema* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimePropertySchema* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimePropertySchema* This);

    END_INTERFACE
} IMimePropertySchemaVtbl;
interface IMimePropertySchema {
    CONST_VTBL IMimePropertySchemaVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimePropertySchema_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimePropertySchema_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimePropertySchema_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimePropertySchema_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimePropertySet interface
 */
#ifndef __IMimePropertySet_INTERFACE_DEFINED__
#define __IMimePropertySet_INTERFACE_DEFINED__

typedef IMimePropertySet *LPMIMEPROPERTYSET;
#define PDF_ENCODED              0x00000001
#define PDF_NAMEINDATA           0x00000002
#define PDF_HEADERFORMAT        (0x00000004 | PDF_ENCODED)
#define PDF_NOCOMMENTS           0x00000008
#define PDF_SAVENOENCODE         0x00000010
#define PDF_VECTOR               0x00000020
typedef struct tagMIMEPARAMINFO {
    LPSTR pszName;
    LPSTR pszData;
} MIMEPARAMINFO;
typedef struct tagMIMEPARAMINFO *LPMIMEPARAMINFO;
typedef enum tagPROPINFOMASK {
    PIM_CHARSET = 0x1,
    PIM_ENCODINGTYPE = 0x2,
    PIM_ROWNUMBER = 0x4,
    PIM_FLAGS = 0x8,
    PIM_PROPID = 0x10,
    PIM_VALUES = 0x20,
    PIM_VTDEFAULT = 0x40,
    PIM_VTCURRENT = 0x80
} PROPINFOMASK;
typedef struct tagMIMEPROPINFO {
    DWORD dwMask;
    HCHARSET hCharset;
    ENCODINGTYPE ietEncoding;
    DWORD dwRowNumber;
    DWORD dwFlags;
    DWORD dwPropId;
    DWORD cValues;
    VARTYPE vtDefault;
    VARTYPE vtCurrent;
} MIMEPROPINFO;
typedef struct tagMIMEPROPINFO *LPMIMEPROPINFO;
typedef const MIMEPROPINFO *LPCMIMEPROPINFO;
#ifdef WINE_NO_UNICODE_MACROS
#undef GetProp
#undef SetProp
#undef EnumProps
#endif
#define EPF_NONAME 0x00000001
DEFINE_GUID(IID_IMimePropertySet, 0xfd853cd3, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimePropertySet : public IPersistStreamInit
{
    virtual HRESULT STDMETHODCALLTYPE GetPropInfo(
        LPCSTR pszName,
        LPMIMEPROPINFO pInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPropInfo(
        LPCSTR pszName,
        LPCMIMEPROPINFO pInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE AppendProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteProp(
        LPCSTR pszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyProps(
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet) = 0;

    virtual HRESULT STDMETHODCALLTYPE MoveProps(
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteExcept(
        ULONG cNames,
        LPCSTR *prgszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryProp(
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCharset(
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCharset(
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetParameters(
        LPCSTR pszName,
        ULONG *pcParams,
        LPMIMEPARAMINFO *pprgParam) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsContentType(
        LPCSTR pszPriType,
        LPCSTR pszSubType) = 0;

    virtual HRESULT STDMETHODCALLTYPE BindToObject(
        REFIID riid,
        void **ppvObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IMimePropertySet **ppPropertySet) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOption(
        const TYPEDID oid,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOption(
        const TYPEDID oid,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumProps(
        DWORD dwFlags,
        IMimeEnumProperties **ppEnum) = 0;

};
#else
typedef struct IMimePropertySetVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimePropertySet* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimePropertySet* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimePropertySet* This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimePropertySet* This,
        CLSID *pClassID);

    /*** IPersistStreamInit methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimePropertySet* This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimePropertySet* This,
        LPSTREAM pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimePropertySet* This,
        LPSTREAM pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimePropertySet* This,
        ULARGE_INTEGER *pcbSize);

    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimePropertySet* This);

    /*** IMimePropertySet methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPropInfo)(
        IMimePropertySet* This,
        LPCSTR pszName,
        LPMIMEPROPINFO pInfo);

    HRESULT (STDMETHODCALLTYPE *SetPropInfo)(
        IMimePropertySet* This,
        LPCSTR pszName,
        LPCMIMEPROPINFO pInfo);

    HRESULT (STDMETHODCALLTYPE *GetProp)(
        IMimePropertySet* This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetProp)(
        IMimePropertySet* This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *AppendProp)(
        IMimePropertySet* This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteProp)(
        IMimePropertySet* This,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *CopyProps)(
        IMimePropertySet* This,
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet);

    HRESULT (STDMETHODCALLTYPE *MoveProps)(
        IMimePropertySet* This,
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet);

    HRESULT (STDMETHODCALLTYPE *DeleteExcept)(
        IMimePropertySet* This,
        ULONG cNames,
        LPCSTR *prgszName);

    HRESULT (STDMETHODCALLTYPE *QueryProp)(
        IMimePropertySet* This,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetCharset)(
        IMimePropertySet* This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *SetCharset)(
        IMimePropertySet* This,
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype);

    HRESULT (STDMETHODCALLTYPE *GetParameters)(
        IMimePropertySet* This,
        LPCSTR pszName,
        ULONG *pcParams,
        LPMIMEPARAMINFO *pprgParam);

    HRESULT (STDMETHODCALLTYPE *IsContentType)(
        IMimePropertySet* This,
        LPCSTR pszPriType,
        LPCSTR pszSubType);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimePropertySet* This,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMimePropertySet* This,
        IMimePropertySet **ppPropertySet);

    HRESULT (STDMETHODCALLTYPE *SetOption)(
        IMimePropertySet* This,
        const TYPEDID oid,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *GetOption)(
        IMimePropertySet* This,
        const TYPEDID oid,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *EnumProps)(
        IMimePropertySet* This,
        DWORD dwFlags,
        IMimeEnumProperties **ppEnum);

    END_INTERFACE
} IMimePropertySetVtbl;
interface IMimePropertySet {
    CONST_VTBL IMimePropertySetVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimePropertySet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimePropertySet_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimePropertySet_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimePropertySet_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStreamInit methods ***/
#define IMimePropertySet_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimePropertySet_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimePropertySet_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimePropertySet_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
#define IMimePropertySet_InitNew(This) (This)->lpVtbl->InitNew(This)
/*** IMimePropertySet methods ***/
#define IMimePropertySet_GetPropInfo(This,pszName,pInfo) (This)->lpVtbl->GetPropInfo(This,pszName,pInfo)
#define IMimePropertySet_SetPropInfo(This,pszName,pInfo) (This)->lpVtbl->SetPropInfo(This,pszName,pInfo)
#define IMimePropertySet_GetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->GetProp(This,pszName,dwFlags,pValue)
#define IMimePropertySet_SetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->SetProp(This,pszName,dwFlags,pValue)
#define IMimePropertySet_AppendProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->AppendProp(This,pszName,dwFlags,pValue)
#define IMimePropertySet_DeleteProp(This,pszName) (This)->lpVtbl->DeleteProp(This,pszName)
#define IMimePropertySet_CopyProps(This,cNames,prgszName,pPropertySet) (This)->lpVtbl->CopyProps(This,cNames,prgszName,pPropertySet)
#define IMimePropertySet_MoveProps(This,cNames,prgszName,pPropertySet) (This)->lpVtbl->MoveProps(This,cNames,prgszName,pPropertySet)
#define IMimePropertySet_DeleteExcept(This,cNames,prgszName) (This)->lpVtbl->DeleteExcept(This,cNames,prgszName)
#define IMimePropertySet_QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimePropertySet_GetCharset(This,phCharset) (This)->lpVtbl->GetCharset(This,phCharset)
#define IMimePropertySet_SetCharset(This,hCharset,applytype) (This)->lpVtbl->SetCharset(This,hCharset,applytype)
#define IMimePropertySet_GetParameters(This,pszName,pcParams,pprgParam) (This)->lpVtbl->GetParameters(This,pszName,pcParams,pprgParam)
#define IMimePropertySet_IsContentType(This,pszPriType,pszSubType) (This)->lpVtbl->IsContentType(This,pszPriType,pszSubType)
#define IMimePropertySet_BindToObject(This,riid,ppvObject) (This)->lpVtbl->BindToObject(This,riid,ppvObject)
#define IMimePropertySet_Clone(This,ppPropertySet) (This)->lpVtbl->Clone(This,ppPropertySet)
#define IMimePropertySet_SetOption(This,oid,pValue) (This)->lpVtbl->SetOption(This,oid,pValue)
#define IMimePropertySet_GetOption(This,oid,pValue) (This)->lpVtbl->GetOption(This,oid,pValue)
#define IMimePropertySet_EnumProps(This,dwFlags,ppEnum) (This)->lpVtbl->EnumProps(This,dwFlags,ppEnum)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMimePropertySet_GetPropInfo_Proxy(
    IMimePropertySet* This,
    LPCSTR pszName,
    LPMIMEPROPINFO pInfo);
void __RPC_STUB IMimePropertySet_GetPropInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_SetPropInfo_Proxy(
    IMimePropertySet* This,
    LPCSTR pszName,
    LPCMIMEPROPINFO pInfo);
void __RPC_STUB IMimePropertySet_SetPropInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_GetProp_Proxy(
    IMimePropertySet* This,
    LPCSTR pszName,
    DWORD dwFlags,
    LPPROPVARIANT pValue);
void __RPC_STUB IMimePropertySet_GetProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_SetProp_Proxy(
    IMimePropertySet* This,
    LPCSTR pszName,
    DWORD dwFlags,
    LPCPROPVARIANT pValue);
void __RPC_STUB IMimePropertySet_SetProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_AppendProp_Proxy(
    IMimePropertySet* This,
    LPCSTR pszName,
    DWORD dwFlags,
    LPPROPVARIANT pValue);
void __RPC_STUB IMimePropertySet_AppendProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_DeleteProp_Proxy(
    IMimePropertySet* This,
    LPCSTR pszName);
void __RPC_STUB IMimePropertySet_DeleteProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_CopyProps_Proxy(
    IMimePropertySet* This,
    ULONG cNames,
    LPCSTR *prgszName,
    IMimePropertySet *pPropertySet);
void __RPC_STUB IMimePropertySet_CopyProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_MoveProps_Proxy(
    IMimePropertySet* This,
    ULONG cNames,
    LPCSTR *prgszName,
    IMimePropertySet *pPropertySet);
void __RPC_STUB IMimePropertySet_MoveProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_DeleteExcept_Proxy(
    IMimePropertySet* This,
    ULONG cNames,
    LPCSTR *prgszName);
void __RPC_STUB IMimePropertySet_DeleteExcept_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_QueryProp_Proxy(
    IMimePropertySet* This,
    LPCSTR pszName,
    LPCSTR pszCriteria,
    boolean fSubString,
    boolean fCaseSensitive);
void __RPC_STUB IMimePropertySet_QueryProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_GetCharset_Proxy(
    IMimePropertySet* This,
    LPHCHARSET phCharset);
void __RPC_STUB IMimePropertySet_GetCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_SetCharset_Proxy(
    IMimePropertySet* This,
    HCHARSET hCharset,
    CSETAPPLYTYPE applytype);
void __RPC_STUB IMimePropertySet_SetCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_GetParameters_Proxy(
    IMimePropertySet* This,
    LPCSTR pszName,
    ULONG *pcParams,
    LPMIMEPARAMINFO *pprgParam);
void __RPC_STUB IMimePropertySet_GetParameters_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_IsContentType_Proxy(
    IMimePropertySet* This,
    LPCSTR pszPriType,
    LPCSTR pszSubType);
void __RPC_STUB IMimePropertySet_IsContentType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_BindToObject_Proxy(
    IMimePropertySet* This,
    REFIID riid,
    void **ppvObject);
void __RPC_STUB IMimePropertySet_BindToObject_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_Clone_Proxy(
    IMimePropertySet* This,
    IMimePropertySet **ppPropertySet);
void __RPC_STUB IMimePropertySet_Clone_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_SetOption_Proxy(
    IMimePropertySet* This,
    const TYPEDID oid,
    LPCPROPVARIANT pValue);
void __RPC_STUB IMimePropertySet_SetOption_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_GetOption_Proxy(
    IMimePropertySet* This,
    const TYPEDID oid,
    LPPROPVARIANT pValue);
void __RPC_STUB IMimePropertySet_GetOption_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimePropertySet_EnumProps_Proxy(
    IMimePropertySet* This,
    DWORD dwFlags,
    IMimeEnumProperties **ppEnum);
void __RPC_STUB IMimePropertySet_EnumProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMimePropertySet_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeAddressTable interface
 */
#ifndef __IMimeAddressTable_INTERFACE_DEFINED__
#define __IMimeAddressTable_INTERFACE_DEFINED__

typedef IMimeAddressTable *LPMIMEADDRESSTABLE;
typedef void *HADDRESS;
typedef HADDRESS *LPHADDRESS;
typedef DWORD IADDRESSTYPE;
typedef enum tagADDRESSFORMAT {
    AFT_DISPLAY_FRIENDLY = 0,
    AFT_DISPLAY_EMAIL = 1,
    AFT_DISPLAY_BOTH = 2,
    AFT_RFC822_DECODED = 3,
    AFT_RFC822_ENCODED = 4,
    AFT_RFC822_TRANSMIT = 5
} ADDRESSFORMAT;
typedef struct tagADDRESSPROPS {
    DWORD dwProps;
    HADDRESS hAddress;
    ENCODINGTYPE ietFriendly;
    HCHARSET hCharset;
    DWORD dwAdrType;
    LPSTR pszFriendly;
    LPWSTR pwszReserved;
    LPSTR pszEmail;
    CERTSTATE certstate;
    THUMBBLOB tbSigning;
    THUMBBLOB tbEncryption;
    DWORD dwCookie;
    DWORD dwReserved1;
    DWORD dwReserved2;
} ADRESSPROPS;
typedef struct tagADDRESSPROPS *LPADDRESSPROPS;
typedef struct tagADDRESSLIST {
    ULONG cAdrs;
    LPADDRESSPROPS prgAdr;
} ADDRESSLIST;
typedef struct tagADDRESSLIST *LPADDRESSLIST;
DEFINE_GUID(IID_IMimeAddressTable, 0xc558834a, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeAddressTable : public IUnknown
{
};
#else
typedef struct IMimeAddressTableVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeAddressTable* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeAddressTable* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeAddressTable* This);

    END_INTERFACE
} IMimeAddressTableVtbl;
interface IMimeAddressTable {
    CONST_VTBL IMimeAddressTableVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeAddressTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeAddressTable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeAddressTable_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeAddressTable_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeWebDocument interface
 */
#ifndef __IMimeWebDocument_INTERFACE_DEFINED__
#define __IMimeWebDocument_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeWebDocument, 0xee519f11, 0x851a, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeWebDocument : public IUnknown
{
};
#else
typedef struct IMimeWebDocumentVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeWebDocument* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeWebDocument* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeWebDocument* This);

    END_INTERFACE
} IMimeWebDocumentVtbl;
interface IMimeWebDocument {
    CONST_VTBL IMimeWebDocumentVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeWebDocument_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeWebDocument_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeWebDocument_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeWebDocument_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeBody interface
 */
#ifndef __IMimeBody_INTERFACE_DEFINED__
#define __IMimeBody_INTERFACE_DEFINED__

typedef IMimeBody *LPMIMEBODY;
typedef enum tagIMSGBODYTYPE {
    IBT_SECURE = 0,
    IBT_ATTACHMENT = 1,
    IBT_EMPTY = 2,
    IBT_CSETTAGGED = 3,
    IBT_AUTOATTACH = 4
} IMSGBODYTYPE;
typedef struct tagBODYOFFSETS {
    DWORD cbBoundaryStart;
    DWORD cbHeaderStart;
    DWORD cbBodyStart;
    DWORD cbBodyEnd;
} BODYOFFSETS;
typedef struct tagBODYOFFSETS *LPBODYOFFSETS;
typedef struct tagTRANSMITINFO {
    ENCODINGTYPE ietCurrent;
    ENCODINGTYPE ietXmitMime;
    ENCODINGTYPE ietXmit822;
    ULONG cbLongestLine;
    ULONG cExtended;
    ULONG ulPercentExt;
    ULONG cbSize;
    ULONG cLines;
} TRANSMITINFO;
typedef struct tagTRANSMITINFO *LPTRANSMITINFO;
DEFINE_GUID(IID_IMimeBody, 0xc558834c, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeBody : public IMimePropertySet
{
    virtual HRESULT STDMETHODCALLTYPE IsType(
        IMSGBODYTYPE bodytype) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDisplayName(
        LPCSTR pszDisplay) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDisplayName(
        LPSTR *ppszDisplay) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOffsets(
        LPBODYOFFSETS pOffsets) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCurrentEncoding(
        ENCODINGTYPE *pietEncoding) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCurrentEncoding(
        ENCODINGTYPE ietEncoding) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEstimatedSize(
        ENCODINGTYPE ietEncoding,
        ULONG *pcbSize) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDataHere(
        ENCODINGTYPE ietEncoding,
        IStream *pStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetData(
        ENCODINGTYPE ietEncoding,
        IStream **ppStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetData(
        ENCODINGTYPE ietEncoding,
        LPCSTR pszPriType,
        LPCSTR pszSubType,
        REFIID riid,
        LPVOID pvObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE EmptyData(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyTo(
        IMimeBody *pBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTransmitInfo(
        LPTRANSMITINFO pTransmitInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveToFile(
        ENCODINGTYPE ietEncoding,
        LPCSTR pszFilePath) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetHandle(
        LPHBODY phBody) = 0;

};
#else
typedef struct IMimeBodyVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeBody* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeBody* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeBody* This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimeBody* This,
        CLSID *pClassID);

    /*** IPersistStreamInit methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimeBody* This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimeBody* This,
        LPSTREAM pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimeBody* This,
        LPSTREAM pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimeBody* This,
        ULARGE_INTEGER *pcbSize);

    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimeBody* This);

    /*** IMimePropertySet methods ***/
    HRESULT (STDMETHODCALLTYPE *GetPropInfo)(
        IMimeBody* This,
        LPCSTR pszName,
        LPMIMEPROPINFO pInfo);

    HRESULT (STDMETHODCALLTYPE *SetPropInfo)(
        IMimeBody* This,
        LPCSTR pszName,
        LPCMIMEPROPINFO pInfo);

    HRESULT (STDMETHODCALLTYPE *GetProp)(
        IMimeBody* This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetProp)(
        IMimeBody* This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *AppendProp)(
        IMimeBody* This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteProp)(
        IMimeBody* This,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *CopyProps)(
        IMimeBody* This,
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet);

    HRESULT (STDMETHODCALLTYPE *MoveProps)(
        IMimeBody* This,
        ULONG cNames,
        LPCSTR *prgszName,
        IMimePropertySet *pPropertySet);

    HRESULT (STDMETHODCALLTYPE *DeleteExcept)(
        IMimeBody* This,
        ULONG cNames,
        LPCSTR *prgszName);

    HRESULT (STDMETHODCALLTYPE *QueryProp)(
        IMimeBody* This,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetCharset)(
        IMimeBody* This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *SetCharset)(
        IMimeBody* This,
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype);

    HRESULT (STDMETHODCALLTYPE *GetParameters)(
        IMimeBody* This,
        LPCSTR pszName,
        ULONG *pcParams,
        LPMIMEPARAMINFO *pprgParam);

    HRESULT (STDMETHODCALLTYPE *IsContentType)(
        IMimeBody* This,
        LPCSTR pszPriType,
        LPCSTR pszSubType);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimeBody* This,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMimeBody* This,
        IMimePropertySet **ppPropertySet);

    HRESULT (STDMETHODCALLTYPE *SetOption)(
        IMimeBody* This,
        const TYPEDID oid,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *GetOption)(
        IMimeBody* This,
        const TYPEDID oid,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *EnumProps)(
        IMimeBody* This,
        DWORD dwFlags,
        IMimeEnumProperties **ppEnum);

    /*** IMimeBody methods ***/
    HRESULT (STDMETHODCALLTYPE *IsType)(
        IMimeBody* This,
        IMSGBODYTYPE bodytype);

    HRESULT (STDMETHODCALLTYPE *SetDisplayName)(
        IMimeBody* This,
        LPCSTR pszDisplay);

    HRESULT (STDMETHODCALLTYPE *GetDisplayName)(
        IMimeBody* This,
        LPSTR *ppszDisplay);

    HRESULT (STDMETHODCALLTYPE *GetOffsets)(
        IMimeBody* This,
        LPBODYOFFSETS pOffsets);

    HRESULT (STDMETHODCALLTYPE *GetCurrentEncoding)(
        IMimeBody* This,
        ENCODINGTYPE *pietEncoding);

    HRESULT (STDMETHODCALLTYPE *SetCurrentEncoding)(
        IMimeBody* This,
        ENCODINGTYPE ietEncoding);

    HRESULT (STDMETHODCALLTYPE *GetEstimatedSize)(
        IMimeBody* This,
        ENCODINGTYPE ietEncoding,
        ULONG *pcbSize);

    HRESULT (STDMETHODCALLTYPE *GetDataHere)(
        IMimeBody* This,
        ENCODINGTYPE ietEncoding,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *GetData)(
        IMimeBody* This,
        ENCODINGTYPE ietEncoding,
        IStream **ppStream);

    HRESULT (STDMETHODCALLTYPE *SetData)(
        IMimeBody* This,
        ENCODINGTYPE ietEncoding,
        LPCSTR pszPriType,
        LPCSTR pszSubType,
        REFIID riid,
        LPVOID pvObject);

    HRESULT (STDMETHODCALLTYPE *EmptyData)(
        IMimeBody* This);

    HRESULT (STDMETHODCALLTYPE *CopyTo)(
        IMimeBody* This,
        IMimeBody *pBody);

    HRESULT (STDMETHODCALLTYPE *GetTransmitInfo)(
        IMimeBody* This,
        LPTRANSMITINFO pTransmitInfo);

    HRESULT (STDMETHODCALLTYPE *SaveToFile)(
        IMimeBody* This,
        ENCODINGTYPE ietEncoding,
        LPCSTR pszFilePath);

    HRESULT (STDMETHODCALLTYPE *GetHandle)(
        IMimeBody* This,
        LPHBODY phBody);

    END_INTERFACE
} IMimeBodyVtbl;
interface IMimeBody {
    CONST_VTBL IMimeBodyVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeBody_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeBody_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeBody_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimeBody_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStreamInit methods ***/
#define IMimeBody_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimeBody_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimeBody_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimeBody_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
#define IMimeBody_InitNew(This) (This)->lpVtbl->InitNew(This)
/*** IMimePropertySet methods ***/
#define IMimeBody_GetPropInfo(This,pszName,pInfo) (This)->lpVtbl->GetPropInfo(This,pszName,pInfo)
#define IMimeBody_SetPropInfo(This,pszName,pInfo) (This)->lpVtbl->SetPropInfo(This,pszName,pInfo)
#define IMimeBody_GetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->GetProp(This,pszName,dwFlags,pValue)
#define IMimeBody_SetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->SetProp(This,pszName,dwFlags,pValue)
#define IMimeBody_AppendProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->AppendProp(This,pszName,dwFlags,pValue)
#define IMimeBody_DeleteProp(This,pszName) (This)->lpVtbl->DeleteProp(This,pszName)
#define IMimeBody_CopyProps(This,cNames,prgszName,pPropertySet) (This)->lpVtbl->CopyProps(This,cNames,prgszName,pPropertySet)
#define IMimeBody_MoveProps(This,cNames,prgszName,pPropertySet) (This)->lpVtbl->MoveProps(This,cNames,prgszName,pPropertySet)
#define IMimeBody_DeleteExcept(This,cNames,prgszName) (This)->lpVtbl->DeleteExcept(This,cNames,prgszName)
#define IMimeBody_QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimeBody_GetCharset(This,phCharset) (This)->lpVtbl->GetCharset(This,phCharset)
#define IMimeBody_SetCharset(This,hCharset,applytype) (This)->lpVtbl->SetCharset(This,hCharset,applytype)
#define IMimeBody_GetParameters(This,pszName,pcParams,pprgParam) (This)->lpVtbl->GetParameters(This,pszName,pcParams,pprgParam)
#define IMimeBody_IsContentType(This,pszPriType,pszSubType) (This)->lpVtbl->IsContentType(This,pszPriType,pszSubType)
#define IMimeBody_BindToObject(This,riid,ppvObject) (This)->lpVtbl->BindToObject(This,riid,ppvObject)
#define IMimeBody_Clone(This,ppPropertySet) (This)->lpVtbl->Clone(This,ppPropertySet)
#define IMimeBody_SetOption(This,oid,pValue) (This)->lpVtbl->SetOption(This,oid,pValue)
#define IMimeBody_GetOption(This,oid,pValue) (This)->lpVtbl->GetOption(This,oid,pValue)
#define IMimeBody_EnumProps(This,dwFlags,ppEnum) (This)->lpVtbl->EnumProps(This,dwFlags,ppEnum)
/*** IMimeBody methods ***/
#define IMimeBody_IsType(This,bodytype) (This)->lpVtbl->IsType(This,bodytype)
#define IMimeBody_SetDisplayName(This,pszDisplay) (This)->lpVtbl->SetDisplayName(This,pszDisplay)
#define IMimeBody_GetDisplayName(This,ppszDisplay) (This)->lpVtbl->GetDisplayName(This,ppszDisplay)
#define IMimeBody_GetOffsets(This,pOffsets) (This)->lpVtbl->GetOffsets(This,pOffsets)
#define IMimeBody_GetCurrentEncoding(This,pietEncoding) (This)->lpVtbl->GetCurrentEncoding(This,pietEncoding)
#define IMimeBody_SetCurrentEncoding(This,ietEncoding) (This)->lpVtbl->SetCurrentEncoding(This,ietEncoding)
#define IMimeBody_GetEstimatedSize(This,ietEncoding,pcbSize) (This)->lpVtbl->GetEstimatedSize(This,ietEncoding,pcbSize)
#define IMimeBody_GetDataHere(This,ietEncoding,pStream) (This)->lpVtbl->GetDataHere(This,ietEncoding,pStream)
#define IMimeBody_GetData(This,ietEncoding,ppStream) (This)->lpVtbl->GetData(This,ietEncoding,ppStream)
#define IMimeBody_SetData(This,ietEncoding,pszPriType,pszSubType,riid,pvObject) (This)->lpVtbl->SetData(This,ietEncoding,pszPriType,pszSubType,riid,pvObject)
#define IMimeBody_EmptyData(This) (This)->lpVtbl->EmptyData(This)
#define IMimeBody_CopyTo(This,pBody) (This)->lpVtbl->CopyTo(This,pBody)
#define IMimeBody_GetTransmitInfo(This,pTransmitInfo) (This)->lpVtbl->GetTransmitInfo(This,pTransmitInfo)
#define IMimeBody_SaveToFile(This,ietEncoding,pszFilePath) (This)->lpVtbl->SaveToFile(This,ietEncoding,pszFilePath)
#define IMimeBody_GetHandle(This,phBody) (This)->lpVtbl->GetHandle(This,phBody)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMimeBody_IsType_Proxy(
    IMimeBody* This,
    IMSGBODYTYPE bodytype);
void __RPC_STUB IMimeBody_IsType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_SetDisplayName_Proxy(
    IMimeBody* This,
    LPCSTR pszDisplay);
void __RPC_STUB IMimeBody_SetDisplayName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_GetDisplayName_Proxy(
    IMimeBody* This,
    LPSTR *ppszDisplay);
void __RPC_STUB IMimeBody_GetDisplayName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_GetOffsets_Proxy(
    IMimeBody* This,
    LPBODYOFFSETS pOffsets);
void __RPC_STUB IMimeBody_GetOffsets_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_GetCurrentEncoding_Proxy(
    IMimeBody* This,
    ENCODINGTYPE *pietEncoding);
void __RPC_STUB IMimeBody_GetCurrentEncoding_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_SetCurrentEncoding_Proxy(
    IMimeBody* This,
    ENCODINGTYPE ietEncoding);
void __RPC_STUB IMimeBody_SetCurrentEncoding_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_GetEstimatedSize_Proxy(
    IMimeBody* This,
    ENCODINGTYPE ietEncoding,
    ULONG *pcbSize);
void __RPC_STUB IMimeBody_GetEstimatedSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_GetDataHere_Proxy(
    IMimeBody* This,
    ENCODINGTYPE ietEncoding,
    IStream *pStream);
void __RPC_STUB IMimeBody_GetDataHere_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_GetData_Proxy(
    IMimeBody* This,
    ENCODINGTYPE ietEncoding,
    IStream **ppStream);
void __RPC_STUB IMimeBody_GetData_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_SetData_Proxy(
    IMimeBody* This,
    ENCODINGTYPE ietEncoding,
    LPCSTR pszPriType,
    LPCSTR pszSubType,
    REFIID riid,
    LPVOID pvObject);
void __RPC_STUB IMimeBody_SetData_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_EmptyData_Proxy(
    IMimeBody* This);
void __RPC_STUB IMimeBody_EmptyData_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_CopyTo_Proxy(
    IMimeBody* This,
    IMimeBody *pBody);
void __RPC_STUB IMimeBody_CopyTo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_GetTransmitInfo_Proxy(
    IMimeBody* This,
    LPTRANSMITINFO pTransmitInfo);
void __RPC_STUB IMimeBody_GetTransmitInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_SaveToFile_Proxy(
    IMimeBody* This,
    ENCODINGTYPE ietEncoding,
    LPCSTR pszFilePath);
void __RPC_STUB IMimeBody_SaveToFile_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeBody_GetHandle_Proxy(
    IMimeBody* This,
    LPHBODY phBody);
void __RPC_STUB IMimeBody_GetHandle_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMimeBody_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeMessageTree interface
 */
#ifndef __IMimeMessageTree_INTERFACE_DEFINED__
#define __IMimeMessageTree_INTERFACE_DEFINED__

typedef IMimeMessageTree *LPMIMEMESSAGETREE;
#define HBODY_ROOT ((HBODY)-1)

typedef enum tagBODYLOCATION {
    IBL_ROOT = 0,
    IBL_PARENT = 1,
    IBL_FIRST = 2,
    IBL_LAST = 3,
    IBL_NEXT = 4,
    IBL_PREVIOUS = 5
} BODYLOCATION;
typedef struct tagFINDBODY {
    LPSTR pszPriType;
    LPSTR pszSubType;
    DWORD dwReserved;
} FINDBODY;
typedef struct tagFINDBODY *LPFINDBODY;
DEFINE_GUID(IID_IMimeMessageTree, 0xfd853cd4, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeMessageTree : public IPersistStreamInit
{
    virtual HRESULT STDMETHODCALLTYPE GetMessageSource(
        IStream **ppStream,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMessageSize(
        ULONG *pcbSize,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadOffsetTable(
        IStream *pStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveOffsetTable(
        IStream *pStream,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFlags(
        DWORD *pdwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Commit(
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE HandsOffStorage(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE BindToObject(
        const HBODY hBody,
        REFIID riid,
        void **ppvObject) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveBody(
        HBODY hBody,
        DWORD dwFlags,
        IStream *pStream) = 0;

    virtual HRESULT STDMETHODCALLTYPE InsertBody(
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBody(
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteBody(
        HBODY hBody,
        DWORD dwFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE MoveBody(
        HBODY hBody,
        BODYLOCATION location) = 0;

    virtual HRESULT STDMETHODCALLTYPE CountBodies(
        HBODY hParent,
        boolean fRecurse,
        ULONG *pcBodies) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindFirst(
        LPFINDBODY pFindBody,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindNext(
        LPFINDBODY pFindBody,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE ResolveURL(
        HBODY hRelated,
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE ToMultipart(
        HBODY hBody,
        LPCSTR pszSubType,
        LPHBODY phMultipart) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBodyOffsets(
        HBODY hBody,
        LPBODYOFFSETS pOffsets) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetCharset(
        LPHCHARSET phCharset) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetCharset(
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsBodyType(
        HBODY hBody,
        IMSGBODYTYPE bodytype) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsContentType(
        HBODY hBody,
        LPCSTR pszPriType,
        LPCSTR pszSubType) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryBodyProp(
        HBODY hBody,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBodyProp(
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBodyProp(
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteBodyProp(
        HBODY hBody,
        LPCSTR pszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetOption(
        const TYPEDID oid,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetOption(
        const TYPEDID oid,
        LPPROPVARIANT pValue) = 0;

};
#else
typedef struct IMimeMessageTreeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeMessageTree* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeMessageTree* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeMessageTree* This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimeMessageTree* This,
        CLSID *pClassID);

    /*** IPersistStreamInit methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimeMessageTree* This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimeMessageTree* This,
        LPSTREAM pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimeMessageTree* This,
        LPSTREAM pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimeMessageTree* This,
        ULARGE_INTEGER *pcbSize);

    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimeMessageTree* This);

    /*** IMimeMessageTree methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMessageSource)(
        IMimeMessageTree* This,
        IStream **ppStream,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetMessageSize)(
        IMimeMessageTree* This,
        ULONG *pcbSize,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *LoadOffsetTable)(
        IMimeMessageTree* This,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *SaveOffsetTable)(
        IMimeMessageTree* This,
        IStream *pStream,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetFlags)(
        IMimeMessageTree* This,
        DWORD *pdwFlags);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        IMimeMessageTree* This,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *HandsOffStorage)(
        IMimeMessageTree* This);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimeMessageTree* This,
        const HBODY hBody,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *SaveBody)(
        IMimeMessageTree* This,
        HBODY hBody,
        DWORD dwFlags,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *InsertBody)(
        IMimeMessageTree* This,
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *GetBody)(
        IMimeMessageTree* This,
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *DeleteBody)(
        IMimeMessageTree* This,
        HBODY hBody,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *MoveBody)(
        IMimeMessageTree* This,
        HBODY hBody,
        BODYLOCATION location);

    HRESULT (STDMETHODCALLTYPE *CountBodies)(
        IMimeMessageTree* This,
        HBODY hParent,
        boolean fRecurse,
        ULONG *pcBodies);

    HRESULT (STDMETHODCALLTYPE *FindFirst)(
        IMimeMessageTree* This,
        LPFINDBODY pFindBody,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *FindNext)(
        IMimeMessageTree* This,
        LPFINDBODY pFindBody,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *ResolveURL)(
        IMimeMessageTree* This,
        HBODY hRelated,
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *ToMultipart)(
        IMimeMessageTree* This,
        HBODY hBody,
        LPCSTR pszSubType,
        LPHBODY phMultipart);

    HRESULT (STDMETHODCALLTYPE *GetBodyOffsets)(
        IMimeMessageTree* This,
        HBODY hBody,
        LPBODYOFFSETS pOffsets);

    HRESULT (STDMETHODCALLTYPE *GetCharset)(
        IMimeMessageTree* This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *SetCharset)(
        IMimeMessageTree* This,
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype);

    HRESULT (STDMETHODCALLTYPE *IsBodyType)(
        IMimeMessageTree* This,
        HBODY hBody,
        IMSGBODYTYPE bodytype);

    HRESULT (STDMETHODCALLTYPE *IsContentType)(
        IMimeMessageTree* This,
        HBODY hBody,
        LPCSTR pszPriType,
        LPCSTR pszSubType);

    HRESULT (STDMETHODCALLTYPE *QueryBodyProp)(
        IMimeMessageTree* This,
        HBODY hBody,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetBodyProp)(
        IMimeMessageTree* This,
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetBodyProp)(
        IMimeMessageTree* This,
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteBodyProp)(
        IMimeMessageTree* This,
        HBODY hBody,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *SetOption)(
        IMimeMessageTree* This,
        const TYPEDID oid,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *GetOption)(
        IMimeMessageTree* This,
        const TYPEDID oid,
        LPPROPVARIANT pValue);

    END_INTERFACE
} IMimeMessageTreeVtbl;
interface IMimeMessageTree {
    CONST_VTBL IMimeMessageTreeVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeMessageTree_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeMessageTree_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeMessageTree_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimeMessageTree_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStreamInit methods ***/
#define IMimeMessageTree_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimeMessageTree_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimeMessageTree_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimeMessageTree_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
#define IMimeMessageTree_InitNew(This) (This)->lpVtbl->InitNew(This)
/*** IMimeMessageTree methods ***/
#define IMimeMessageTree_GetMessageSource(This,ppStream,dwFlags) (This)->lpVtbl->GetMessageSource(This,ppStream,dwFlags)
#define IMimeMessageTree_GetMessageSize(This,pcbSize,dwFlags) (This)->lpVtbl->GetMessageSize(This,pcbSize,dwFlags)
#define IMimeMessageTree_LoadOffsetTable(This,pStream) (This)->lpVtbl->LoadOffsetTable(This,pStream)
#define IMimeMessageTree_SaveOffsetTable(This,pStream,dwFlags) (This)->lpVtbl->SaveOffsetTable(This,pStream,dwFlags)
#define IMimeMessageTree_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
#define IMimeMessageTree_Commit(This,dwFlags) (This)->lpVtbl->Commit(This,dwFlags)
#define IMimeMessageTree_HandsOffStorage(This) (This)->lpVtbl->HandsOffStorage(This)
#define IMimeMessageTree_BindToObject(This,hBody,riid,ppvObject) (This)->lpVtbl->BindToObject(This,hBody,riid,ppvObject)
#define IMimeMessageTree_SaveBody(This,hBody,dwFlags,pStream) (This)->lpVtbl->SaveBody(This,hBody,dwFlags,pStream)
#define IMimeMessageTree_InsertBody(This,location,hPivot,phBody) (This)->lpVtbl->InsertBody(This,location,hPivot,phBody)
#define IMimeMessageTree_GetBody(This,location,hPivot,phBody) (This)->lpVtbl->GetBody(This,location,hPivot,phBody)
#define IMimeMessageTree_DeleteBody(This,hBody,dwFlags) (This)->lpVtbl->DeleteBody(This,hBody,dwFlags)
#define IMimeMessageTree_MoveBody(This,hBody,location) (This)->lpVtbl->MoveBody(This,hBody,location)
#define IMimeMessageTree_CountBodies(This,hParent,fRecurse,pcBodies) (This)->lpVtbl->CountBodies(This,hParent,fRecurse,pcBodies)
#define IMimeMessageTree_FindFirst(This,pFindBody,phBody) (This)->lpVtbl->FindFirst(This,pFindBody,phBody)
#define IMimeMessageTree_FindNext(This,pFindBody,phBody) (This)->lpVtbl->FindNext(This,pFindBody,phBody)
#define IMimeMessageTree_ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody) (This)->lpVtbl->ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody)
#define IMimeMessageTree_ToMultipart(This,hBody,pszSubType,phMultipart) (This)->lpVtbl->ToMultipart(This,hBody,pszSubType,phMultipart)
#define IMimeMessageTree_GetBodyOffsets(This,hBody,pOffsets) (This)->lpVtbl->GetBodyOffsets(This,hBody,pOffsets)
#define IMimeMessageTree_GetCharset(This,phCharset) (This)->lpVtbl->GetCharset(This,phCharset)
#define IMimeMessageTree_SetCharset(This,hCharset,applytype) (This)->lpVtbl->SetCharset(This,hCharset,applytype)
#define IMimeMessageTree_IsBodyType(This,hBody,bodytype) (This)->lpVtbl->IsBodyType(This,hBody,bodytype)
#define IMimeMessageTree_IsContentType(This,hBody,pszPriType,pszSubType) (This)->lpVtbl->IsContentType(This,hBody,pszPriType,pszSubType)
#define IMimeMessageTree_QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimeMessageTree_GetBodyProp(This,hBody,pszName,dwFlags,pValue) (This)->lpVtbl->GetBodyProp(This,hBody,pszName,dwFlags,pValue)
#define IMimeMessageTree_SetBodyProp(This,hBody,pszName,dwFlags,pValue) (This)->lpVtbl->SetBodyProp(This,hBody,pszName,dwFlags,pValue)
#define IMimeMessageTree_DeleteBodyProp(This,hBody,pszName) (This)->lpVtbl->DeleteBodyProp(This,hBody,pszName)
#define IMimeMessageTree_SetOption(This,oid,pValue) (This)->lpVtbl->SetOption(This,oid,pValue)
#define IMimeMessageTree_GetOption(This,oid,pValue) (This)->lpVtbl->GetOption(This,oid,pValue)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMimeMessageTree_GetMessageSource_Proxy(
    IMimeMessageTree* This,
    IStream **ppStream,
    DWORD dwFlags);
void __RPC_STUB IMimeMessageTree_GetMessageSource_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_GetMessageSize_Proxy(
    IMimeMessageTree* This,
    ULONG *pcbSize,
    DWORD dwFlags);
void __RPC_STUB IMimeMessageTree_GetMessageSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_LoadOffsetTable_Proxy(
    IMimeMessageTree* This,
    IStream *pStream);
void __RPC_STUB IMimeMessageTree_LoadOffsetTable_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_SaveOffsetTable_Proxy(
    IMimeMessageTree* This,
    IStream *pStream,
    DWORD dwFlags);
void __RPC_STUB IMimeMessageTree_SaveOffsetTable_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_GetFlags_Proxy(
    IMimeMessageTree* This,
    DWORD *pdwFlags);
void __RPC_STUB IMimeMessageTree_GetFlags_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_Commit_Proxy(
    IMimeMessageTree* This,
    DWORD dwFlags);
void __RPC_STUB IMimeMessageTree_Commit_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_HandsOffStorage_Proxy(
    IMimeMessageTree* This);
void __RPC_STUB IMimeMessageTree_HandsOffStorage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_BindToObject_Proxy(
    IMimeMessageTree* This,
    const HBODY hBody,
    REFIID riid,
    void **ppvObject);
void __RPC_STUB IMimeMessageTree_BindToObject_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_SaveBody_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    DWORD dwFlags,
    IStream *pStream);
void __RPC_STUB IMimeMessageTree_SaveBody_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_InsertBody_Proxy(
    IMimeMessageTree* This,
    BODYLOCATION location,
    HBODY hPivot,
    LPHBODY phBody);
void __RPC_STUB IMimeMessageTree_InsertBody_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_GetBody_Proxy(
    IMimeMessageTree* This,
    BODYLOCATION location,
    HBODY hPivot,
    LPHBODY phBody);
void __RPC_STUB IMimeMessageTree_GetBody_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_DeleteBody_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    DWORD dwFlags);
void __RPC_STUB IMimeMessageTree_DeleteBody_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_MoveBody_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    BODYLOCATION location);
void __RPC_STUB IMimeMessageTree_MoveBody_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_CountBodies_Proxy(
    IMimeMessageTree* This,
    HBODY hParent,
    boolean fRecurse,
    ULONG *pcBodies);
void __RPC_STUB IMimeMessageTree_CountBodies_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_FindFirst_Proxy(
    IMimeMessageTree* This,
    LPFINDBODY pFindBody,
    LPHBODY phBody);
void __RPC_STUB IMimeMessageTree_FindFirst_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_FindNext_Proxy(
    IMimeMessageTree* This,
    LPFINDBODY pFindBody,
    LPHBODY phBody);
void __RPC_STUB IMimeMessageTree_FindNext_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_ResolveURL_Proxy(
    IMimeMessageTree* This,
    HBODY hRelated,
    LPCSTR pszBase,
    LPCSTR pszURL,
    DWORD dwFlags,
    LPHBODY phBody);
void __RPC_STUB IMimeMessageTree_ResolveURL_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_ToMultipart_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    LPCSTR pszSubType,
    LPHBODY phMultipart);
void __RPC_STUB IMimeMessageTree_ToMultipart_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_GetBodyOffsets_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    LPBODYOFFSETS pOffsets);
void __RPC_STUB IMimeMessageTree_GetBodyOffsets_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_GetCharset_Proxy(
    IMimeMessageTree* This,
    LPHCHARSET phCharset);
void __RPC_STUB IMimeMessageTree_GetCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_SetCharset_Proxy(
    IMimeMessageTree* This,
    HCHARSET hCharset,
    CSETAPPLYTYPE applytype);
void __RPC_STUB IMimeMessageTree_SetCharset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_IsBodyType_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    IMSGBODYTYPE bodytype);
void __RPC_STUB IMimeMessageTree_IsBodyType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_IsContentType_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    LPCSTR pszPriType,
    LPCSTR pszSubType);
void __RPC_STUB IMimeMessageTree_IsContentType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_QueryBodyProp_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    LPCSTR pszName,
    LPCSTR pszCriteria,
    boolean fSubString,
    boolean fCaseSensitive);
void __RPC_STUB IMimeMessageTree_QueryBodyProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_GetBodyProp_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    LPCSTR pszName,
    DWORD dwFlags,
    LPPROPVARIANT pValue);
void __RPC_STUB IMimeMessageTree_GetBodyProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_SetBodyProp_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    LPCSTR pszName,
    DWORD dwFlags,
    LPCPROPVARIANT pValue);
void __RPC_STUB IMimeMessageTree_SetBodyProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_DeleteBodyProp_Proxy(
    IMimeMessageTree* This,
    HBODY hBody,
    LPCSTR pszName);
void __RPC_STUB IMimeMessageTree_DeleteBodyProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_SetOption_Proxy(
    IMimeMessageTree* This,
    const TYPEDID oid,
    LPCPROPVARIANT pValue);
void __RPC_STUB IMimeMessageTree_SetOption_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessageTree_GetOption_Proxy(
    IMimeMessageTree* This,
    const TYPEDID oid,
    LPPROPVARIANT pValue);
void __RPC_STUB IMimeMessageTree_GetOption_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMimeMessageTree_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeMessage interface
 */
#ifndef __IMimeMessage_INTERFACE_DEFINED__
#define __IMimeMessage_INTERFACE_DEFINED__

typedef IMimeMessage *LPMIMEMESSAGE;
typedef DWORD TEXTTYPE;
typedef enum tagIMSGFLAGS {
    IMF_ATTACHMENTS = 0x1,
    IMF_MULTIPART = 0x2,
    IMF_SUBMULTIPART = 0x4,
    IMF_MIME = 0x8,
    IMF_HTML = 0x10,
    IMF_PLAIN = 0x20,
    IMF_PARTIAL = 0x40,
    IMF_SIGNED = 0x80,
    IMF_ENCRYPTED = 0x100,
    IMF_TNEF = 0x200,
    IMF_MHTML = 0x400,
    IMF_SECURE = 0x800,
    IMF_TEXT = 0x1000,
    IMF_CSETTAGGED = 0x2000,
    IMF_NEWS = 0x4000,
    IMF_VOICEMAIL = 0x8000,
    IMF_HASVCARD = 0x10000,
    IMF_RFC1154 = 0x20000
} IMSGFLAGS;
typedef enum tagIMSGPRIORITY {
    IMSG_PRI_LOW = 5,
    IMSG_PRI_NORMAL = 3,
    IMSG_PRI_HIGH = 1
} IMSGPRIORITY;
#define WPF_HTML             0x00000001
#define WPF_AUTOINLINE       0x00000002
#define WPF_SLIDESHOW        0x00000004
#define WPF_ATTACHLINKS      0x00000008
#define WPF_IMAGESONLY       0x00000010
#define WPF_NOMETACHARSET    0x00000020
typedef struct tagWEPAGEOPTIONS {
    DWORD cbSize;
    DWORD dwFlags;
    DWORD dwDelay;
    WCHAR wchQuote;
} WEBPAGEOPTIONS;
typedef struct tagWEPAGEOPTIONS *LPWEBPAGEOPTIONS;
#define TXT_PLAIN       1
#define TXT_HTML        2
DEFINE_GUID(IID_IMimeMessage, 0xfd853cd5, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeMessage : public IMimeMessageTree
{
    virtual HRESULT STDMETHODCALLTYPE CreateWebPage(
        IStream *pRootStm,
        LPWEBPAGEOPTIONS pOptions,
        IMimeMessageCallback *pCallback,
        IMoniker **ppMoniker) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetProp(
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteProp(
        LPCSTR pszName) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryProp(
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetTextBody(
        DWORD dwTxtType,
        ENCODINGTYPE ietEncoding,
        IStream **pStream,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTextBody(
        DWORD dwTxtType,
        ENCODINGTYPE ietEncoding,
        HBODY hAlternative,
        IStream *pStream,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE AttachObject(
        REFIID riid,
        void *pvObject,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE AttachFile(
        LPCSTR pszFilePath,
        IStream *pstmFile,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE AttachURL(
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        IStream *pstmURL,
        LPSTR *ppszCIDURL,
        LPHBODY phBody) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAttachments(
        ULONG *pcAttach,
        LPHBODY *pprghAttach) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAddressTable(
        IMimeAddressTable **ppTable) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSender(
        LPADDRESSPROPS pAddress) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAddressTypes(
        DWORD dwAdrTypes,
        DWORD dwProps,
        LPADDRESSLIST pList) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAddressFormat(
        DWORD dwAdrTypes,
        ADDRESSFORMAT format,
        LPSTR *ppszFormat) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnumAddressTypes(
        DWORD dwAdrTypes,
        DWORD dwProps,
        IMimeEnumAddressTypes **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE SplitMessage(
        ULONG cbMaxPart,
        IMimeMessageParts **ppParts) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRootMoniker(
        IMoniker **ppMoniker) = 0;

};
#else
typedef struct IMimeMessageVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeMessage* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeMessage* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeMessage* This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IMimeMessage* This,
        CLSID *pClassID);

    /*** IPersistStreamInit methods ***/
    HRESULT (STDMETHODCALLTYPE *IsDirty)(
        IMimeMessage* This);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IMimeMessage* This,
        LPSTREAM pStm);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IMimeMessage* This,
        LPSTREAM pStm,
        BOOL fClearDirty);

    HRESULT (STDMETHODCALLTYPE *GetSizeMax)(
        IMimeMessage* This,
        ULARGE_INTEGER *pcbSize);

    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IMimeMessage* This);

    /*** IMimeMessageTree methods ***/
    HRESULT (STDMETHODCALLTYPE *GetMessageSource)(
        IMimeMessage* This,
        IStream **ppStream,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetMessageSize)(
        IMimeMessage* This,
        ULONG *pcbSize,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *LoadOffsetTable)(
        IMimeMessage* This,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *SaveOffsetTable)(
        IMimeMessage* This,
        IStream *pStream,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *GetFlags)(
        IMimeMessage* This,
        DWORD *pdwFlags);

    HRESULT (STDMETHODCALLTYPE *Commit)(
        IMimeMessage* This,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *HandsOffStorage)(
        IMimeMessage* This);

    HRESULT (STDMETHODCALLTYPE *BindToObject)(
        IMimeMessage* This,
        const HBODY hBody,
        REFIID riid,
        void **ppvObject);

    HRESULT (STDMETHODCALLTYPE *SaveBody)(
        IMimeMessage* This,
        HBODY hBody,
        DWORD dwFlags,
        IStream *pStream);

    HRESULT (STDMETHODCALLTYPE *InsertBody)(
        IMimeMessage* This,
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *GetBody)(
        IMimeMessage* This,
        BODYLOCATION location,
        HBODY hPivot,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *DeleteBody)(
        IMimeMessage* This,
        HBODY hBody,
        DWORD dwFlags);

    HRESULT (STDMETHODCALLTYPE *MoveBody)(
        IMimeMessage* This,
        HBODY hBody,
        BODYLOCATION location);

    HRESULT (STDMETHODCALLTYPE *CountBodies)(
        IMimeMessage* This,
        HBODY hParent,
        boolean fRecurse,
        ULONG *pcBodies);

    HRESULT (STDMETHODCALLTYPE *FindFirst)(
        IMimeMessage* This,
        LPFINDBODY pFindBody,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *FindNext)(
        IMimeMessage* This,
        LPFINDBODY pFindBody,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *ResolveURL)(
        IMimeMessage* This,
        HBODY hRelated,
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *ToMultipart)(
        IMimeMessage* This,
        HBODY hBody,
        LPCSTR pszSubType,
        LPHBODY phMultipart);

    HRESULT (STDMETHODCALLTYPE *GetBodyOffsets)(
        IMimeMessage* This,
        HBODY hBody,
        LPBODYOFFSETS pOffsets);

    HRESULT (STDMETHODCALLTYPE *GetCharset)(
        IMimeMessage* This,
        LPHCHARSET phCharset);

    HRESULT (STDMETHODCALLTYPE *SetCharset)(
        IMimeMessage* This,
        HCHARSET hCharset,
        CSETAPPLYTYPE applytype);

    HRESULT (STDMETHODCALLTYPE *IsBodyType)(
        IMimeMessage* This,
        HBODY hBody,
        IMSGBODYTYPE bodytype);

    HRESULT (STDMETHODCALLTYPE *IsContentType)(
        IMimeMessage* This,
        HBODY hBody,
        LPCSTR pszPriType,
        LPCSTR pszSubType);

    HRESULT (STDMETHODCALLTYPE *QueryBodyProp)(
        IMimeMessage* This,
        HBODY hBody,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetBodyProp)(
        IMimeMessage* This,
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetBodyProp)(
        IMimeMessage* This,
        HBODY hBody,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteBodyProp)(
        IMimeMessage* This,
        HBODY hBody,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *SetOption)(
        IMimeMessage* This,
        const TYPEDID oid,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *GetOption)(
        IMimeMessage* This,
        const TYPEDID oid,
        LPPROPVARIANT pValue);

    /*** IMimeMessage methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateWebPage)(
        IMimeMessage* This,
        IStream *pRootStm,
        LPWEBPAGEOPTIONS pOptions,
        IMimeMessageCallback *pCallback,
        IMoniker **ppMoniker);

    HRESULT (STDMETHODCALLTYPE *GetProp)(
        IMimeMessage* This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *SetProp)(
        IMimeMessage* This,
        LPCSTR pszName,
        DWORD dwFlags,
        LPCPROPVARIANT pValue);

    HRESULT (STDMETHODCALLTYPE *DeleteProp)(
        IMimeMessage* This,
        LPCSTR pszName);

    HRESULT (STDMETHODCALLTYPE *QueryProp)(
        IMimeMessage* This,
        LPCSTR pszName,
        LPCSTR pszCriteria,
        boolean fSubString,
        boolean fCaseSensitive);

    HRESULT (STDMETHODCALLTYPE *GetTextBody)(
        IMimeMessage* This,
        DWORD dwTxtType,
        ENCODINGTYPE ietEncoding,
        IStream **pStream,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *SetTextBody)(
        IMimeMessage* This,
        DWORD dwTxtType,
        ENCODINGTYPE ietEncoding,
        HBODY hAlternative,
        IStream *pStream,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *AttachObject)(
        IMimeMessage* This,
        REFIID riid,
        void *pvObject,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *AttachFile)(
        IMimeMessage* This,
        LPCSTR pszFilePath,
        IStream *pstmFile,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *AttachURL)(
        IMimeMessage* This,
        LPCSTR pszBase,
        LPCSTR pszURL,
        DWORD dwFlags,
        IStream *pstmURL,
        LPSTR *ppszCIDURL,
        LPHBODY phBody);

    HRESULT (STDMETHODCALLTYPE *GetAttachments)(
        IMimeMessage* This,
        ULONG *pcAttach,
        LPHBODY *pprghAttach);

    HRESULT (STDMETHODCALLTYPE *GetAddressTable)(
        IMimeMessage* This,
        IMimeAddressTable **ppTable);

    HRESULT (STDMETHODCALLTYPE *GetSender)(
        IMimeMessage* This,
        LPADDRESSPROPS pAddress);

    HRESULT (STDMETHODCALLTYPE *GetAddressTypes)(
        IMimeMessage* This,
        DWORD dwAdrTypes,
        DWORD dwProps,
        LPADDRESSLIST pList);

    HRESULT (STDMETHODCALLTYPE *GetAddressFormat)(
        IMimeMessage* This,
        DWORD dwAdrTypes,
        ADDRESSFORMAT format,
        LPSTR *ppszFormat);

    HRESULT (STDMETHODCALLTYPE *EnumAddressTypes)(
        IMimeMessage* This,
        DWORD dwAdrTypes,
        DWORD dwProps,
        IMimeEnumAddressTypes **ppEnum);

    HRESULT (STDMETHODCALLTYPE *SplitMessage)(
        IMimeMessage* This,
        ULONG cbMaxPart,
        IMimeMessageParts **ppParts);

    HRESULT (STDMETHODCALLTYPE *GetRootMoniker)(
        IMimeMessage* This,
        IMoniker **ppMoniker);

    END_INTERFACE
} IMimeMessageVtbl;
interface IMimeMessage {
    CONST_VTBL IMimeMessageVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeMessage_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeMessage_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeMessage_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IMimeMessage_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
/*** IPersistStreamInit methods ***/
#define IMimeMessage_IsDirty(This) (This)->lpVtbl->IsDirty(This)
#define IMimeMessage_Load(This,pStm) (This)->lpVtbl->Load(This,pStm)
#define IMimeMessage_Save(This,pStm,fClearDirty) (This)->lpVtbl->Save(This,pStm,fClearDirty)
#define IMimeMessage_GetSizeMax(This,pcbSize) (This)->lpVtbl->GetSizeMax(This,pcbSize)
#define IMimeMessage_InitNew(This) (This)->lpVtbl->InitNew(This)
/*** IMimeMessageTree methods ***/
#define IMimeMessage_GetMessageSource(This,ppStream,dwFlags) (This)->lpVtbl->GetMessageSource(This,ppStream,dwFlags)
#define IMimeMessage_GetMessageSize(This,pcbSize,dwFlags) (This)->lpVtbl->GetMessageSize(This,pcbSize,dwFlags)
#define IMimeMessage_LoadOffsetTable(This,pStream) (This)->lpVtbl->LoadOffsetTable(This,pStream)
#define IMimeMessage_SaveOffsetTable(This,pStream,dwFlags) (This)->lpVtbl->SaveOffsetTable(This,pStream,dwFlags)
#define IMimeMessage_GetFlags(This,pdwFlags) (This)->lpVtbl->GetFlags(This,pdwFlags)
#define IMimeMessage_Commit(This,dwFlags) (This)->lpVtbl->Commit(This,dwFlags)
#define IMimeMessage_HandsOffStorage(This) (This)->lpVtbl->HandsOffStorage(This)
#define IMimeMessage_BindToObject(This,hBody,riid,ppvObject) (This)->lpVtbl->BindToObject(This,hBody,riid,ppvObject)
#define IMimeMessage_SaveBody(This,hBody,dwFlags,pStream) (This)->lpVtbl->SaveBody(This,hBody,dwFlags,pStream)
#define IMimeMessage_InsertBody(This,location,hPivot,phBody) (This)->lpVtbl->InsertBody(This,location,hPivot,phBody)
#define IMimeMessage_GetBody(This,location,hPivot,phBody) (This)->lpVtbl->GetBody(This,location,hPivot,phBody)
#define IMimeMessage_DeleteBody(This,hBody,dwFlags) (This)->lpVtbl->DeleteBody(This,hBody,dwFlags)
#define IMimeMessage_MoveBody(This,hBody,location) (This)->lpVtbl->MoveBody(This,hBody,location)
#define IMimeMessage_CountBodies(This,hParent,fRecurse,pcBodies) (This)->lpVtbl->CountBodies(This,hParent,fRecurse,pcBodies)
#define IMimeMessage_FindFirst(This,pFindBody,phBody) (This)->lpVtbl->FindFirst(This,pFindBody,phBody)
#define IMimeMessage_FindNext(This,pFindBody,phBody) (This)->lpVtbl->FindNext(This,pFindBody,phBody)
#define IMimeMessage_ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody) (This)->lpVtbl->ResolveURL(This,hRelated,pszBase,pszURL,dwFlags,phBody)
#define IMimeMessage_ToMultipart(This,hBody,pszSubType,phMultipart) (This)->lpVtbl->ToMultipart(This,hBody,pszSubType,phMultipart)
#define IMimeMessage_GetBodyOffsets(This,hBody,pOffsets) (This)->lpVtbl->GetBodyOffsets(This,hBody,pOffsets)
#define IMimeMessage_GetCharset(This,phCharset) (This)->lpVtbl->GetCharset(This,phCharset)
#define IMimeMessage_SetCharset(This,hCharset,applytype) (This)->lpVtbl->SetCharset(This,hCharset,applytype)
#define IMimeMessage_IsBodyType(This,hBody,bodytype) (This)->lpVtbl->IsBodyType(This,hBody,bodytype)
#define IMimeMessage_IsContentType(This,hBody,pszPriType,pszSubType) (This)->lpVtbl->IsContentType(This,hBody,pszPriType,pszSubType)
#define IMimeMessage_QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryBodyProp(This,hBody,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimeMessage_GetBodyProp(This,hBody,pszName,dwFlags,pValue) (This)->lpVtbl->GetBodyProp(This,hBody,pszName,dwFlags,pValue)
#define IMimeMessage_SetBodyProp(This,hBody,pszName,dwFlags,pValue) (This)->lpVtbl->SetBodyProp(This,hBody,pszName,dwFlags,pValue)
#define IMimeMessage_DeleteBodyProp(This,hBody,pszName) (This)->lpVtbl->DeleteBodyProp(This,hBody,pszName)
#define IMimeMessage_SetOption(This,oid,pValue) (This)->lpVtbl->SetOption(This,oid,pValue)
#define IMimeMessage_GetOption(This,oid,pValue) (This)->lpVtbl->GetOption(This,oid,pValue)
/*** IMimeMessage methods ***/
#define IMimeMessage_CreateWebPage(This,pRootStm,pOptions,pCallback,ppMoniker) (This)->lpVtbl->CreateWebPage(This,pRootStm,pOptions,pCallback,ppMoniker)
#define IMimeMessage_GetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->GetProp(This,pszName,dwFlags,pValue)
#define IMimeMessage_SetProp(This,pszName,dwFlags,pValue) (This)->lpVtbl->SetProp(This,pszName,dwFlags,pValue)
#define IMimeMessage_DeleteProp(This,pszName) (This)->lpVtbl->DeleteProp(This,pszName)
#define IMimeMessage_QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive) (This)->lpVtbl->QueryProp(This,pszName,pszCriteria,fSubString,fCaseSensitive)
#define IMimeMessage_GetTextBody(This,dwTxtType,ietEncoding,pStream,phBody) (This)->lpVtbl->GetTextBody(This,dwTxtType,ietEncoding,pStream,phBody)
#define IMimeMessage_SetTextBody(This,dwTxtType,ietEncoding,hAlternative,pStream,phBody) (This)->lpVtbl->SetTextBody(This,dwTxtType,ietEncoding,hAlternative,pStream,phBody)
#define IMimeMessage_AttachObject(This,riid,pvObject,phBody) (This)->lpVtbl->AttachObject(This,riid,pvObject,phBody)
#define IMimeMessage_AttachFile(This,pszFilePath,pstmFile,phBody) (This)->lpVtbl->AttachFile(This,pszFilePath,pstmFile,phBody)
#define IMimeMessage_AttachURL(This,pszBase,pszURL,dwFlags,pstmURL,ppszCIDURL,phBody) (This)->lpVtbl->AttachURL(This,pszBase,pszURL,dwFlags,pstmURL,ppszCIDURL,phBody)
#define IMimeMessage_GetAttachments(This,pcAttach,pprghAttach) (This)->lpVtbl->GetAttachments(This,pcAttach,pprghAttach)
#define IMimeMessage_GetAddressTable(This,ppTable) (This)->lpVtbl->GetAddressTable(This,ppTable)
#define IMimeMessage_GetSender(This,pAddress) (This)->lpVtbl->GetSender(This,pAddress)
#define IMimeMessage_GetAddressTypes(This,dwAdrTypes,dwProps,pList) (This)->lpVtbl->GetAddressTypes(This,dwAdrTypes,dwProps,pList)
#define IMimeMessage_GetAddressFormat(This,dwAdrTypes,format,ppszFormat) (This)->lpVtbl->GetAddressFormat(This,dwAdrTypes,format,ppszFormat)
#define IMimeMessage_EnumAddressTypes(This,dwAdrTypes,dwProps,ppEnum) (This)->lpVtbl->EnumAddressTypes(This,dwAdrTypes,dwProps,ppEnum)
#define IMimeMessage_SplitMessage(This,cbMaxPart,ppParts) (This)->lpVtbl->SplitMessage(This,cbMaxPart,ppParts)
#define IMimeMessage_GetRootMoniker(This,ppMoniker) (This)->lpVtbl->GetRootMoniker(This,ppMoniker)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMimeMessage_CreateWebPage_Proxy(
    IMimeMessage* This,
    IStream *pRootStm,
    LPWEBPAGEOPTIONS pOptions,
    IMimeMessageCallback *pCallback,
    IMoniker **ppMoniker);
void __RPC_STUB IMimeMessage_CreateWebPage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_GetProp_Proxy(
    IMimeMessage* This,
    LPCSTR pszName,
    DWORD dwFlags,
    LPPROPVARIANT pValue);
void __RPC_STUB IMimeMessage_GetProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_SetProp_Proxy(
    IMimeMessage* This,
    LPCSTR pszName,
    DWORD dwFlags,
    LPCPROPVARIANT pValue);
void __RPC_STUB IMimeMessage_SetProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_DeleteProp_Proxy(
    IMimeMessage* This,
    LPCSTR pszName);
void __RPC_STUB IMimeMessage_DeleteProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_QueryProp_Proxy(
    IMimeMessage* This,
    LPCSTR pszName,
    LPCSTR pszCriteria,
    boolean fSubString,
    boolean fCaseSensitive);
void __RPC_STUB IMimeMessage_QueryProp_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_GetTextBody_Proxy(
    IMimeMessage* This,
    DWORD dwTxtType,
    ENCODINGTYPE ietEncoding,
    IStream **pStream,
    LPHBODY phBody);
void __RPC_STUB IMimeMessage_GetTextBody_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_SetTextBody_Proxy(
    IMimeMessage* This,
    DWORD dwTxtType,
    ENCODINGTYPE ietEncoding,
    HBODY hAlternative,
    IStream *pStream,
    LPHBODY phBody);
void __RPC_STUB IMimeMessage_SetTextBody_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_AttachObject_Proxy(
    IMimeMessage* This,
    REFIID riid,
    void *pvObject,
    LPHBODY phBody);
void __RPC_STUB IMimeMessage_AttachObject_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_AttachFile_Proxy(
    IMimeMessage* This,
    LPCSTR pszFilePath,
    IStream *pstmFile,
    LPHBODY phBody);
void __RPC_STUB IMimeMessage_AttachFile_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_AttachURL_Proxy(
    IMimeMessage* This,
    LPCSTR pszBase,
    LPCSTR pszURL,
    DWORD dwFlags,
    IStream *pstmURL,
    LPSTR *ppszCIDURL,
    LPHBODY phBody);
void __RPC_STUB IMimeMessage_AttachURL_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_GetAttachments_Proxy(
    IMimeMessage* This,
    ULONG *pcAttach,
    LPHBODY *pprghAttach);
void __RPC_STUB IMimeMessage_GetAttachments_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_GetAddressTable_Proxy(
    IMimeMessage* This,
    IMimeAddressTable **ppTable);
void __RPC_STUB IMimeMessage_GetAddressTable_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_GetSender_Proxy(
    IMimeMessage* This,
    LPADDRESSPROPS pAddress);
void __RPC_STUB IMimeMessage_GetSender_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_GetAddressTypes_Proxy(
    IMimeMessage* This,
    DWORD dwAdrTypes,
    DWORD dwProps,
    LPADDRESSLIST pList);
void __RPC_STUB IMimeMessage_GetAddressTypes_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_GetAddressFormat_Proxy(
    IMimeMessage* This,
    DWORD dwAdrTypes,
    ADDRESSFORMAT format,
    LPSTR *ppszFormat);
void __RPC_STUB IMimeMessage_GetAddressFormat_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_EnumAddressTypes_Proxy(
    IMimeMessage* This,
    DWORD dwAdrTypes,
    DWORD dwProps,
    IMimeEnumAddressTypes **ppEnum);
void __RPC_STUB IMimeMessage_EnumAddressTypes_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_SplitMessage_Proxy(
    IMimeMessage* This,
    ULONG cbMaxPart,
    IMimeMessageParts **ppParts);
void __RPC_STUB IMimeMessage_SplitMessage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeMessage_GetRootMoniker_Proxy(
    IMimeMessage* This,
    IMoniker **ppMoniker);
void __RPC_STUB IMimeMessage_GetRootMoniker_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMimeMessage_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeMessageCallback interface
 */
#ifndef __IMimeMessageCallback_INTERFACE_DEFINED__
#define __IMimeMessageCallback_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeMessageCallback, 0x761aa741, 0x7bda, 0x11d1, 0x8a,0xa9, 0x00,0xc0,0x4f,0xb9,0x51,0xf3);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeMessageCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnWebPageSplitter(
        DWORD cInlined,
        IStream *ppStream) = 0;

};
#else
typedef struct IMimeMessageCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeMessageCallback* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeMessageCallback* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeMessageCallback* This);

    /*** IMimeMessageCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnWebPageSplitter)(
        IMimeMessageCallback* This,
        DWORD cInlined,
        IStream *ppStream);

    END_INTERFACE
} IMimeMessageCallbackVtbl;
interface IMimeMessageCallback {
    CONST_VTBL IMimeMessageCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeMessageCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeMessageCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeMessageCallback_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeMessageCallback methods ***/
#define IMimeMessageCallback_OnWebPageSplitter(This,cInlined,ppStream) (This)->lpVtbl->OnWebPageSplitter(This,cInlined,ppStream)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMimeMessageCallback_OnWebPageSplitter_Proxy(
    IMimeMessageCallback* This,
    DWORD cInlined,
    IStream *ppStream);
void __RPC_STUB IMimeMessageCallback_OnWebPageSplitter_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMimeMessageCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IPersistMime interface
 */
#ifndef __IPersistMime_INTERFACE_DEFINED__
#define __IPersistMime_INTERFACE_DEFINED__

DEFINE_GUID(IID_IPersistMime, 0xde4ad8da, 0x555f, 0x11d1, 0x8d,0xd0, 0x00,0xc0,0x4f,0xb9,0x51,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IPersistMime : public IPersist
{
};
#else
typedef struct IPersistMimeVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IPersistMime* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IPersistMime* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IPersistMime* This);

    /*** IPersist methods ***/
    HRESULT (STDMETHODCALLTYPE *GetClassID)(
        IPersistMime* This,
        CLSID *pClassID);

    END_INTERFACE
} IPersistMimeVtbl;
interface IPersistMime {
    CONST_VTBL IPersistMimeVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IPersistMime_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPersistMime_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPersistMime_Release(This) (This)->lpVtbl->Release(This)
/*** IPersist methods ***/
#define IPersistMime_GetClassID(This,pClassID) (This)->lpVtbl->GetClassID(This,pClassID)
#endif

#endif


#endif  /* __IPersistMime_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeMessageParts interface
 */
#ifndef __IMimeMessageParts_INTERFACE_DEFINED__
#define __IMimeMessageParts_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeMessageParts, 0xc558834f, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeMessageParts : public IUnknown
{
};
#else
typedef struct IMimeMessagePartsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeMessageParts* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeMessageParts* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeMessageParts* This);

    END_INTERFACE
} IMimeMessagePartsVtbl;
interface IMimeMessageParts {
    CONST_VTBL IMimeMessagePartsVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeMessageParts_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeMessageParts_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeMessageParts_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeMessageParts_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEnumHeaderRows interface
 */
#ifndef __IMimeEnumHeaderRows_INTERFACE_DEFINED__
#define __IMimeEnumHeaderRows_INTERFACE_DEFINED__

typedef struct tagENUMHEADERROW {
    HHEADERROW hRow;
    LPSTR pszHeader;
    LPSTR pszData;
    ULONG cchData;
    DWORD_PTR dwReserved;
} ENUMHEADERROW;
typedef struct tagENUMHEADERROW *LPENUMHEADERROW;
DEFINE_GUID(IID_IMimeEnumHeaderRows, 0xc558834d, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeEnumHeaderRows : public IUnknown
{
};
#else
typedef struct IMimeEnumHeaderRowsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEnumHeaderRows* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEnumHeaderRows* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEnumHeaderRows* This);

    END_INTERFACE
} IMimeEnumHeaderRowsVtbl;
interface IMimeEnumHeaderRows {
    CONST_VTBL IMimeEnumHeaderRowsVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeEnumHeaderRows_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEnumHeaderRows_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEnumHeaderRows_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeEnumHeaderRows_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEnumProperties interface
 */
#ifndef __IMimeEnumProperties_INTERFACE_DEFINED__
#define __IMimeEnumProperties_INTERFACE_DEFINED__

typedef IMimeEnumProperties *LPMIMEENUMPROPERTIES;
typedef struct tagENUMPROPERTY {
    LPSTR pszName;
    HHEADERROW hRow;
    DWORD dwPropId;
} ENUMPROPERTY;
typedef struct tagENUMPROPERTY *LPENUMPROPERTY;
DEFINE_GUID(IID_IMimeEnumProperties, 0xfd853cee, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeEnumProperties : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Next(
        ULONG cFetch,
        LPENUMPROPERTY prgProp,
        ULONG *pcFetched) = 0;

    virtual HRESULT STDMETHODCALLTYPE Skip(
        ULONG cItems) = 0;

    virtual HRESULT STDMETHODCALLTYPE Reset(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        IMimeEnumProperties **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE Count(
        ULONG *pcItems) = 0;

};
#else
typedef struct IMimeEnumPropertiesVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEnumProperties* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEnumProperties* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEnumProperties* This);

    /*** IMimeEnumProperties methods ***/
    HRESULT (STDMETHODCALLTYPE *Next)(
        IMimeEnumProperties* This,
        ULONG cFetch,
        LPENUMPROPERTY prgProp,
        ULONG *pcFetched);

    HRESULT (STDMETHODCALLTYPE *Skip)(
        IMimeEnumProperties* This,
        ULONG cItems);

    HRESULT (STDMETHODCALLTYPE *Reset)(
        IMimeEnumProperties* This);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        IMimeEnumProperties* This,
        IMimeEnumProperties **ppEnum);

    HRESULT (STDMETHODCALLTYPE *Count)(
        IMimeEnumProperties* This,
        ULONG *pcItems);

    END_INTERFACE
} IMimeEnumPropertiesVtbl;
interface IMimeEnumProperties {
    CONST_VTBL IMimeEnumPropertiesVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeEnumProperties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEnumProperties_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEnumProperties_Release(This) (This)->lpVtbl->Release(This)
/*** IMimeEnumProperties methods ***/
#define IMimeEnumProperties_Next(This,cFetch,prgProp,pcFetched) (This)->lpVtbl->Next(This,cFetch,prgProp,pcFetched)
#define IMimeEnumProperties_Skip(This,cItems) (This)->lpVtbl->Skip(This,cItems)
#define IMimeEnumProperties_Reset(This) (This)->lpVtbl->Reset(This)
#define IMimeEnumProperties_Clone(This,ppEnum) (This)->lpVtbl->Clone(This,ppEnum)
#define IMimeEnumProperties_Count(This,pcItems) (This)->lpVtbl->Count(This,pcItems)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMimeEnumProperties_Next_Proxy(
    IMimeEnumProperties* This,
    ULONG cFetch,
    LPENUMPROPERTY prgProp,
    ULONG *pcFetched);
void __RPC_STUB IMimeEnumProperties_Next_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeEnumProperties_Skip_Proxy(
    IMimeEnumProperties* This,
    ULONG cItems);
void __RPC_STUB IMimeEnumProperties_Skip_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeEnumProperties_Reset_Proxy(
    IMimeEnumProperties* This);
void __RPC_STUB IMimeEnumProperties_Reset_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeEnumProperties_Clone_Proxy(
    IMimeEnumProperties* This,
    IMimeEnumProperties **ppEnum);
void __RPC_STUB IMimeEnumProperties_Clone_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeEnumProperties_Count_Proxy(
    IMimeEnumProperties* This,
    ULONG *pcItems);
void __RPC_STUB IMimeEnumProperties_Count_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMimeEnumProperties_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEnumAddressTypes interface
 */
#ifndef __IMimeEnumAddressTypes_INTERFACE_DEFINED__
#define __IMimeEnumAddressTypes_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeEnumAddressTypes, 0xc5588354, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeEnumAddressTypes : public IUnknown
{
};
#else
typedef struct IMimeEnumAddressTypesVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEnumAddressTypes* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEnumAddressTypes* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEnumAddressTypes* This);

    END_INTERFACE
} IMimeEnumAddressTypesVtbl;
interface IMimeEnumAddressTypes {
    CONST_VTBL IMimeEnumAddressTypesVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeEnumAddressTypes_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEnumAddressTypes_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEnumAddressTypes_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeEnumAddressTypes_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEnumMessageParts interface
 */
#ifndef __IMimeEnumMessageParts_INTERFACE_DEFINED__
#define __IMimeEnumMessageParts_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeEnumMessageParts, 0xc5588350, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeEnumMessageParts : public IUnknown
{
};
#else
typedef struct IMimeEnumMessagePartsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEnumMessageParts* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEnumMessageParts* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEnumMessageParts* This);

    END_INTERFACE
} IMimeEnumMessagePartsVtbl;
interface IMimeEnumMessageParts {
    CONST_VTBL IMimeEnumMessagePartsVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeEnumMessageParts_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEnumMessageParts_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEnumMessageParts_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeEnumMessageParts_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IHashTable interface
 */
#ifndef __IHashTable_INTERFACE_DEFINED__
#define __IHashTable_INTERFACE_DEFINED__

DEFINE_GUID(IID_IHashTable, 0x64577981, 0x86d7, 0x11d1, 0xbd,0xfc, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IHashTable : public IUnknown
{
};
#else
typedef struct IHashTableVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IHashTable* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IHashTable* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IHashTable* This);

    END_INTERFACE
} IHashTableVtbl;
interface IHashTable {
    CONST_VTBL IHashTableVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IHashTable_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IHashTable_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IHashTable_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IHashTable_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeAllocator interface
 */
#ifndef __IMimeAllocator_INTERFACE_DEFINED__
#define __IMimeAllocator_INTERFACE_DEFINED__

typedef IMimeAllocator *LPMIMEALLOCATOR;
DEFINE_GUID(IID_IMimeAllocator, 0xc5588351, 0x7f86, 0x11d0, 0x82,0x52, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeAllocator : public IMalloc
{
    virtual HRESULT STDMETHODCALLTYPE FreeParamInfoArray(
        ULONG cParams,
        LPMIMEPARAMINFO prgParam,
        boolean fFreeArray) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeAddressList(
        LPADDRESSLIST pList) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeAddressProps(
        LPADDRESSPROPS pAddress) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseObjects(
        ULONG cObjects,
        IUnknown **prgpUnknown,
        boolean fFreeArray) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeEnumHeaderRowArray(
        ULONG cRows,
        LPENUMHEADERROW prgRow,
        boolean fFreeArray) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeEnumPropertyArray(
        ULONG cProps,
        LPENUMPROPERTY prgProp,
        boolean fFreeArray) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeThumbprint(
        THUMBBLOB *pthumbprint) = 0;

    virtual HRESULT STDMETHODCALLTYPE PropVariantClear(
        LPPROPVARIANT pProp) = 0;

};
#else
typedef struct IMimeAllocatorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeAllocator* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeAllocator* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeAllocator* This);

    /*** IMalloc methods ***/
    LPVOID (STDMETHODCALLTYPE *Alloc)(
        IMimeAllocator* This,
        ULONG cb);

    LPVOID (STDMETHODCALLTYPE *Realloc)(
        IMimeAllocator* This,
        LPVOID pv,
        ULONG cb);

    void (STDMETHODCALLTYPE *Free)(
        IMimeAllocator* This,
        LPVOID pv);

    ULONG (STDMETHODCALLTYPE *GetSize)(
        IMimeAllocator* This,
        LPVOID pv);

    int (STDMETHODCALLTYPE *DidAlloc)(
        IMimeAllocator* This,
        LPVOID pv);

    void (STDMETHODCALLTYPE *HeapMinimize)(
        IMimeAllocator* This);

    /*** IMimeAllocator methods ***/
    HRESULT (STDMETHODCALLTYPE *FreeParamInfoArray)(
        IMimeAllocator* This,
        ULONG cParams,
        LPMIMEPARAMINFO prgParam,
        boolean fFreeArray);

    HRESULT (STDMETHODCALLTYPE *FreeAddressList)(
        IMimeAllocator* This,
        LPADDRESSLIST pList);

    HRESULT (STDMETHODCALLTYPE *FreeAddressProps)(
        IMimeAllocator* This,
        LPADDRESSPROPS pAddress);

    HRESULT (STDMETHODCALLTYPE *ReleaseObjects)(
        IMimeAllocator* This,
        ULONG cObjects,
        IUnknown **prgpUnknown,
        boolean fFreeArray);

    HRESULT (STDMETHODCALLTYPE *FreeEnumHeaderRowArray)(
        IMimeAllocator* This,
        ULONG cRows,
        LPENUMHEADERROW prgRow,
        boolean fFreeArray);

    HRESULT (STDMETHODCALLTYPE *FreeEnumPropertyArray)(
        IMimeAllocator* This,
        ULONG cProps,
        LPENUMPROPERTY prgProp,
        boolean fFreeArray);

    HRESULT (STDMETHODCALLTYPE *FreeThumbprint)(
        IMimeAllocator* This,
        THUMBBLOB *pthumbprint);

    HRESULT (STDMETHODCALLTYPE *PropVariantClear)(
        IMimeAllocator* This,
        LPPROPVARIANT pProp);

    END_INTERFACE
} IMimeAllocatorVtbl;
interface IMimeAllocator {
    CONST_VTBL IMimeAllocatorVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeAllocator_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeAllocator_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeAllocator_Release(This) (This)->lpVtbl->Release(This)
/*** IMalloc methods ***/
#define IMimeAllocator_Alloc(This,cb) (This)->lpVtbl->Alloc(This,cb)
#define IMimeAllocator_Realloc(This,pv,cb) (This)->lpVtbl->Realloc(This,pv,cb)
#define IMimeAllocator_Free(This,pv) (This)->lpVtbl->Free(This,pv)
#define IMimeAllocator_GetSize(This,pv) (This)->lpVtbl->GetSize(This,pv)
#define IMimeAllocator_DidAlloc(This,pv) (This)->lpVtbl->DidAlloc(This,pv)
#define IMimeAllocator_HeapMinimize(This) (This)->lpVtbl->HeapMinimize(This)
/*** IMimeAllocator methods ***/
#define IMimeAllocator_FreeParamInfoArray(This,cParams,prgParam,fFreeArray) (This)->lpVtbl->FreeParamInfoArray(This,cParams,prgParam,fFreeArray)
#define IMimeAllocator_FreeAddressList(This,pList) (This)->lpVtbl->FreeAddressList(This,pList)
#define IMimeAllocator_FreeAddressProps(This,pAddress) (This)->lpVtbl->FreeAddressProps(This,pAddress)
#define IMimeAllocator_ReleaseObjects(This,cObjects,prgpUnknown,fFreeArray) (This)->lpVtbl->ReleaseObjects(This,cObjects,prgpUnknown,fFreeArray)
#define IMimeAllocator_FreeEnumHeaderRowArray(This,cRows,prgRow,fFreeArray) (This)->lpVtbl->FreeEnumHeaderRowArray(This,cRows,prgRow,fFreeArray)
#define IMimeAllocator_FreeEnumPropertyArray(This,cProps,prgProp,fFreeArray) (This)->lpVtbl->FreeEnumPropertyArray(This,cProps,prgProp,fFreeArray)
#define IMimeAllocator_FreeThumbprint(This,pthumbprint) (This)->lpVtbl->FreeThumbprint(This,pthumbprint)
#define IMimeAllocator_PropVariantClear(This,pProp) (This)->lpVtbl->PropVariantClear(This,pProp)
#endif

#endif

HRESULT STDMETHODCALLTYPE IMimeAllocator_FreeParamInfoArray_Proxy(
    IMimeAllocator* This,
    ULONG cParams,
    LPMIMEPARAMINFO prgParam,
    boolean fFreeArray);
void __RPC_STUB IMimeAllocator_FreeParamInfoArray_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeAllocator_FreeAddressList_Proxy(
    IMimeAllocator* This,
    LPADDRESSLIST pList);
void __RPC_STUB IMimeAllocator_FreeAddressList_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeAllocator_FreeAddressProps_Proxy(
    IMimeAllocator* This,
    LPADDRESSPROPS pAddress);
void __RPC_STUB IMimeAllocator_FreeAddressProps_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeAllocator_ReleaseObjects_Proxy(
    IMimeAllocator* This,
    ULONG cObjects,
    IUnknown **prgpUnknown,
    boolean fFreeArray);
void __RPC_STUB IMimeAllocator_ReleaseObjects_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeAllocator_FreeEnumHeaderRowArray_Proxy(
    IMimeAllocator* This,
    ULONG cRows,
    LPENUMHEADERROW prgRow,
    boolean fFreeArray);
void __RPC_STUB IMimeAllocator_FreeEnumHeaderRowArray_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeAllocator_FreeEnumPropertyArray_Proxy(
    IMimeAllocator* This,
    ULONG cProps,
    LPENUMPROPERTY prgProp,
    boolean fFreeArray);
void __RPC_STUB IMimeAllocator_FreeEnumPropertyArray_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeAllocator_FreeThumbprint_Proxy(
    IMimeAllocator* This,
    THUMBBLOB *pthumbprint);
void __RPC_STUB IMimeAllocator_FreeThumbprint_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IMimeAllocator_PropVariantClear_Proxy(
    IMimeAllocator* This,
    LPPROPVARIANT pProp);
void __RPC_STUB IMimeAllocator_PropVariantClear_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IMimeAllocator_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeObjResolver interface
 */
#ifndef __IMimeObjResolver_INTERFACE_DEFINED__
#define __IMimeObjResolver_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeObjResolver, 0xfeceaffd, 0xc441, 0x11d1, 0x96,0x0e, 0x00,0xc0,0x4f,0xbd,0x7c,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeObjResolver : public IUnknown
{
};
#else
typedef struct IMimeObjResolverVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeObjResolver* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeObjResolver* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeObjResolver* This);

    END_INTERFACE
} IMimeObjResolverVtbl;
interface IMimeObjResolver {
    CONST_VTBL IMimeObjResolverVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeObjResolver_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeObjResolver_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeObjResolver_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeObjResolver_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IFontCache interface
 */
#ifndef __IFontCache_INTERFACE_DEFINED__
#define __IFontCache_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFontCache, 0xb0d17fc2, 0x7bc4, 0x11d1, 0xbd,0xfa, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IFontCache : public IUnknown
{
};
#else
typedef struct IFontCacheVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFontCache* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFontCache* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFontCache* This);

    END_INTERFACE
} IFontCacheVtbl;
interface IFontCache {
    CONST_VTBL IFontCacheVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IFontCache_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFontCache_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFontCache_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IFontCache_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IFontCacheNotify interface
 */
#ifndef __IFontCacheNotify_INTERFACE_DEFINED__
#define __IFontCacheNotify_INTERFACE_DEFINED__

DEFINE_GUID(IID_IFontCacheNotify, 0xb0d17fc5, 0x7bc4, 0x11d1, 0xbd,0xfa, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IFontCacheNotify : public IUnknown
{
};
#else
typedef struct IFontCacheNotifyVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IFontCacheNotify* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IFontCacheNotify* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IFontCacheNotify* This);

    END_INTERFACE
} IFontCacheNotifyVtbl;
interface IFontCacheNotify {
    CONST_VTBL IFontCacheNotifyVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IFontCacheNotify_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IFontCacheNotify_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IFontCacheNotify_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IFontCacheNotify_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEditTag interface
 */
#ifndef __IMimeEditTag_INTERFACE_DEFINED__
#define __IMimeEditTag_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeEditTag, 0x70183210, 0x7b36, 0x11d2, 0x8c,0x12, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeEditTag : public IUnknown
{
};
#else
typedef struct IMimeEditTagVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEditTag* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEditTag* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEditTag* This);

    END_INTERFACE
} IMimeEditTagVtbl;
interface IMimeEditTag {
    CONST_VTBL IMimeEditTagVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeEditTag_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEditTag_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEditTag_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeEditTag_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeEditTagCollection interface
 */
#ifndef __IMimeEditTagCollection_INTERFACE_DEFINED__
#define __IMimeEditTagCollection_INTERFACE_DEFINED__

DEFINE_GUID(IID_IMimeEditTagCollection, 0xd09ee528, 0x7b38, 0x11d2, 0x8c,0x12, 0x00,0xc0,0x4f,0xa3,0x10,0x09);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeEditTagCollection : public IUnknown
{
};
#else
typedef struct IMimeEditTagCollectionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeEditTagCollection* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeEditTagCollection* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeEditTagCollection* This);

    END_INTERFACE
} IMimeEditTagCollectionVtbl;
interface IMimeEditTagCollection {
    CONST_VTBL IMimeEditTagCollectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeEditTagCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeEditTagCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeEditTagCollection_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeEditTagCollection_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IMimeSecurityCallback interface
 */
#ifndef __IMimeSecurityCallback_INTERFACE_DEFINED__
#define __IMimeSecurityCallback_INTERFACE_DEFINED__

#define CMS_RECIPIENT_INFO_TYPE_UNKNOWN                0
#define CMS_RECIPIENT_INFO_TYPE_KEYTRANS               1
#define CMS_RECIPIENT_INFO_TYPE_KEYAGREE               2
#define CMS_RECIPIENT_INFO_TYPE_MAIL_LIST              3
#define CMS_RECIPIENT_INFO_PUBKEY_CERTIFICATE          0
#define CMS_RECIPIENT_INFO_PUBKEY_KEYTRANS             1
#define CMS_RECIPIENT_INFO_PUBKEY_PROVIDER             2
#define CMS_RECIPIENT_INFO_PUBKEY_EPHEMERAL_KEYAGREE   3
#define CMS_RECIPIENT_INFO_PUBKEY_STATIC_KEYAGREE      4
#define CMS_RECIPIENT_INFO_KEYID_CERTIFICATE           0
#define CMS_RECIPIENT_INFO_KEYID_ISSUERSERIAL          1
#define CMS_RECIPIENT_INFO_KEYID_KEY_ID                2
DEFINE_GUID(IID_IMimeSecurityCallback, 0xba715ae0, 0xa740, 0x11d2, 0x8b,0x22, 0x00,0x80,0xc7,0x6b,0x34,0xc6);
#if defined(__cplusplus) && !defined(CINTERFACE)
interface IMimeSecurityCallback : public IUnknown
{
};
#else
typedef struct IMimeSecurityCallbackVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IMimeSecurityCallback* This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IMimeSecurityCallback* This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IMimeSecurityCallback* This);

    END_INTERFACE
} IMimeSecurityCallbackVtbl;
interface IMimeSecurityCallback {
    CONST_VTBL IMimeSecurityCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IMimeSecurityCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IMimeSecurityCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IMimeSecurityCallback_Release(This) (This)->lpVtbl->Release(This)
#endif

#endif


#endif  /* __IMimeSecurityCallback_INTERFACE_DEFINED__ */

#ifdef __cplusplus
 extern "C" {
#endif

HRESULT WINAPI MimeOleSetCompatMode(DWORD);
HRESULT WINAPI MimeOleContentTypeFromUrl(LPCSTR,LPCSTR,LPSTR*);
HRESULT WINAPI MimeOleParseMhtmlUrl(LPSTR,LPSTR*,LPSTR*);
HRESULT WINAPI MimeOleObjectFromUrl(LPCSTR,BOOL,REFIID,LPVOID*,IUnknown**);
HRESULT WINAPI MimeOleObjectFromMoniker(BINDF,IMoniker*,IBindCtx*,REFIID,LPVOID*,IMoniker**);
HRESULT WINAPI MimeOleCombineURL(LPCSTR,ULONG,LPCSTR,ULONG,BOOL,LPSTR*);
HRESULT WINAPI MimeOleGetSubjectFileName(IMimePropertySet*,ULONG*,ULONG*,LPSTR,ULONG);
HRESULT WINAPI MimeOleCreateWebDocument(LPCSTR,LPCSTR,IMimeWebDocument**);
HRESULT WINAPI MimeOleGetRelatedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);
HRESULT WINAPI MimeOleGetMixedSection(IMimeMessageTree*,boolean,LPHBODY,boolean*);
HRESULT WINAPI MimeOleGetAlternativeSection(IMimeMessageTree*,LPHBODY,boolean*);
HRESULT WINAPI MimeOleGenerateCID(LPSTR,ULONG,boolean);
HRESULT WINAPI MimeOleGenerateMID(LPSTR,ULONG,boolean);
HRESULT WINAPI MimeOleCreateByteStream(IStream**);
HRESULT WINAPI MimeOlGetPropertySchema(IMimePropertySchema**);
HRESULT WINAPI MimeOleQueryString(LPCSTR,LPCSTR,boolean,boolean);
HRESULT WINAPI MimeOleGetPropA(IMimePropertySet*,LPCSTR,DWORD,LPSTR*);
HRESULT WINAPI MimeOleSetPropA(IMimePropertySet*,LPCSTR,DWORD,LPCSTR);
HRESULT WINAPI MimeOleGetPropW(IMimePropertySet*,LPCSTR,DWORD,LPWSTR*);
HRESULT WINAPI MimeOleSetPropW(IMimePropertySet*,LPCSTR,DWORD,LPCWSTR);
HRESULT WINAPI MimeOleGetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPSTR*);
HRESULT WINAPI MimeOleSetBodyPropA(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCSTR);
HRESULT WINAPI MimeOleGetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPWSTR*);
HRESULT WINAPI MimeOleSetBodyPropW(IMimeMessageTree*,HBODY,LPCSTR,DWORD,LPCWSTR);
HRESULT WINAPI MimeOleCreateHeaderTable(IMimeHeaderTable**);
HRESULT WINAPI MimeOleVariantFree(LPPROPVARIANT);
HRESULT WINAPI MimeOleVariantCopy(LPPROPVARIANT,LPPROPVARIANT);
HRESULT WINAPI MimeOleGetExtClassId(LPCSTR,LPCLSID);
HRESULT WINAPI MimeOleEncodeHeader(HCHARSET,LPPROPVARIANT,LPSTR*,LPRFC1522INFO);
HRESULT WINAPI MimeOleDecodeHeader(HCHARSET,LPCSTR,LPPROPVARIANT,LPRFC1522INFO);
HRESULT WINAPI MimeOleRfc1522Decode(LPCSTR,LPSTR,ULONG,LPSTR*);
HRESULT WINAPI MimeOleRfc1522Encode(LPCSTR,HCHARSET,LPSTR*);
HRESULT WINAPI MimeOleGetInternat(IMimeInternational**);
HRESULT WINAPI MimeOleFindCharset(LPCSTR,LPHCHARSET);
HRESULT WINAPI MimeOleGetCharsetInfo(HCHARSET,LPINETCSETINFO);
HRESULT WINAPI MimeOleGetCodePageInfo(HCHARSET,LPCODEPAGEINFO);
HRESULT WINAPI MimeOleGetDefaultCharset(LPHCHARSET);
HRESULT WINAPI MimeOleSetDefaultCharset(HCHARSET);
HRESULT WINAPI MimeOleGetCodePageCharset(CODEPAGEID,CHARSETTYPE,LPHCHARSET);
HRESULT WINAPI MimeOleCreateVirtualStream(IStream**);
HRESULT WINAPI MimeOleOpenFileStream(LPCSTR,DWORD,DWORD,IStream**);
HRESULT WINAPI MimeOleIsTnefStream(IStream*);
HRESULT WINAPI MimeOleGenerateFileName(LPCSTR,LPCSTR,LPCSTR,LPSTR*);
HRESULT WINAPI MimeOleGetFileExtension(LPCSTR,LPSTR,ULONG);
HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity**);
HRESULT WINAPI MimeOleInetDateToFileTime(LPCSTR,LPFILETIME);
HRESULT WINAPI MimeOleFileTimeToInetDate(LPFILETIME,LPSTR,ULONG);
HRESULT WINAPI MimeOleCreateMessageParts(IMimeMessageParts**);
HRESULT WINAPI MimeOleGetAllocator(IMimeAllocator**);
HRESULT WINAPI MimeOleParseRfc822Address(DWORD,ENCODINGTYPE,LPCSTR,LPADDRESSLIST);
HRESULT WINAPI MimeOleCreateMessage(IUnknown*,IMimeMessage**);
HRESULT WINAPI MimeOleMergePartialHeaders(IStream*,IStream*);
HRESULT WINAPI MimeOleEscapeString(CODEPAGEID,LPCSTR,LPSTR*);
HRESULT WINAPI MimeOleGetExtContentType(LPCSTR,LPSTR*);
HRESULT WINAPI MimeOleGetContentTypeExt(LPCSTR,LPSTR*);
HRESULT WINAPI MimeOleGetFileInfo(LPSTR,LPSTR*,LPSTR*,LPSTR*,LPSTR*,LPSTR*);
HRESULT WINAPI MimeOleCreateBody(IMimeBody**);
HRESULT WINAPI MimeOleCreatePropertySet(IUnknown*,IMimePropertySet**);
HRESULT WINAPI MimeOleCreateMessageTree(IUnknown*,IMimeMessageTree**);
HRESULT WINAPI MimeOleGetCertsFromThumbprints(THUMBBLOB*,X509CERTRESULT*,const HCERTSTORE*,DWORD);
HRESULT WINAPI MimeOleSplitMessage(IMimeMessage*,ULONG,IMimeMessageParts**);
HRESULT WINAPI MimeOleClearDirtyTree(IMimeMessageTree*);
HRESULT WINAPI MimeOleConvertEnrichedToHTML(CODEPAGEID,IStream*,IStream*);
HRESULT WINAPI MimeOleSMimeCapsToDlg(LPBYTE,DWORD,DWORD,PCX509CERT*,HWND,DWORD,DWORD,DWORD);
HRESULT WINAPI MimeOleSMimeCapsFromDlg(HWND,DWORD,DWORD,DWORD,LPBYTE,DWORD*);
HRESULT WINAPI MimeOleSMimeCapInit(LPBYTE,DWORD,LPVOID*);
HRESULT WINAPI MimeOleSMimeCapAddSMimeCap(LPBYTE,DWORD,LPVOID);
HRESULT WINAPI MimeOleSMimeCapAddCert(LPBYTE,DWORD,BOOL,LPVOID);
HRESULT WINAPI MimeOleSMimeCapGetEncAlg(LPVOID,LPBYTE,DWORD*,DWORD*);
HRESULT WINAPI MimeOleSMimeCapGetHashAlg(LPVOID,LPBYTE,DWORD*,DWORD*);
HRESULT WINAPI MimeOleSMimeCapRelease(LPVOID);
HRESULT WINAPI MimeOleAlgNameFromSMimeap(LPBYTE,DWORD,LPCSTR*);
HRESULT WINAPI MimeOleAlgStrengthFromSMimeCap(LPBYTE,DWORD,BOOL,DWORD*);
HRESULT WINAPI MimeOleSMimeCapsFull(LPVOID,BOOL,BOOL,LPBYTE,DWORD*);
HRESULT WINAPI MimeOleCreateHashTable(DWORD,BOOL,IHashTable**);
HRESULT WINAPI MimeOleStripHeaders(IMimeMessage*,HBODY,LPCSTR,LPCSTR,IStream**);
HRESULT WINAPI MimeEditViewSource(HWND,IMimeMessage*);
HRESULT WINAPI MimeEditIsSafeToRun(HWND,LPCSTR);
HRESULT WINAPI MimeEditVerifyTrust(HWND,LPCSTR,LPCSTR);
HRESULT WINAPI MimeEditCreateMimeDocument(IUnknown*,IMimeMessage*,DWORD,IMimeMessage**);
HRESULT WINAPI MimeEditGetBackgroundImageUrl(IUnknown*,BSTR*);
HRESULT WINAPI MimeEditDocumentFromStream(IStream*,REFIID,void**);
#ifdef __cplusplus
}
#endif
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);
ULONG           __RPC_USER LPSAFEARRAY_UserSize     (ULONG *, ULONG, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal  (ULONG *, unsigned char *, LPSAFEARRAY *);
unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(ULONG *, unsigned char *, LPSAFEARRAY *);
void            __RPC_USER LPSAFEARRAY_UserFree     (ULONG *, LPSAFEARRAY *);
ULONG           __RPC_USER HWND_UserSize     (ULONG *, ULONG, HWND *);
unsigned char * __RPC_USER HWND_UserMarshal  (ULONG *, unsigned char *, HWND *);
unsigned char * __RPC_USER HWND_UserUnmarshal(ULONG *, unsigned char *, HWND *);
void            __RPC_USER HWND_UserFree     (ULONG *, HWND *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __WIDL_MIMEOLE_H */
