/*** Autogenerated by WIDL 1.3.27 from imnxport.idl - Do not edit ***/

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

#if !defined(COM_NO_WINDOWS_H) && !defined(__WINESRC__)
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __WIDL_IMNXPORT_H
#define __WIDL_IMNXPORT_H

/* Forward declarations */

#ifndef __ITransportCallbackService_FWD_DEFINED__
#define __ITransportCallbackService_FWD_DEFINED__
typedef interface ITransportCallbackService ITransportCallbackService;
#endif

#ifndef __ITransportCallback_FWD_DEFINED__
#define __ITransportCallback_FWD_DEFINED__
typedef interface ITransportCallback ITransportCallback;
#endif

#ifndef __IInternetTransport_FWD_DEFINED__
#define __IInternetTransport_FWD_DEFINED__
typedef interface IInternetTransport IInternetTransport;
#endif

#ifndef __ISMTPCallback_FWD_DEFINED__
#define __ISMTPCallback_FWD_DEFINED__
typedef interface ISMTPCallback ISMTPCallback;
#endif

#ifndef __ISMTPTransport_FWD_DEFINED__
#define __ISMTPTransport_FWD_DEFINED__
typedef interface ISMTPTransport ISMTPTransport;
#endif

#ifndef __ISMTPTransport2_FWD_DEFINED__
#define __ISMTPTransport2_FWD_DEFINED__
typedef interface ISMTPTransport2 ISMTPTransport2;
#endif

#ifndef __IPOP3Callback_FWD_DEFINED__
#define __IPOP3Callback_FWD_DEFINED__
typedef interface IPOP3Callback IPOP3Callback;
#endif

#ifndef __IPOP3Transport_FWD_DEFINED__
#define __IPOP3Transport_FWD_DEFINED__
typedef interface IPOP3Transport IPOP3Transport;
#endif

#ifndef __IRangeList_FWD_DEFINED__
#define __IRangeList_FWD_DEFINED__
typedef interface IRangeList IRangeList;
#endif

#ifndef __IIMAPCallback_FWD_DEFINED__
#define __IIMAPCallback_FWD_DEFINED__
typedef interface IIMAPCallback IIMAPCallback;
#endif

#ifndef __IIMAPTransport_FWD_DEFINED__
#define __IIMAPTransport_FWD_DEFINED__
typedef interface IIMAPTransport IIMAPTransport;
#endif

/* Headers for imported files */

#include <imnact.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __IInternetTransport_FWD_DEFINED__
#define __IInternetTransport_FWD_DEFINED__
typedef interface IInternetTransport IInternetTransport;
#endif

#ifndef __ISMTPTransport_FWD_DEFINED__
#define __ISMTPTransport_FWD_DEFINED__
typedef interface ISMTPTransport ISMTPTransport;
#endif

#ifndef __IPOP3Transport_FWD_DEFINED__
#define __IPOP3Transport_FWD_DEFINED__
typedef interface IPOP3Transport IPOP3Transport;
#endif

#ifndef __IIMAPTransport_FWD_DEFINED__
#define __IIMAPTransport_FWD_DEFINED__
typedef interface IIMAPTransport IIMAPTransport;
#endif

DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);
DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);
DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);
DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);
#ifndef HR_E
#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)
#endif
#ifndef HR_S
#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)
#endif
#define IXP_E_LOAD_SICILY_FAILED     HR_E(0xCC00)
#define IXP_E_INVALID_CERT_CN        HR_E(0xCC01)
#define IXP_E_INVALID_CERT_DATE      HR_E(0xCC02)
#define IXP_E_ALREADY_CONNECTED      HR_E(0xCC03)
#define IXP_E_CONN                   HR_E(0xCC04)
#define IXP_E_NOT_CONNECTED          HR_E(0xCC05)
#define IXP_E_CONN_SEND              HR_E(0xCC06)
#define IXP_E_WOULD_BLOCK            HR_E(0xCC07)
#define IXP_E_INVALID_STATE          HR_E(0xCC08)
#define IXP_E_CONN_RECV              HR_E(0xCC09)
#define IXP_E_INCOMPLETE             HR_E(0xCC0A)
#define IXP_E_BUSY                   HR_E(0xCC0B)
#define IXP_E_NOT_INIT               HR_E(0xCC0C)
#define IXP_E_CANT_FIND_HOST         HR_E(0xCC0D)
#define IXP_E_FAILED_TO_CONNECT      HR_E(0xCC0E)
#define IXP_E_CONNECTION_DROPPED     HR_E(0xCC0F)
#define IXP_E_INVALID_ADDRESS        HR_E(0xCC10)
#define IXP_E_INVALID_ADDRESS_LIST   HR_E(0xCC11)
#define IXP_E_SOCKET_READ_ERROR      HR_E(0xCC12)
#define IXP_E_SOCKET_WRITE_ERROR     HR_E(0xCC13)
#define IXP_E_SCOKET_INIT_ERROR      HR_E(0xCC14)
#define IXP_E_SOCKET_CONNECT_ERROR   HR_E(0xCC15)
#define IXP_E_INVALID_ACCOUNT        HR_E(0xCC16)
#define IXP_E_USER_CANCEL            HR_E(0xCC17)
#define IXP_E_SICILY_LOGON_FAILED    HR_E(0xCC18)
#define IXP_E_TIMEOUT                HR_E(0xCC19)
#define IXP_E_SECURE_CONNECT_FAILED  HR_E(0xCC1A)
#define IXP_E_SMTP_RESPONSE_ERROR            HR_E(0xCC60)
#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE     HR_E(0xCC61)
#define IXP_E_SMTP_500_SYNTAX_ERROR          HR_E(0xCC62)
#define IXP_E_SMTP_501_PARAM_SYNTAX          HR_E(0xCC63)
#define IXP_E_SMTP_502_COMMAND_NOTIMPL       HR_E(0xCC64)
#define IXP_E_SMTP_503_COMMAND_SEQ           HR_E(0xCC65)
#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)
#define IXP_E_SMTP_421_NOT_AVAILABLE         HR_E(0xCC67)
#define IXP_E_SMTP_450_MAILBOX_BUSY          HR_E(0xCC68)
#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND     HR_E(0xCC69)
#define IXP_E_SMTP_451_ERROR_PROCESSING      HR_E(0xCC6A)
#define IXP_E_SMTP_551_USER_NOT_LOCAL        HR_E(0xCC6B)
#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE     HR_E(0xCC6C)
#define IXP_E_SMTP_552_STORAGE_OVERFLOW      HR_E(0xCC6D)
#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX   HR_E(0xCC6E)
#define IXP_E_SMTP_554_TRANSACT_FAILED       HR_E(0xCC6F)
#define IXP_E_SMTP_211_SYSTEM_STATUS         HR_S(0xCC70)
#define IXP_E_SMTP_214_HELP_MESSAGE          HR_S(0xCC71)
#define IXP_E_SMTP_220_READY                 HR_S(0xCC72)
#define IXP_E_SMTP_221_CLOSING               HR_S(0xCC73)
#define IXP_E_SMTP_250_MAIL_ACTION_OKAY      HR_S(0xCC74)
#define IXP_E_SMTP_251_FORWARDING_MAIL       HR_S(0xCC75)
#define IXP_E_SMTP_354_START_MAIL_INPUT      HR_S(0xCC76)
#define IXP_E_SMTP_CONTINUE                  HR_S(0xCC77)
#define IXP_E_SMTP_334_AUTH_READY_RESPONSE   HR_S(0xCC78)
#define IXP_E_SMTP_245_AUTH_SUCCESS          HR_S(0xCC79)
#define IXP_E_SMTP_REJECTED_SENDER           HR_E(0xCC78)
#define IXP_E_SMTP_REJECTED_RECIPIENTS       HR_E(0xCC79)
#define IXP_E_SMTP_NO_SENDER                 HR_E(0xCC7A)
#define IXP_E_SMTP_NO_RECIPIENTS             HR_E(0xCC7B)
#define IXP_E_SMTP_530_STARTTLS_REQUIRED     HR_E(0xCC7C)
#define IXP_E_SMTP_NO_STARTTLS_SUPPORT       HR_E(0xCC7D)
#define IXP_E_SMTP_NO_DSN_SUPPORT            HR_E(0xCC7E)
#define IXP_E_SMTP_454_STARTTLS_FAILED       HR_E(0xCC7F)
#define CCHMAX_DOMAIN (256)

#define CCHMAX_PHONE_NUMBER (128)

#define DEFAULT_IMAP_PORT (143)

#define DEFAULT_POP3_PORT (110)

#define DEFAULT_SMTP_PORT (25)

#define DEFAULT_NNTP_PORT (119)

typedef enum tagINETADDRTYPE {
    ADDR_TO = 0,
    ADDR_FROM = 1,
    ADDR_DSN_NEVER = 16,
    ADDR_DSN_SUCCESS = 32,
    ADDR_DSN_FAILURE = 64,
    ADDR_DSN_DELAY = 128
} INETADDRTYPE;
#define ADDR_TOFROM_MASK (0x1)

#define ADDR_DSN_MASK (0xf0)

typedef enum tagDSNRET {
    DSNRET_DEFAULT = 0,
    DSNRET_HDRS = 1,
    DSNRET_FULL = 2
} DSNRET;
typedef struct tagINETADDR {
    INETADDRTYPE addrtype;
    CHAR szEmail[256];
} INETADDR;
typedef struct tagINETADDR *LPINETADDR;
typedef struct tagINETADDRLIST {
    ULONG cAddress;
    LPINETADDR prgAddress;
} INETADDRLIST;
typedef struct tagINETADDRLIST *LPINETADDRLIST;
typedef enum tagRASCONNTYPE {
    RAS_CONNECT_LAN = 0,
    RAS_CONNECT_MANUAL = 1,
    RAS_CONNECT_RAS = 2
} RASCONNTYPE;
typedef enum tagHTTPMAILPROPTYPE {
    HTTPMAIL_PROP_INVALID = 0,
    HTTPMAIL_PROP_ADBAR = 1,
    HTTPMAIL_PROP_CONTACTS = 2,
    HTTPMAIL_PROP_INBOX = 3,
    HTTPMAIL_PROP_OUTBOX = 4,
    HTTPMAIL_PROP_SENDMSG = 5,
    HTTPMAIL_PROP_SENTITEMS = 6,
    HTTPMAIL_PROP_DELETEDITEMS = 7,
    HTTPMAIL_PROP_DRAFTS = 8,
    HTTPMAIL_PROP_MSGFOLDERROOT = 9,
    HTTPMAIL_PROP_SIG = 10,
    HTTPMAIL_PROP_LAST = 11
} HTTPMAILPROPTYPE;
typedef enum tagHTTPMAILSPECIALFOLDER {
    HTTPMAIL_SF_NONE = 0,
    HTTPMAIL_SF_UNRECOGNIZED = 1,
    HTTPMAIL_SF_INBOX = 2,
    HTTPMAIL_SF_DELETEDITEMS = 3,
    HTTPMAIL_SF_DRAFTS = 4,
    HTTPMAIL_SF_OUTBOX = 5,
    HTTPMAIL_SF_SENTITEMS = 6,
    HTTPMAIL_SF_CONTACTS = 7,
    HTTPMAIL_SF_CALENDAR = 8,
    HTTPMAIL_SF_MSNPROMO = 9,
    HTTPMAIL_SF_LAST = 10
} HTTPMAILSPECIALFOLDER;
typedef enum tagHTTPMAILCONTACTTYPE {
    HTTPMAIL_CT_CONTACT = 0,
    HTTPMAIL_CT_GROUP = 1,
    HTTPMAIL_CT_LAST = 2
} HTTPMAILCONTACTTYPE;
#define DAVNAMESPACE_UNKNOWN (0xffffffff)

#define DAVNAMESPACE_DAV (0)

#define DAVNAMESPACE_HOTMAIL (1)

#define DAVNAMESPACE_HTTPMAIL (2)

#define DAVNAMESPACE_MAIL (3)

#define DAVNAMESPACE_CONTACTS (4)

#define ISF_SMTP_USEIPFORHELO        0x01
#define ISF_ALWAYSPROMPTFORPASSWORD  0x02
#define ISF_SSLONSAMEPORT            0x04
#define ISF_QUERYDSNSUPPORT          0x08
#define ISF_QUERYAUTHSUPPORT         0x10
typedef struct INETSERVER {
    CHAR szAccount[256];
    CHAR szUserName[256];
    CHAR szPassword[256];
    CHAR szServerName[256];
    CHAR szConnectoid[256];
    RASCONNTYPE rasconntype;
    DWORD dwPort;
    BOOL fSSL;
    BOOL fTrySicily;
    DWORD dwTimeout;
    DWORD dwFlags;
} INETSERVER;
typedef struct INETSERVER *LPINETSERVER;
typedef enum tagIXPTYPE {
    IXP_NNTP = 0,
    IXP_SMTP = 1,
    IXP_POP3 = 2,
    IXP_IMAP = 3,
    IXP_RAS = 4,
    IXP_HTTPMail = 5
} IXPTYPE;
typedef enum tagIXPSTATUS {
    IXP_FINDINGHOST = 0,
    IXP_CONNECTING = 1,
    IXP_SECURING = 2,
    IXP_CONNECTED = 3,
    IXP_AUTHORIZING = 4,
    IXP_AUTHRETRY = 5,
    IXP_AUTHORIZED = 6,
    IXP_DISCONNECTING = 7,
    IXP_DISCONNECTED = 8,
    IXP_LAST = 9
} IXPSTATUS;
#define DEPTH_INFINITY (0xfffffffe)

typedef DWORD MEMBERINFOFLAGS;
#define HTTP_MEMBERINFO_COMMONPROPS (0x0)

#define HTTP_MEMBERINFO_FOLDERPROPS (0x1)

#define HTTP_MEMBERINFO_MESSAGEPROPS (0x2)

#define HTTP_MEMBERINFO_ALLPROPS (HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS)

typedef DWORD IMAP_MSGFLAGS;
#define IMAP_MSG_NOFLAGS (0x0)

#define IMAP_MSG_ANSWERED (0x1)

#define IMAP_MSG_FLAGGED (0x2)

#define IMAP_MSG_DELETED (0x4)

#define IMAP_MSG_SEEN (0x8)

#define IMAP_MSG_DRAFT (0x10)

#define IMAP_MSG_ALLFLAGS (0x1f)

/*****************************************************************************
 * ITransportCallbackService interface
 */
#ifndef __ITransportCallbackService_INTERFACE_DEFINED__
#define __ITransportCallbackService_INTERFACE_DEFINED__

DEFINE_GUID(IID_ITransportCallbackService, 0xca30f3ff, 0xc9ac, 0x11d1, 0x9a,0x3a, 0x00,0xc0,0x4f,0xa3,0x09,0xd4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ca30f3ff-c9ac-11d1-9a3a-00c04fa309d4")
ITransportCallbackService : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetParentWindow(
        DWORD dwReserved,
        HWND *phwndParent) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAccount(
        LPDWORD pdwServerType,
        IImnAccount **ppAccount) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ITransportCallbackService, 0xca30f3ff, 0xc9ac, 0x11d1, 0x9a,0x3a, 0x00,0xc0,0x4f,0xa3,0x09,0xd4)
#endif
#else
typedef struct ITransportCallbackServiceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ITransportCallbackService methods ***/
    HRESULT (STDMETHODCALLTYPE *GetParentWindow)(
        ITransportCallbackService* This,
        DWORD dwReserved,
        HWND *phwndParent);

    HRESULT (STDMETHODCALLTYPE *GetAccount)(
        ITransportCallbackService* This,
        LPDWORD pdwServerType,
        IImnAccount **ppAccount);

    END_INTERFACE
} ITransportCallbackServiceVtbl;
interface ITransportCallbackService {
    CONST_VTBL ITransportCallbackServiceVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define ITransportCallbackService_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ITransportCallbackService_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ITransportCallbackService_Release(This) (This)->lpVtbl->Release(This)
/*** ITransportCallbackService methods ***/
#define ITransportCallbackService_GetParentWindow(This,dwReserved,phwndParent) (This)->lpVtbl->GetParentWindow(This,dwReserved,phwndParent)
#define ITransportCallbackService_GetAccount(This,pdwServerType,ppAccount) (This)->lpVtbl->GetAccount(This,pdwServerType,ppAccount)
#endif

#endif

HRESULT STDMETHODCALLTYPE ITransportCallbackService_GetParentWindow_Proxy(
    ITransportCallbackService* This,
    DWORD dwReserved,
    HWND *phwndParent);
void __RPC_STUB ITransportCallbackService_GetParentWindow_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ITransportCallbackService_GetAccount_Proxy(
    ITransportCallbackService* This,
    LPDWORD pdwServerType,
    IImnAccount **ppAccount);
void __RPC_STUB ITransportCallbackService_GetAccount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ITransportCallbackService_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ITransportCallback interface
 */
#ifndef __ITransportCallback_INTERFACE_DEFINED__
#define __ITransportCallback_INTERFACE_DEFINED__

typedef struct tagIXPRESULT {
    HRESULT hrResult;
    LPSTR pszResponse;
    UINT uiServerError;
    HRESULT hrServerError;
    DWORD dwSocketError;
    LPSTR pszProblem;
} IXPRESULT;
typedef struct tagIXPRESULT *LPIXPRESULT;
typedef enum tagCMDTYPE {
    CMD_SEND = 0,
    CMD_RESP = 1
} CMDTYPE;
DEFINE_GUID(IID_ITransportCallback, 0x0df2c7e1, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0df2c7e1-3435-11d0-81d0-00c04fd85ab4")
ITransportCallback : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE OnTimeout(
        DWORD *pdwTimeout,
        IInternetTransport *pTransport) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnLogonPrompt(
        LPINETSERVER pInetServer,
        IInternetTransport *pTransport) = 0;

    virtual INT STDMETHODCALLTYPE OnPrompt(
        HRESULT hrError,
        LPCSTR pszText,
        LPCSTR pszCaption,
        UINT uType,
        IInternetTransport *pTransport) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnStatus(
        IXPSTATUS ixpstatus,
        IInternetTransport *pTransport) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnError(
        IXPSTATUS ixpstatus,
        LPIXPRESULT pResult,
        IInternetTransport *pTransport) = 0;

    virtual HRESULT STDMETHODCALLTYPE OnCommand(
        CMDTYPE cmdtype,
        LPSTR pszLine,
        HRESULT hrResponse,
        IInternetTransport *pTransport) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ITransportCallback, 0x0df2c7e1, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct ITransportCallbackVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ITransportCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnTimeout)(
        ITransportCallback* This,
        DWORD *pdwTimeout,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnLogonPrompt)(
        ITransportCallback* This,
        LPINETSERVER pInetServer,
        IInternetTransport *pTransport);

    INT (STDMETHODCALLTYPE *OnPrompt)(
        ITransportCallback* This,
        HRESULT hrError,
        LPCSTR pszText,
        LPCSTR pszCaption,
        UINT uType,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnStatus)(
        ITransportCallback* This,
        IXPSTATUS ixpstatus,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnError)(
        ITransportCallback* This,
        IXPSTATUS ixpstatus,
        LPIXPRESULT pResult,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnCommand)(
        ITransportCallback* This,
        CMDTYPE cmdtype,
        LPSTR pszLine,
        HRESULT hrResponse,
        IInternetTransport *pTransport);

    END_INTERFACE
} ITransportCallbackVtbl;
interface ITransportCallback {
    CONST_VTBL ITransportCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define ITransportCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ITransportCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ITransportCallback_Release(This) (This)->lpVtbl->Release(This)
/*** ITransportCallback methods ***/
#define ITransportCallback_OnTimeout(This,pdwTimeout,pTransport) (This)->lpVtbl->OnTimeout(This,pdwTimeout,pTransport)
#define ITransportCallback_OnLogonPrompt(This,pInetServer,pTransport) (This)->lpVtbl->OnLogonPrompt(This,pInetServer,pTransport)
#define ITransportCallback_OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport) (This)->lpVtbl->OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport)
#define ITransportCallback_OnStatus(This,ixpstatus,pTransport) (This)->lpVtbl->OnStatus(This,ixpstatus,pTransport)
#define ITransportCallback_OnError(This,ixpstatus,pResult,pTransport) (This)->lpVtbl->OnError(This,ixpstatus,pResult,pTransport)
#define ITransportCallback_OnCommand(This,cmdtype,pszLine,hrResponse,pTransport) (This)->lpVtbl->OnCommand(This,cmdtype,pszLine,hrResponse,pTransport)
#endif

#endif

HRESULT STDMETHODCALLTYPE ITransportCallback_OnTimeout_Proxy(
    ITransportCallback* This,
    DWORD *pdwTimeout,
    IInternetTransport *pTransport);
void __RPC_STUB ITransportCallback_OnTimeout_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ITransportCallback_OnLogonPrompt_Proxy(
    ITransportCallback* This,
    LPINETSERVER pInetServer,
    IInternetTransport *pTransport);
void __RPC_STUB ITransportCallback_OnLogonPrompt_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
INT STDMETHODCALLTYPE ITransportCallback_OnPrompt_Proxy(
    ITransportCallback* This,
    HRESULT hrError,
    LPCSTR pszText,
    LPCSTR pszCaption,
    UINT uType,
    IInternetTransport *pTransport);
void __RPC_STUB ITransportCallback_OnPrompt_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ITransportCallback_OnStatus_Proxy(
    ITransportCallback* This,
    IXPSTATUS ixpstatus,
    IInternetTransport *pTransport);
void __RPC_STUB ITransportCallback_OnStatus_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ITransportCallback_OnError_Proxy(
    ITransportCallback* This,
    IXPSTATUS ixpstatus,
    LPIXPRESULT pResult,
    IInternetTransport *pTransport);
void __RPC_STUB ITransportCallback_OnError_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ITransportCallback_OnCommand_Proxy(
    ITransportCallback* This,
    CMDTYPE cmdtype,
    LPSTR pszLine,
    HRESULT hrResponse,
    IInternetTransport *pTransport);
void __RPC_STUB ITransportCallback_OnCommand_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ITransportCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IInternetTransport interface
 */
#ifndef __IInternetTransport_INTERFACE_DEFINED__
#define __IInternetTransport_INTERFACE_DEFINED__

#define iitAUTHENTICATE (TRUE)

#define iitDONT_AUTHENTICATe (FALSE)

#define iitENABLE_ONCOMMAND (TRUE)

#define iitDISABLE_ONCOMMAND (FALSE)

typedef enum tagIXPISSTATE {
    IXP_IS_CONNECTED = 0,
    IXP_IS_BUSY = 1,
    IXP_IS_READY = 2,
    IXP_IS_AUTHENTICATED = 3
} IXPISSTATE;
DEFINE_GUID(IID_IInternetTransport, 0x1f636c01, 0x364e, 0x11d0, 0x81,0xd3, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1f636c01-364e-11d0-81d3-00c04fd85ab4")
IInternetTransport : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetServerInfo(
        LPINETSERVER pInetServer) = 0;

    virtual IXPTYPE STDMETHODCALLTYPE GetIXPType(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsState(
        IXPISSTATE isstate) = 0;

    virtual HRESULT STDMETHODCALLTYPE InetServerFromAccount(
        IImnAccount *pAccount,
        LPINETSERVER pInetServer) = 0;

    virtual HRESULT STDMETHODCALLTYPE Connect(
        LPINETSERVER pInetServer,
        boolean fAuthenticate,
        boolean fCommandLogging) = 0;

    virtual HRESULT STDMETHODCALLTYPE HandsOffCallback(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Disconnect(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE DropConnection(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStatus(
        IXPSTATUS *pCurrentStatus) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IInternetTransport, 0x1f636c01, 0x364e, 0x11d0, 0x81,0xd3, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IInternetTransportVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetTransport methods ***/
    HRESULT (STDMETHODCALLTYPE *GetServerInfo)(
        IInternetTransport* This,
        LPINETSERVER pInetServer);

    IXPTYPE (STDMETHODCALLTYPE *GetIXPType)(
        IInternetTransport* This);

    HRESULT (STDMETHODCALLTYPE *IsState)(
        IInternetTransport* This,
        IXPISSTATE isstate);

    HRESULT (STDMETHODCALLTYPE *InetServerFromAccount)(
        IInternetTransport* This,
        IImnAccount *pAccount,
        LPINETSERVER pInetServer);

    HRESULT (STDMETHODCALLTYPE *Connect)(
        IInternetTransport* This,
        LPINETSERVER pInetServer,
        boolean fAuthenticate,
        boolean fCommandLogging);

    HRESULT (STDMETHODCALLTYPE *HandsOffCallback)(
        IInternetTransport* This);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        IInternetTransport* This);

    HRESULT (STDMETHODCALLTYPE *DropConnection)(
        IInternetTransport* This);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        IInternetTransport* This,
        IXPSTATUS *pCurrentStatus);

    END_INTERFACE
} IInternetTransportVtbl;
interface IInternetTransport {
    CONST_VTBL IInternetTransportVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IInternetTransport_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IInternetTransport_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IInternetTransport_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetTransport methods ***/
#define IInternetTransport_GetServerInfo(This,pInetServer) (This)->lpVtbl->GetServerInfo(This,pInetServer)
#define IInternetTransport_GetIXPType(This) (This)->lpVtbl->GetIXPType(This)
#define IInternetTransport_IsState(This,isstate) (This)->lpVtbl->IsState(This,isstate)
#define IInternetTransport_InetServerFromAccount(This,pAccount,pInetServer) (This)->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer)
#define IInternetTransport_Connect(This,pInetServer,fAuthenticate,fCommandLogging) (This)->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging)
#define IInternetTransport_HandsOffCallback(This) (This)->lpVtbl->HandsOffCallback(This)
#define IInternetTransport_Disconnect(This) (This)->lpVtbl->Disconnect(This)
#define IInternetTransport_DropConnection(This) (This)->lpVtbl->DropConnection(This)
#define IInternetTransport_GetStatus(This,pCurrentStatus) (This)->lpVtbl->GetStatus(This,pCurrentStatus)
#endif

#endif

HRESULT STDMETHODCALLTYPE IInternetTransport_GetServerInfo_Proxy(
    IInternetTransport* This,
    LPINETSERVER pInetServer);
void __RPC_STUB IInternetTransport_GetServerInfo_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
IXPTYPE STDMETHODCALLTYPE IInternetTransport_GetIXPType_Proxy(
    IInternetTransport* This);
void __RPC_STUB IInternetTransport_GetIXPType_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetTransport_IsState_Proxy(
    IInternetTransport* This,
    IXPISSTATE isstate);
void __RPC_STUB IInternetTransport_IsState_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetTransport_InetServerFromAccount_Proxy(
    IInternetTransport* This,
    IImnAccount *pAccount,
    LPINETSERVER pInetServer);
void __RPC_STUB IInternetTransport_InetServerFromAccount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetTransport_Connect_Proxy(
    IInternetTransport* This,
    LPINETSERVER pInetServer,
    boolean fAuthenticate,
    boolean fCommandLogging);
void __RPC_STUB IInternetTransport_Connect_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetTransport_HandsOffCallback_Proxy(
    IInternetTransport* This);
void __RPC_STUB IInternetTransport_HandsOffCallback_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetTransport_Disconnect_Proxy(
    IInternetTransport* This);
void __RPC_STUB IInternetTransport_Disconnect_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetTransport_DropConnection_Proxy(
    IInternetTransport* This);
void __RPC_STUB IInternetTransport_DropConnection_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IInternetTransport_GetStatus_Proxy(
    IInternetTransport* This,
    IXPSTATUS *pCurrentStatus);
void __RPC_STUB IInternetTransport_GetStatus_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IInternetTransport_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISMTPCallback interface
 */
#ifndef __ISMTPCallback_INTERFACE_DEFINED__
#define __ISMTPCallback_INTERFACE_DEFINED__

typedef enum tagSMTPCOMMAND {
    SMTP_NONE = 0,
    SMTP_BANNER = 1,
    SMTP_CONNECTED = 2,
    SMTP_SEND_MESSAGE = 3,
    SMTP_AUTH = 4,
    SMTP_EHLO = 5,
    SMTP_HELO = 6,
    SMTP_MAIL = 7,
    SMTP_RCPT = 8,
    SMTP_RSET = 9,
    SMTP_QUIT = 10,
    SMTP_DATA = 11,
    SMTP_DOT = 12,
    SMTP_SEND_STREAM = 13,
    SMTP_CUSTOM = 14
} SMTPCOMMAND;
typedef struct tagSMTPSTREAM {
    DWORD cbIncrement;
    DWORD cbCurrent;
    DWORD cbTotal;
} SMTPSTREAM;
typedef struct tagSMTPSTREAM *LPSMTPSTREAM;
typedef struct tagSMTPRESPONSE {
    SMTPCOMMAND command;
    BOOL fDone;
    IXPRESULT rIxpResult;
    ISMTPTransport *pTransport;
    union {
        SMTPSTREAM rStreamInfo;
    } DUMMYUNIONNAME;
} SMTPRESPONSE;
typedef struct tagSMTPRESPONSE *LPSMTPRESPONSE;
DEFINE_GUID(IID_ISMTPCallback, 0x1f636c02, 0x364e, 0x11d0, 0x81,0xd3, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1f636c02-364e-11d0-81d3-00c04fd85ab4")
ISMTPCallback : public ITransportCallback
{
    virtual HRESULT STDMETHODCALLTYPE OnResponse(
        LPSMTPRESPONSE pResponse) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISMTPCallback, 0x1f636c02, 0x364e, 0x11d0, 0x81,0xd3, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct ISMTPCallbackVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ITransportCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnTimeout)(
        ISMTPCallback* This,
        DWORD *pdwTimeout,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnLogonPrompt)(
        ISMTPCallback* This,
        LPINETSERVER pInetServer,
        IInternetTransport *pTransport);

    INT (STDMETHODCALLTYPE *OnPrompt)(
        ISMTPCallback* This,
        HRESULT hrError,
        LPCSTR pszText,
        LPCSTR pszCaption,
        UINT uType,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnStatus)(
        ISMTPCallback* This,
        IXPSTATUS ixpstatus,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnError)(
        ISMTPCallback* This,
        IXPSTATUS ixpstatus,
        LPIXPRESULT pResult,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnCommand)(
        ISMTPCallback* This,
        CMDTYPE cmdtype,
        LPSTR pszLine,
        HRESULT hrResponse,
        IInternetTransport *pTransport);

    /*** ISMTPCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnResponse)(
        ISMTPCallback* This,
        LPSMTPRESPONSE pResponse);

    END_INTERFACE
} ISMTPCallbackVtbl;
interface ISMTPCallback {
    CONST_VTBL ISMTPCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define ISMTPCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISMTPCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISMTPCallback_Release(This) (This)->lpVtbl->Release(This)
/*** ITransportCallback methods ***/
#define ISMTPCallback_OnTimeout(This,pdwTimeout,pTransport) (This)->lpVtbl->OnTimeout(This,pdwTimeout,pTransport)
#define ISMTPCallback_OnLogonPrompt(This,pInetServer,pTransport) (This)->lpVtbl->OnLogonPrompt(This,pInetServer,pTransport)
#define ISMTPCallback_OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport) (This)->lpVtbl->OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport)
#define ISMTPCallback_OnStatus(This,ixpstatus,pTransport) (This)->lpVtbl->OnStatus(This,ixpstatus,pTransport)
#define ISMTPCallback_OnError(This,ixpstatus,pResult,pTransport) (This)->lpVtbl->OnError(This,ixpstatus,pResult,pTransport)
#define ISMTPCallback_OnCommand(This,cmdtype,pszLine,hrResponse,pTransport) (This)->lpVtbl->OnCommand(This,cmdtype,pszLine,hrResponse,pTransport)
/*** ISMTPCallback methods ***/
#define ISMTPCallback_OnResponse(This,pResponse) (This)->lpVtbl->OnResponse(This,pResponse)
#endif

#endif

HRESULT STDMETHODCALLTYPE ISMTPCallback_OnResponse_Proxy(
    ISMTPCallback* This,
    LPSMTPRESPONSE pResponse);
void __RPC_STUB ISMTPCallback_OnResponse_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ISMTPCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISMTPTransport interface
 */
#ifndef __ISMTPTransport_INTERFACE_DEFINED__
#define __ISMTPTransport_INTERFACE_DEFINED__

typedef struct tagSMTPMESSAGE {
    ULONG cbSize;
    LPSTREAM pstmMsg;
    INETADDRLIST rAddressList;
} SMTPMESSAGE;
typedef struct tagSMTPMESSAGE *LPSMTPMESSAGE;
#ifdef WINE_NO_UNICODE_MACROS
#undef SendMessage
#endif
DEFINE_GUID(IID_ISMTPTransport, 0x0df2c7e2, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0df2c7e2-3435-11d0-81d0-00c04fd85ab4")
ISMTPTransport : public IInternetTransport
{
    virtual HRESULT STDMETHODCALLTYPE InitNew(
        LPSTR pszLogFilePath,
        ISMTPCallback *pCallback) = 0;

    virtual HRESULT STDMETHODCALLTYPE SendMessage(
        LPSMTPMESSAGE pMessage) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandMAIL(
        LPSTR pszEmailFrom) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandRCPT(
        LPSTR pszEmailTo) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandEHLO(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandHELO(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandAUTH(
        LPSTR pszAuthType) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandQUIT(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandRSET(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandDATA(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandDOT(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SendDataStream(
        IStream *pStream,
        ULONG cbSize) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISMTPTransport, 0x0df2c7e2, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct ISMTPTransportVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetTransport methods ***/
    HRESULT (STDMETHODCALLTYPE *GetServerInfo)(
        ISMTPTransport* This,
        LPINETSERVER pInetServer);

    IXPTYPE (STDMETHODCALLTYPE *GetIXPType)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *IsState)(
        ISMTPTransport* This,
        IXPISSTATE isstate);

    HRESULT (STDMETHODCALLTYPE *InetServerFromAccount)(
        ISMTPTransport* This,
        IImnAccount *pAccount,
        LPINETSERVER pInetServer);

    HRESULT (STDMETHODCALLTYPE *Connect)(
        ISMTPTransport* This,
        LPINETSERVER pInetServer,
        boolean fAuthenticate,
        boolean fCommandLogging);

    HRESULT (STDMETHODCALLTYPE *HandsOffCallback)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *DropConnection)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        ISMTPTransport* This,
        IXPSTATUS *pCurrentStatus);

    /*** ISMTPTransport methods ***/
    HRESULT (STDMETHODCALLTYPE *InitNew)(
        ISMTPTransport* This,
        LPSTR pszLogFilePath,
        ISMTPCallback *pCallback);

    HRESULT (STDMETHODCALLTYPE *SendMessage)(
        ISMTPTransport* This,
        LPSMTPMESSAGE pMessage);

    HRESULT (STDMETHODCALLTYPE *CommandMAIL)(
        ISMTPTransport* This,
        LPSTR pszEmailFrom);

    HRESULT (STDMETHODCALLTYPE *CommandRCPT)(
        ISMTPTransport* This,
        LPSTR pszEmailTo);

    HRESULT (STDMETHODCALLTYPE *CommandEHLO)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *CommandHELO)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *CommandAUTH)(
        ISMTPTransport* This,
        LPSTR pszAuthType);

    HRESULT (STDMETHODCALLTYPE *CommandQUIT)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *CommandRSET)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *CommandDATA)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *CommandDOT)(
        ISMTPTransport* This);

    HRESULT (STDMETHODCALLTYPE *SendDataStream)(
        ISMTPTransport* This,
        IStream *pStream,
        ULONG cbSize);

    END_INTERFACE
} ISMTPTransportVtbl;
interface ISMTPTransport {
    CONST_VTBL ISMTPTransportVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define ISMTPTransport_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISMTPTransport_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISMTPTransport_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetTransport methods ***/
#define ISMTPTransport_GetServerInfo(This,pInetServer) (This)->lpVtbl->GetServerInfo(This,pInetServer)
#define ISMTPTransport_GetIXPType(This) (This)->lpVtbl->GetIXPType(This)
#define ISMTPTransport_IsState(This,isstate) (This)->lpVtbl->IsState(This,isstate)
#define ISMTPTransport_InetServerFromAccount(This,pAccount,pInetServer) (This)->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer)
#define ISMTPTransport_Connect(This,pInetServer,fAuthenticate,fCommandLogging) (This)->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging)
#define ISMTPTransport_HandsOffCallback(This) (This)->lpVtbl->HandsOffCallback(This)
#define ISMTPTransport_Disconnect(This) (This)->lpVtbl->Disconnect(This)
#define ISMTPTransport_DropConnection(This) (This)->lpVtbl->DropConnection(This)
#define ISMTPTransport_GetStatus(This,pCurrentStatus) (This)->lpVtbl->GetStatus(This,pCurrentStatus)
/*** ISMTPTransport methods ***/
#define ISMTPTransport_InitNew(This,pszLogFilePath,pCallback) (This)->lpVtbl->InitNew(This,pszLogFilePath,pCallback)
#define ISMTPTransport_SendMessage(This,pMessage) (This)->lpVtbl->SendMessage(This,pMessage)
#define ISMTPTransport_CommandMAIL(This,pszEmailFrom) (This)->lpVtbl->CommandMAIL(This,pszEmailFrom)
#define ISMTPTransport_CommandRCPT(This,pszEmailTo) (This)->lpVtbl->CommandRCPT(This,pszEmailTo)
#define ISMTPTransport_CommandEHLO(This) (This)->lpVtbl->CommandEHLO(This)
#define ISMTPTransport_CommandHELO(This) (This)->lpVtbl->CommandHELO(This)
#define ISMTPTransport_CommandAUTH(This,pszAuthType) (This)->lpVtbl->CommandAUTH(This,pszAuthType)
#define ISMTPTransport_CommandQUIT(This) (This)->lpVtbl->CommandQUIT(This)
#define ISMTPTransport_CommandRSET(This) (This)->lpVtbl->CommandRSET(This)
#define ISMTPTransport_CommandDATA(This) (This)->lpVtbl->CommandDATA(This)
#define ISMTPTransport_CommandDOT(This) (This)->lpVtbl->CommandDOT(This)
#define ISMTPTransport_SendDataStream(This,pStream,cbSize) (This)->lpVtbl->SendDataStream(This,pStream,cbSize)
#endif

#endif

HRESULT STDMETHODCALLTYPE ISMTPTransport_InitNew_Proxy(
    ISMTPTransport* This,
    LPSTR pszLogFilePath,
    ISMTPCallback *pCallback);
void __RPC_STUB ISMTPTransport_InitNew_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_SendMessage_Proxy(
    ISMTPTransport* This,
    LPSMTPMESSAGE pMessage);
void __RPC_STUB ISMTPTransport_SendMessage_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_CommandMAIL_Proxy(
    ISMTPTransport* This,
    LPSTR pszEmailFrom);
void __RPC_STUB ISMTPTransport_CommandMAIL_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_CommandRCPT_Proxy(
    ISMTPTransport* This,
    LPSTR pszEmailTo);
void __RPC_STUB ISMTPTransport_CommandRCPT_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_CommandEHLO_Proxy(
    ISMTPTransport* This);
void __RPC_STUB ISMTPTransport_CommandEHLO_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_CommandHELO_Proxy(
    ISMTPTransport* This);
void __RPC_STUB ISMTPTransport_CommandHELO_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_CommandAUTH_Proxy(
    ISMTPTransport* This,
    LPSTR pszAuthType);
void __RPC_STUB ISMTPTransport_CommandAUTH_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_CommandQUIT_Proxy(
    ISMTPTransport* This);
void __RPC_STUB ISMTPTransport_CommandQUIT_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_CommandRSET_Proxy(
    ISMTPTransport* This);
void __RPC_STUB ISMTPTransport_CommandRSET_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_CommandDATA_Proxy(
    ISMTPTransport* This);
void __RPC_STUB ISMTPTransport_CommandDATA_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_CommandDOT_Proxy(
    ISMTPTransport* This);
void __RPC_STUB ISMTPTransport_CommandDOT_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport_SendDataStream_Proxy(
    ISMTPTransport* This,
    IStream *pStream,
    ULONG cbSize);
void __RPC_STUB ISMTPTransport_SendDataStream_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ISMTPTransport_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ISMTPTransport2 interface
 */
#ifndef __ISMTPTransport2_INTERFACE_DEFINED__
#define __ISMTPTransport2_INTERFACE_DEFINED__

typedef struct tagSMTPMESSAGE2 {
    SMTPMESSAGE smtpMsg;
    LPSTR pszDSNENVID;
    DSNRET dsnRet;
    DWORD dwReserved;
    DWORD dwReserved2;
} SMTPMESSAGE2;
typedef struct tagSMTPMESSAGE2 *LPSMTPMESSAGE2;
DEFINE_GUID(IID_ISMTPTransport2, 0x0df2c7ec, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0df2c7ec-3435-11d0-81d0-00c04fd85ab4")
ISMTPTransport2 : public ISMTPTransport
{
    virtual HRESULT STDMETHODCALLTYPE SetWindow(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ResetWindow(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SendMessage2(
        LPSMTPMESSAGE2 pMessage) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandRCPT2(
        LPSTR pszEmailTo,
        INETADDRTYPE atDSN) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ISMTPTransport2, 0x0df2c7ec, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct ISMTPTransport2Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetTransport methods ***/
    HRESULT (STDMETHODCALLTYPE *GetServerInfo)(
        ISMTPTransport2* This,
        LPINETSERVER pInetServer);

    IXPTYPE (STDMETHODCALLTYPE *GetIXPType)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *IsState)(
        ISMTPTransport2* This,
        IXPISSTATE isstate);

    HRESULT (STDMETHODCALLTYPE *InetServerFromAccount)(
        ISMTPTransport2* This,
        IImnAccount *pAccount,
        LPINETSERVER pInetServer);

    HRESULT (STDMETHODCALLTYPE *Connect)(
        ISMTPTransport2* This,
        LPINETSERVER pInetServer,
        boolean fAuthenticate,
        boolean fCommandLogging);

    HRESULT (STDMETHODCALLTYPE *HandsOffCallback)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *DropConnection)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        ISMTPTransport2* This,
        IXPSTATUS *pCurrentStatus);

    /*** ISMTPTransport methods ***/
    HRESULT (STDMETHODCALLTYPE *InitNew)(
        ISMTPTransport2* This,
        LPSTR pszLogFilePath,
        ISMTPCallback *pCallback);

    HRESULT (STDMETHODCALLTYPE *SendMessage)(
        ISMTPTransport2* This,
        LPSMTPMESSAGE pMessage);

    HRESULT (STDMETHODCALLTYPE *CommandMAIL)(
        ISMTPTransport2* This,
        LPSTR pszEmailFrom);

    HRESULT (STDMETHODCALLTYPE *CommandRCPT)(
        ISMTPTransport2* This,
        LPSTR pszEmailTo);

    HRESULT (STDMETHODCALLTYPE *CommandEHLO)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *CommandHELO)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *CommandAUTH)(
        ISMTPTransport2* This,
        LPSTR pszAuthType);

    HRESULT (STDMETHODCALLTYPE *CommandQUIT)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *CommandRSET)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *CommandDATA)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *CommandDOT)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *SendDataStream)(
        ISMTPTransport2* This,
        IStream *pStream,
        ULONG cbSize);

    /*** ISMTPTransport2 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetWindow)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *ResetWindow)(
        ISMTPTransport2* This);

    HRESULT (STDMETHODCALLTYPE *SendMessage2)(
        ISMTPTransport2* This,
        LPSMTPMESSAGE2 pMessage);

    HRESULT (STDMETHODCALLTYPE *CommandRCPT2)(
        ISMTPTransport2* This,
        LPSTR pszEmailTo,
        INETADDRTYPE atDSN);

    END_INTERFACE
} ISMTPTransport2Vtbl;
interface ISMTPTransport2 {
    CONST_VTBL ISMTPTransport2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define ISMTPTransport2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ISMTPTransport2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ISMTPTransport2_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetTransport methods ***/
#define ISMTPTransport2_GetServerInfo(This,pInetServer) (This)->lpVtbl->GetServerInfo(This,pInetServer)
#define ISMTPTransport2_GetIXPType(This) (This)->lpVtbl->GetIXPType(This)
#define ISMTPTransport2_IsState(This,isstate) (This)->lpVtbl->IsState(This,isstate)
#define ISMTPTransport2_InetServerFromAccount(This,pAccount,pInetServer) (This)->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer)
#define ISMTPTransport2_Connect(This,pInetServer,fAuthenticate,fCommandLogging) (This)->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging)
#define ISMTPTransport2_HandsOffCallback(This) (This)->lpVtbl->HandsOffCallback(This)
#define ISMTPTransport2_Disconnect(This) (This)->lpVtbl->Disconnect(This)
#define ISMTPTransport2_DropConnection(This) (This)->lpVtbl->DropConnection(This)
#define ISMTPTransport2_GetStatus(This,pCurrentStatus) (This)->lpVtbl->GetStatus(This,pCurrentStatus)
/*** ISMTPTransport methods ***/
#define ISMTPTransport2_InitNew(This,pszLogFilePath,pCallback) (This)->lpVtbl->InitNew(This,pszLogFilePath,pCallback)
#define ISMTPTransport2_SendMessage(This,pMessage) (This)->lpVtbl->SendMessage(This,pMessage)
#define ISMTPTransport2_CommandMAIL(This,pszEmailFrom) (This)->lpVtbl->CommandMAIL(This,pszEmailFrom)
#define ISMTPTransport2_CommandRCPT(This,pszEmailTo) (This)->lpVtbl->CommandRCPT(This,pszEmailTo)
#define ISMTPTransport2_CommandEHLO(This) (This)->lpVtbl->CommandEHLO(This)
#define ISMTPTransport2_CommandHELO(This) (This)->lpVtbl->CommandHELO(This)
#define ISMTPTransport2_CommandAUTH(This,pszAuthType) (This)->lpVtbl->CommandAUTH(This,pszAuthType)
#define ISMTPTransport2_CommandQUIT(This) (This)->lpVtbl->CommandQUIT(This)
#define ISMTPTransport2_CommandRSET(This) (This)->lpVtbl->CommandRSET(This)
#define ISMTPTransport2_CommandDATA(This) (This)->lpVtbl->CommandDATA(This)
#define ISMTPTransport2_CommandDOT(This) (This)->lpVtbl->CommandDOT(This)
#define ISMTPTransport2_SendDataStream(This,pStream,cbSize) (This)->lpVtbl->SendDataStream(This,pStream,cbSize)
/*** ISMTPTransport2 methods ***/
#define ISMTPTransport2_SetWindow(This) (This)->lpVtbl->SetWindow(This)
#define ISMTPTransport2_ResetWindow(This) (This)->lpVtbl->ResetWindow(This)
#define ISMTPTransport2_SendMessage2(This,pMessage) (This)->lpVtbl->SendMessage2(This,pMessage)
#define ISMTPTransport2_CommandRCPT2(This,pszEmailTo,atDSN) (This)->lpVtbl->CommandRCPT2(This,pszEmailTo,atDSN)
#endif

#endif

HRESULT STDMETHODCALLTYPE ISMTPTransport2_SetWindow_Proxy(
    ISMTPTransport2* This);
void __RPC_STUB ISMTPTransport2_SetWindow_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport2_ResetWindow_Proxy(
    ISMTPTransport2* This);
void __RPC_STUB ISMTPTransport2_ResetWindow_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport2_SendMessage2_Proxy(
    ISMTPTransport2* This,
    LPSMTPMESSAGE2 pMessage);
void __RPC_STUB ISMTPTransport2_SendMessage2_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE ISMTPTransport2_CommandRCPT2_Proxy(
    ISMTPTransport2* This,
    LPSTR pszEmailTo,
    INETADDRTYPE atDSN);
void __RPC_STUB ISMTPTransport2_CommandRCPT2_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __ISMTPTransport2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IPOP3Callback interface
 */
#ifndef __IPOP3Callback_INTERFACE_DEFINED__
#define __IPOP3Callback_INTERFACE_DEFINED__

typedef enum tagPOP3COMMAND {
    POP3_NONE = 0,
    POP3_BANNER = 1,
    POP3_CONNECTED = 2,
    POP3_USER = 3,
    POP3_PASS = 4,
    POP3_AUTH = 5,
    POP3_UIDL = 6,
    POP3_STAT = 7,
    POP3_LIST = 8,
    POP3_DELE = 9,
    POP3_RETR = 10,
    POP3_TOP = 11,
    POP3_NOOP = 12,
    POP3_QUIT = 13,
    POP3_RSET = 14,
    POP3_CUSTOM = 15
} POP3COMMAND;
typedef struct tagPOP3RETR {
    BOOL fHeader;
    BOOL fBody;
    DWORD dwPopId;
    DWORD cbSoFar;
    LPSTR pszLines;
    ULONG cbLines;
} POP3RETR;
typedef struct tagPOP3RETR *LPPOP3RETR;
typedef struct tagPOP3TOP {
    BOOL fHeader;
    BOOL fBody;
    DWORD dwPopId;
    DWORD cPreviewLines;
    DWORD cbSoFar;
    LPSTR pszLines;
    ULONG cbLines;
} POP3TOP;
typedef struct tagPOP3TOP *LPPOP3TOP;
typedef struct tagPOP3LIST {
    DWORD dwPopId;
    DWORD cbSize;
} POP3LIST;
typedef struct tagPOP3LIST *LPPOP3LIST;
typedef struct tagPOP3UIDL {
    DWORD dwPopId;
    LPSTR pszUidl;
} POP3UIDL;
typedef struct tagPOP3UIDL *LPPOP3UIDL;
typedef struct tagPOP3STAT {
    DWORD cMessages;
    DWORD cbMessages;
} POP3STAT;
typedef struct tagPOP3STAT *LPPOP3STAT;
typedef struct tagPOP3RESPONSE {
    POP3COMMAND command;
    BOOL fDone;
    IXPRESULT rIxpResult;
    IPOP3Transport *pTransport;
    BOOL fValidInfo;
    union {
        POP3UIDL rUidlInfo;
        POP3STAT rStatInfo;
        POP3LIST rListInfo;
        DWORD dwPopId;
        POP3RETR rRetrInfo;
        POP3TOP rTopInfo;
    } DUMMYUNIONNAME;
} POP3RESPONSE;
typedef struct tagPOP3RESPONSE *LPPOP3RESPONSE;
DEFINE_GUID(IID_IPOP3Callback, 0x0df2c7e3, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0df2c7e3-3435-11d0-81d0-00c04fd85ab4")
IPOP3Callback : public ITransportCallback
{
    virtual HRESULT STDMETHODCALLTYPE OnResponse(
        LPPOP3RESPONSE pResponse) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPOP3Callback, 0x0df2c7e3, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IPOP3CallbackVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ITransportCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnTimeout)(
        IPOP3Callback* This,
        DWORD *pdwTimeout,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnLogonPrompt)(
        IPOP3Callback* This,
        LPINETSERVER pInetServer,
        IInternetTransport *pTransport);

    INT (STDMETHODCALLTYPE *OnPrompt)(
        IPOP3Callback* This,
        HRESULT hrError,
        LPCSTR pszText,
        LPCSTR pszCaption,
        UINT uType,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnStatus)(
        IPOP3Callback* This,
        IXPSTATUS ixpstatus,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnError)(
        IPOP3Callback* This,
        IXPSTATUS ixpstatus,
        LPIXPRESULT pResult,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnCommand)(
        IPOP3Callback* This,
        CMDTYPE cmdtype,
        LPSTR pszLine,
        HRESULT hrResponse,
        IInternetTransport *pTransport);

    /*** IPOP3Callback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnResponse)(
        IPOP3Callback* This,
        LPPOP3RESPONSE pResponse);

    END_INTERFACE
} IPOP3CallbackVtbl;
interface IPOP3Callback {
    CONST_VTBL IPOP3CallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IPOP3Callback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPOP3Callback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPOP3Callback_Release(This) (This)->lpVtbl->Release(This)
/*** ITransportCallback methods ***/
#define IPOP3Callback_OnTimeout(This,pdwTimeout,pTransport) (This)->lpVtbl->OnTimeout(This,pdwTimeout,pTransport)
#define IPOP3Callback_OnLogonPrompt(This,pInetServer,pTransport) (This)->lpVtbl->OnLogonPrompt(This,pInetServer,pTransport)
#define IPOP3Callback_OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport) (This)->lpVtbl->OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport)
#define IPOP3Callback_OnStatus(This,ixpstatus,pTransport) (This)->lpVtbl->OnStatus(This,ixpstatus,pTransport)
#define IPOP3Callback_OnError(This,ixpstatus,pResult,pTransport) (This)->lpVtbl->OnError(This,ixpstatus,pResult,pTransport)
#define IPOP3Callback_OnCommand(This,cmdtype,pszLine,hrResponse,pTransport) (This)->lpVtbl->OnCommand(This,cmdtype,pszLine,hrResponse,pTransport)
/*** IPOP3Callback methods ***/
#define IPOP3Callback_OnResponse(This,pResponse) (This)->lpVtbl->OnResponse(This,pResponse)
#endif

#endif

HRESULT STDMETHODCALLTYPE IPOP3Callback_OnResponse_Proxy(
    IPOP3Callback* This,
    LPPOP3RESPONSE pResponse);
void __RPC_STUB IPOP3Callback_OnResponse_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IPOP3Callback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IPOP3Transport interface
 */
#ifndef __IPOP3Transport_INTERFACE_DEFINED__
#define __IPOP3Transport_INTERFACE_DEFINED__

typedef enum tagPOP3CMDTYPE {
    POP3CMD_GET_POPID = 0,
    POP3CMD_GET_MARKED = 1,
    POP3CMD_GET_ALL = 2
} POP3CMDTYPE;
typedef enum tagPOP3MARKTYPE {
    POP3_MARK_FOR_TOP = 0x1,
    POP3_MARK_FOR_RETR = 0x2,
    POP3_MARK_FOR_DELE = 0x4,
    POP3_MARK_FOR_UIDL = 0x8,
    POP3_MARK_FOR_LIST = 0x10
} POP3MARKTYPE;
DEFINE_GUID(IID_IPOP3Transport, 0x0df2c7e4, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0df2c7e4-3435-11d0-81d0-00c04fd85ab4")
IPOP3Transport : public IInternetTransport
{
    virtual HRESULT STDMETHODCALLTYPE InitNew(
        LPSTR pszLogFilePath,
        IPOP3Callback *pCallback) = 0;

    virtual HRESULT STDMETHODCALLTYPE MarkItem(
        POP3MARKTYPE marktype,
        DWORD dwPopId,
        boolean fMarked) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandAUTH(
        LPSTR pszAuthType) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandUSER(
        LPSTR pszUserName) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandPASS(
        LPSTR pszPassword) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandLIST(
        POP3CMDTYPE cmdtype,
        DWORD dwPopId) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandTOP(
        POP3CMDTYPE cmdtype,
        DWORD dwPopId,
        DWORD cPreviewLines) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandQUIT(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandSTAT(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandNOOP(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandRSET(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandUIDL(
        POP3CMDTYPE cmdtype,
        DWORD dwPopId) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandDELE(
        POP3CMDTYPE cmdtype,
        DWORD dwPopId) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommandRETR(
        POP3CMDTYPE cmdtype,
        DWORD dwPopId) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IPOP3Transport, 0x0df2c7e4, 0x3435, 0x11d0, 0x81,0xd0, 0x00,0xc0,0x4f,0xd8,0x5a,0xb4)
#endif
#else
typedef struct IPOP3TransportVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetTransport methods ***/
    HRESULT (STDMETHODCALLTYPE *GetServerInfo)(
        IPOP3Transport* This,
        LPINETSERVER pInetServer);

    IXPTYPE (STDMETHODCALLTYPE *GetIXPType)(
        IPOP3Transport* This);

    HRESULT (STDMETHODCALLTYPE *IsState)(
        IPOP3Transport* This,
        IXPISSTATE isstate);

    HRESULT (STDMETHODCALLTYPE *InetServerFromAccount)(
        IPOP3Transport* This,
        IImnAccount *pAccount,
        LPINETSERVER pInetServer);

    HRESULT (STDMETHODCALLTYPE *Connect)(
        IPOP3Transport* This,
        LPINETSERVER pInetServer,
        boolean fAuthenticate,
        boolean fCommandLogging);

    HRESULT (STDMETHODCALLTYPE *HandsOffCallback)(
        IPOP3Transport* This);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        IPOP3Transport* This);

    HRESULT (STDMETHODCALLTYPE *DropConnection)(
        IPOP3Transport* This);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        IPOP3Transport* This,
        IXPSTATUS *pCurrentStatus);

    /*** IPOP3Transport methods ***/
    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IPOP3Transport* This,
        LPSTR pszLogFilePath,
        IPOP3Callback *pCallback);

    HRESULT (STDMETHODCALLTYPE *MarkItem)(
        IPOP3Transport* This,
        POP3MARKTYPE marktype,
        DWORD dwPopId,
        boolean fMarked);

    HRESULT (STDMETHODCALLTYPE *CommandAUTH)(
        IPOP3Transport* This,
        LPSTR pszAuthType);

    HRESULT (STDMETHODCALLTYPE *CommandUSER)(
        IPOP3Transport* This,
        LPSTR pszUserName);

    HRESULT (STDMETHODCALLTYPE *CommandPASS)(
        IPOP3Transport* This,
        LPSTR pszPassword);

    HRESULT (STDMETHODCALLTYPE *CommandLIST)(
        IPOP3Transport* This,
        POP3CMDTYPE cmdtype,
        DWORD dwPopId);

    HRESULT (STDMETHODCALLTYPE *CommandTOP)(
        IPOP3Transport* This,
        POP3CMDTYPE cmdtype,
        DWORD dwPopId,
        DWORD cPreviewLines);

    HRESULT (STDMETHODCALLTYPE *CommandQUIT)(
        IPOP3Transport* This);

    HRESULT (STDMETHODCALLTYPE *CommandSTAT)(
        IPOP3Transport* This);

    HRESULT (STDMETHODCALLTYPE *CommandNOOP)(
        IPOP3Transport* This);

    HRESULT (STDMETHODCALLTYPE *CommandRSET)(
        IPOP3Transport* This);

    HRESULT (STDMETHODCALLTYPE *CommandUIDL)(
        IPOP3Transport* This,
        POP3CMDTYPE cmdtype,
        DWORD dwPopId);

    HRESULT (STDMETHODCALLTYPE *CommandDELE)(
        IPOP3Transport* This,
        POP3CMDTYPE cmdtype,
        DWORD dwPopId);

    HRESULT (STDMETHODCALLTYPE *CommandRETR)(
        IPOP3Transport* This,
        POP3CMDTYPE cmdtype,
        DWORD dwPopId);

    END_INTERFACE
} IPOP3TransportVtbl;
interface IPOP3Transport {
    CONST_VTBL IPOP3TransportVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IPOP3Transport_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IPOP3Transport_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IPOP3Transport_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetTransport methods ***/
#define IPOP3Transport_GetServerInfo(This,pInetServer) (This)->lpVtbl->GetServerInfo(This,pInetServer)
#define IPOP3Transport_GetIXPType(This) (This)->lpVtbl->GetIXPType(This)
#define IPOP3Transport_IsState(This,isstate) (This)->lpVtbl->IsState(This,isstate)
#define IPOP3Transport_InetServerFromAccount(This,pAccount,pInetServer) (This)->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer)
#define IPOP3Transport_Connect(This,pInetServer,fAuthenticate,fCommandLogging) (This)->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging)
#define IPOP3Transport_HandsOffCallback(This) (This)->lpVtbl->HandsOffCallback(This)
#define IPOP3Transport_Disconnect(This) (This)->lpVtbl->Disconnect(This)
#define IPOP3Transport_DropConnection(This) (This)->lpVtbl->DropConnection(This)
#define IPOP3Transport_GetStatus(This,pCurrentStatus) (This)->lpVtbl->GetStatus(This,pCurrentStatus)
/*** IPOP3Transport methods ***/
#define IPOP3Transport_InitNew(This,pszLogFilePath,pCallback) (This)->lpVtbl->InitNew(This,pszLogFilePath,pCallback)
#define IPOP3Transport_MarkItem(This,marktype,dwPopId,fMarked) (This)->lpVtbl->MarkItem(This,marktype,dwPopId,fMarked)
#define IPOP3Transport_CommandAUTH(This,pszAuthType) (This)->lpVtbl->CommandAUTH(This,pszAuthType)
#define IPOP3Transport_CommandUSER(This,pszUserName) (This)->lpVtbl->CommandUSER(This,pszUserName)
#define IPOP3Transport_CommandPASS(This,pszPassword) (This)->lpVtbl->CommandPASS(This,pszPassword)
#define IPOP3Transport_CommandLIST(This,cmdtype,dwPopId) (This)->lpVtbl->CommandLIST(This,cmdtype,dwPopId)
#define IPOP3Transport_CommandTOP(This,cmdtype,dwPopId,cPreviewLines) (This)->lpVtbl->CommandTOP(This,cmdtype,dwPopId,cPreviewLines)
#define IPOP3Transport_CommandQUIT(This) (This)->lpVtbl->CommandQUIT(This)
#define IPOP3Transport_CommandSTAT(This) (This)->lpVtbl->CommandSTAT(This)
#define IPOP3Transport_CommandNOOP(This) (This)->lpVtbl->CommandNOOP(This)
#define IPOP3Transport_CommandRSET(This) (This)->lpVtbl->CommandRSET(This)
#define IPOP3Transport_CommandUIDL(This,cmdtype,dwPopId) (This)->lpVtbl->CommandUIDL(This,cmdtype,dwPopId)
#define IPOP3Transport_CommandDELE(This,cmdtype,dwPopId) (This)->lpVtbl->CommandDELE(This,cmdtype,dwPopId)
#define IPOP3Transport_CommandRETR(This,cmdtype,dwPopId) (This)->lpVtbl->CommandRETR(This,cmdtype,dwPopId)
#endif

#endif

HRESULT STDMETHODCALLTYPE IPOP3Transport_InitNew_Proxy(
    IPOP3Transport* This,
    LPSTR pszLogFilePath,
    IPOP3Callback *pCallback);
void __RPC_STUB IPOP3Transport_InitNew_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_MarkItem_Proxy(
    IPOP3Transport* This,
    POP3MARKTYPE marktype,
    DWORD dwPopId,
    boolean fMarked);
void __RPC_STUB IPOP3Transport_MarkItem_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandAUTH_Proxy(
    IPOP3Transport* This,
    LPSTR pszAuthType);
void __RPC_STUB IPOP3Transport_CommandAUTH_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandUSER_Proxy(
    IPOP3Transport* This,
    LPSTR pszUserName);
void __RPC_STUB IPOP3Transport_CommandUSER_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandPASS_Proxy(
    IPOP3Transport* This,
    LPSTR pszPassword);
void __RPC_STUB IPOP3Transport_CommandPASS_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandLIST_Proxy(
    IPOP3Transport* This,
    POP3CMDTYPE cmdtype,
    DWORD dwPopId);
void __RPC_STUB IPOP3Transport_CommandLIST_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandTOP_Proxy(
    IPOP3Transport* This,
    POP3CMDTYPE cmdtype,
    DWORD dwPopId,
    DWORD cPreviewLines);
void __RPC_STUB IPOP3Transport_CommandTOP_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandQUIT_Proxy(
    IPOP3Transport* This);
void __RPC_STUB IPOP3Transport_CommandQUIT_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandSTAT_Proxy(
    IPOP3Transport* This);
void __RPC_STUB IPOP3Transport_CommandSTAT_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandNOOP_Proxy(
    IPOP3Transport* This);
void __RPC_STUB IPOP3Transport_CommandNOOP_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandRSET_Proxy(
    IPOP3Transport* This);
void __RPC_STUB IPOP3Transport_CommandRSET_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandUIDL_Proxy(
    IPOP3Transport* This,
    POP3CMDTYPE cmdtype,
    DWORD dwPopId);
void __RPC_STUB IPOP3Transport_CommandUIDL_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandDELE_Proxy(
    IPOP3Transport* This,
    POP3CMDTYPE cmdtype,
    DWORD dwPopId);
void __RPC_STUB IPOP3Transport_CommandDELE_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IPOP3Transport_CommandRETR_Proxy(
    IPOP3Transport* This,
    POP3CMDTYPE cmdtype,
    DWORD dwPopId);
void __RPC_STUB IPOP3Transport_CommandRETR_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IPOP3Transport_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IRangeList interface
 */
#ifndef __IRangeList_INTERFACE_DEFINED__
#define __IRangeList_INTERFACE_DEFINED__

#define RL_RANGE_ERROR ((ULONG)-1)

#define RL_LAST_MESSAGE ((ULONG)-1)

DEFINE_GUID(IID_IRangeList, 0x8c438160, 0x4ef6, 0x11d0, 0x87,0x4f, 0x00,0xaa,0x00,0x53,0x0e,0xe9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("8c438160-4ef6-11d0-874f-00aa00530ee9")
IRangeList : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE Clear(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsInRange(
        const ULONG value) = 0;

    virtual HRESULT STDMETHODCALLTYPE Min(
        ULONG *pulMin) = 0;

    virtual HRESULT STDMETHODCALLTYPE Max(
        ULONG *pulMax) = 0;

    virtual HRESULT STDMETHODCALLTYPE Save(
        byte **ppbDestination,
        ULONG *pulSizeOfDestination) = 0;

    virtual HRESULT STDMETHODCALLTYPE Load(
        byte *pbSource,
        const ULONG ulSizeOfSource) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddRange(
        const ULONG low,
        const ULONG high) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddSingleValue(
        const ULONG value) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddRangeList(
        const IRangeList *prl) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteRange(
        const ULONG low,
        const ULONG high) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteSingleValue(
        const ULONG value) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteRangeList(
        const IRangeList *prl) = 0;

    virtual HRESULT STDMETHODCALLTYPE MinOfRange(
        const ULONG value,
        ULONG *pulMinOfRange) = 0;

    virtual HRESULT STDMETHODCALLTYPE MaxOfRange(
        const ULONG value,
        ULONG *pulMaxOfRange) = 0;

    virtual HRESULT STDMETHODCALLTYPE RangeToIMAPString(
        LPSTR *ppszDestination,
        LPDWORD pdwLengthOfDestination) = 0;

    virtual HRESULT STDMETHODCALLTYPE Next(
        const ULONG current,
        ULONG *pulNext) = 0;

    virtual HRESULT STDMETHODCALLTYPE Prev(
        const ULONG current,
        ULONG *pulPrev) = 0;

    virtual HRESULT STDMETHODCALLTYPE Cardinality(
        ULONG *pulCardinality) = 0;

    virtual HRESULT STDMETHODCALLTYPE CardinalityFrom(
        const ULONG ulStartPoint,
        ULONG *pulCardinalityFrom) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IRangeList, 0x8c438160, 0x4ef6, 0x11d0, 0x87,0x4f, 0x00,0xaa,0x00,0x53,0x0e,0xe9)
#endif
#else
typedef struct IRangeListVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IRangeList methods ***/
    HRESULT (STDMETHODCALLTYPE *Clear)(
        IRangeList* This);

    HRESULT (STDMETHODCALLTYPE *IsInRange)(
        IRangeList* This,
        const ULONG value);

    HRESULT (STDMETHODCALLTYPE *Min)(
        IRangeList* This,
        ULONG *pulMin);

    HRESULT (STDMETHODCALLTYPE *Max)(
        IRangeList* This,
        ULONG *pulMax);

    HRESULT (STDMETHODCALLTYPE *Save)(
        IRangeList* This,
        byte **ppbDestination,
        ULONG *pulSizeOfDestination);

    HRESULT (STDMETHODCALLTYPE *Load)(
        IRangeList* This,
        byte *pbSource,
        const ULONG ulSizeOfSource);

    HRESULT (STDMETHODCALLTYPE *AddRange)(
        IRangeList* This,
        const ULONG low,
        const ULONG high);

    HRESULT (STDMETHODCALLTYPE *AddSingleValue)(
        IRangeList* This,
        const ULONG value);

    HRESULT (STDMETHODCALLTYPE *AddRangeList)(
        IRangeList* This,
        const IRangeList *prl);

    HRESULT (STDMETHODCALLTYPE *DeleteRange)(
        IRangeList* This,
        const ULONG low,
        const ULONG high);

    HRESULT (STDMETHODCALLTYPE *DeleteSingleValue)(
        IRangeList* This,
        const ULONG value);

    HRESULT (STDMETHODCALLTYPE *DeleteRangeList)(
        IRangeList* This,
        const IRangeList *prl);

    HRESULT (STDMETHODCALLTYPE *MinOfRange)(
        IRangeList* This,
        const ULONG value,
        ULONG *pulMinOfRange);

    HRESULT (STDMETHODCALLTYPE *MaxOfRange)(
        IRangeList* This,
        const ULONG value,
        ULONG *pulMaxOfRange);

    HRESULT (STDMETHODCALLTYPE *RangeToIMAPString)(
        IRangeList* This,
        LPSTR *ppszDestination,
        LPDWORD pdwLengthOfDestination);

    HRESULT (STDMETHODCALLTYPE *Next)(
        IRangeList* This,
        const ULONG current,
        ULONG *pulNext);

    HRESULT (STDMETHODCALLTYPE *Prev)(
        IRangeList* This,
        const ULONG current,
        ULONG *pulPrev);

    HRESULT (STDMETHODCALLTYPE *Cardinality)(
        IRangeList* This,
        ULONG *pulCardinality);

    HRESULT (STDMETHODCALLTYPE *CardinalityFrom)(
        IRangeList* This,
        const ULONG ulStartPoint,
        ULONG *pulCardinalityFrom);

    END_INTERFACE
} IRangeListVtbl;
interface IRangeList {
    CONST_VTBL IRangeListVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IRangeList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IRangeList_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IRangeList_Release(This) (This)->lpVtbl->Release(This)
/*** IRangeList methods ***/
#define IRangeList_Clear(This) (This)->lpVtbl->Clear(This)
#define IRangeList_IsInRange(This,value) (This)->lpVtbl->IsInRange(This,value)
#define IRangeList_Min(This,pulMin) (This)->lpVtbl->Min(This,pulMin)
#define IRangeList_Max(This,pulMax) (This)->lpVtbl->Max(This,pulMax)
#define IRangeList_Save(This,ppbDestination,pulSizeOfDestination) (This)->lpVtbl->Save(This,ppbDestination,pulSizeOfDestination)
#define IRangeList_Load(This,pbSource,ulSizeOfSource) (This)->lpVtbl->Load(This,pbSource,ulSizeOfSource)
#define IRangeList_AddRange(This,low,high) (This)->lpVtbl->AddRange(This,low,high)
#define IRangeList_AddSingleValue(This,value) (This)->lpVtbl->AddSingleValue(This,value)
#define IRangeList_AddRangeList(This,prl) (This)->lpVtbl->AddRangeList(This,prl)
#define IRangeList_DeleteRange(This,low,high) (This)->lpVtbl->DeleteRange(This,low,high)
#define IRangeList_DeleteSingleValue(This,value) (This)->lpVtbl->DeleteSingleValue(This,value)
#define IRangeList_DeleteRangeList(This,prl) (This)->lpVtbl->DeleteRangeList(This,prl)
#define IRangeList_MinOfRange(This,value,pulMinOfRange) (This)->lpVtbl->MinOfRange(This,value,pulMinOfRange)
#define IRangeList_MaxOfRange(This,value,pulMaxOfRange) (This)->lpVtbl->MaxOfRange(This,value,pulMaxOfRange)
#define IRangeList_RangeToIMAPString(This,ppszDestination,pdwLengthOfDestination) (This)->lpVtbl->RangeToIMAPString(This,ppszDestination,pdwLengthOfDestination)
#define IRangeList_Next(This,current,pulNext) (This)->lpVtbl->Next(This,current,pulNext)
#define IRangeList_Prev(This,current,pulPrev) (This)->lpVtbl->Prev(This,current,pulPrev)
#define IRangeList_Cardinality(This,pulCardinality) (This)->lpVtbl->Cardinality(This,pulCardinality)
#define IRangeList_CardinalityFrom(This,ulStartPoint,pulCardinalityFrom) (This)->lpVtbl->CardinalityFrom(This,ulStartPoint,pulCardinalityFrom)
#endif

#endif

HRESULT STDMETHODCALLTYPE IRangeList_Clear_Proxy(
    IRangeList* This);
void __RPC_STUB IRangeList_Clear_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_IsInRange_Proxy(
    IRangeList* This,
    const ULONG value);
void __RPC_STUB IRangeList_IsInRange_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_Min_Proxy(
    IRangeList* This,
    ULONG *pulMin);
void __RPC_STUB IRangeList_Min_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_Max_Proxy(
    IRangeList* This,
    ULONG *pulMax);
void __RPC_STUB IRangeList_Max_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_Save_Proxy(
    IRangeList* This,
    byte **ppbDestination,
    ULONG *pulSizeOfDestination);
void __RPC_STUB IRangeList_Save_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_Load_Proxy(
    IRangeList* This,
    byte *pbSource,
    const ULONG ulSizeOfSource);
void __RPC_STUB IRangeList_Load_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_AddRange_Proxy(
    IRangeList* This,
    const ULONG low,
    const ULONG high);
void __RPC_STUB IRangeList_AddRange_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_AddSingleValue_Proxy(
    IRangeList* This,
    const ULONG value);
void __RPC_STUB IRangeList_AddSingleValue_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_AddRangeList_Proxy(
    IRangeList* This,
    const IRangeList *prl);
void __RPC_STUB IRangeList_AddRangeList_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_DeleteRange_Proxy(
    IRangeList* This,
    const ULONG low,
    const ULONG high);
void __RPC_STUB IRangeList_DeleteRange_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_DeleteSingleValue_Proxy(
    IRangeList* This,
    const ULONG value);
void __RPC_STUB IRangeList_DeleteSingleValue_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_DeleteRangeList_Proxy(
    IRangeList* This,
    const IRangeList *prl);
void __RPC_STUB IRangeList_DeleteRangeList_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_MinOfRange_Proxy(
    IRangeList* This,
    const ULONG value,
    ULONG *pulMinOfRange);
void __RPC_STUB IRangeList_MinOfRange_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_MaxOfRange_Proxy(
    IRangeList* This,
    const ULONG value,
    ULONG *pulMaxOfRange);
void __RPC_STUB IRangeList_MaxOfRange_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_RangeToIMAPString_Proxy(
    IRangeList* This,
    LPSTR *ppszDestination,
    LPDWORD pdwLengthOfDestination);
void __RPC_STUB IRangeList_RangeToIMAPString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_Next_Proxy(
    IRangeList* This,
    const ULONG current,
    ULONG *pulNext);
void __RPC_STUB IRangeList_Next_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_Prev_Proxy(
    IRangeList* This,
    const ULONG current,
    ULONG *pulPrev);
void __RPC_STUB IRangeList_Prev_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_Cardinality_Proxy(
    IRangeList* This,
    ULONG *pulCardinality);
void __RPC_STUB IRangeList_Cardinality_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IRangeList_CardinalityFrom_Proxy(
    IRangeList* This,
    const ULONG ulStartPoint,
    ULONG *pulCardinalityFrom);
void __RPC_STUB IRangeList_CardinalityFrom_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IRangeList_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IIMAPCallback interface
 */
#ifndef __IIMAPCallback_INTERFACE_DEFINED__
#define __IIMAPCallback_INTERFACE_DEFINED__

typedef DWORD IMAP_MBOXFLAGS;
#define IMAP_MBOX_NOFLAGS (0x0)

#define IMAP_MBOX_MARKED (0x1)

#define IMAP_MBOX_NOINFERIORS (0x2)

#define IMAP_MBOX_NOSELECT (0x4)

#define IMAP_MBOX_UNMARKED (0x8)

#define IMAP_MBOX_ALLFLAGS (0xf)

typedef enum tagIMAP_RESPONSE_TYPE {
    irtERROR_NOTIFICATION = 0,
    irtCOMMAND_COMPLETION = 1,
    irtSERVER_ALERT = 2,
    irtPARSE_ERROR = 3,
    irtMAILBOX_UPDATE = 4,
    irtDELETED_MSG = 5,
    irtFETCH_BODY = 6,
    irtUPDATE_MSG = 7,
    irtAPPLICABLE_FLAGS = 8,
    irtPERMANENT_FLAGS = 9,
    irtUIDVALIDITY = 10,
    irtREADWRITE_STATUS = 11,
    irtTRYCREATE = 12,
    irtSEARCH = 13,
    irtMAILBOX_LISTING = 14,
    irtMAILBOX_STATUS = 15,
    irtAPPEND_PROGRESS = 16,
    irtUPDATE_MSG_EX = 17
} IMAP_RESPONSE_TYPE;
typedef struct tagFETCH_BODY_PART {
    DWORD dwMsgSeqNum;
    LPSTR pszBodyTag;
    DWORD dwTotalBytes;
    DWORD dwSizeOfData;
    DWORD dwOffset;
    BOOL fDone;
    LPSTR pszData;
    LPARAM lpFetchCookie1;
    LPARAM lpFetchCookie2;
} FETCH_BODY_PART;
typedef struct tagFETCH_CMD_RESULTS {
    DWORD dwMsgSeqNum;
    BOOL bMsgFlags;
    IMAP_MSGFLAGS mfMsgFlags;
    BOOL bRFC822Size;
    DWORD dwRFC822Size;
    BOOL bUID;
    DWORD dwUID;
    BOOL bInternalDate;
    FILETIME ftInternalDate;
    LPARAM lpFetchCookie1;
    LPARAM lpFetchCookie2;
} FETCH_CMD_RESULTS;
typedef struct tagIMAPADDR {
    LPSTR pszName;
    LPSTR pszADL;
    LPSTR pszMailbox;
    LPSTR pszHost;
    struct tagIMAPADDR *pNext;
} IMAPADDR;
typedef struct tagFETCH_CMD_RESULTS_EX {
    DWORD dwMsgSeqNum;
    BOOL bMsgFlags;
    IMAP_MSGFLAGS mfMsgFlags;
    BOOL bRFC822Size;
    DWORD dwRFC822Size;
    BOOL bUID;
    DWORD dwUID;
    BOOL bInternalDate;
    FILETIME ftInternalDate;
    LPARAM lpFetchCookie1;
    LPARAM lpFetchCookie2;
    BOOL bEnvelope;
    FILETIME ftENVDate;
    LPSTR pszENVSubject;
    IMAPADDR *piaENVFrom;
    IMAPADDR *piaENVSender;
    IMAPADDR *piaENVReplyTo;
    IMAPADDR *piaENVTo;
    IMAPADDR *piaENVCc;
    IMAPADDR *piaENVBcc;
    LPSTR pszENVInReplyTo;
    LPSTR pszENVMessageID;
    DWORD dwReserved1;
    DWORD dwReserved2;
    DWORD dwReserved3;
} FETCH_CMD_RESULTS_EX;
typedef struct tagMBOX_MSGCOUNT {
    BOOL bGotExistsResponse;
    DWORD dwExists;
    BOOL bGotRecentResponse;
    DWORD dwRecent;
    BOOL bGotUnseenResponse;
    DWORD dwUnseen;
} MBOX_MSGCOUNT;
typedef struct tagIMAP_LISTLSUB_RESPONSE {
    LPSTR pszMailboxName;
    IMAP_MBOXFLAGS imfMboxFlags;
    char cHierarchyChar;
} IMAP_LISTLSUB_RESPONSE;
typedef struct tagIMAP_STATUS_RESPONSE {
    LPSTR pszMailboxName;
    BOOL fMessages;
    DWORD dwMessages;
    BOOL fRecent;
    DWORD dwRecent;
    BOOL fUIDNext;
    DWORD dwUIDNext;
    BOOL fUIDValidity;
    DWORD dwUIDValidity;
    BOOL fUnseen;
    DWORD dwUnseen;
} IMAP_STATUS_RESPONSE;
typedef struct tagAPPEND_PROGRESS {
    DWORD dwUploaded;
    DWORD dwTotal;
} APPEND_PROGRESS;
typedef union tagIMAP_RESPONSE_DATA {
    MBOX_MSGCOUNT *pmcMsgCount;
    DWORD dwDeletedMsgSeqNum;
    FETCH_BODY_PART *pFetchBodyPart;
    FETCH_CMD_RESULTS *pFetchResults;
    IMAP_MSGFLAGS imfImapMessageFlags;
    DWORD dwUIDValidity;
    BOOL bReadWrite;
    IRangeList *prlSearchResults;
    IMAP_LISTLSUB_RESPONSE illrdMailboxListing;
    IMAP_STATUS_RESPONSE *pisrStatusResponse;
    APPEND_PROGRESS *papAppendProgress;
    FETCH_CMD_RESULTS_EX *pFetchResultsEx;
} IMAP_RESPONSE_DATA;
typedef struct tagIMAP_RESPONSE {
    WPARAM wParam;
    LPARAM lParam;
    HRESULT hrResult;
    LPSTR lpszResponseText;
    IMAP_RESPONSE_TYPE irtResponseType;
    IMAP_RESPONSE_DATA irdResponseData;
} IMAP_RESPONSE;
DEFINE_GUID(IID_IIMAPCallback, 0xe9e9d8a3, 0x4edd, 0x11d0, 0x87,0x4f, 0x00,0xaa,0x00,0x53,0x0e,0xe9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e9e9d8a3-4edd-11d0-874f-00aa00530ee9")
IIMAPCallback : public ITransportCallback
{
    virtual HRESULT STDMETHODCALLTYPE OnResponse(
        const IMAP_RESPONSE *pirIMAPResponse) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IIMAPCallback, 0xe9e9d8a3, 0x4edd, 0x11d0, 0x87,0x4f, 0x00,0xaa,0x00,0x53,0x0e,0xe9)
#endif
#else
typedef struct IIMAPCallbackVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ITransportCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnTimeout)(
        IIMAPCallback* This,
        DWORD *pdwTimeout,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnLogonPrompt)(
        IIMAPCallback* This,
        LPINETSERVER pInetServer,
        IInternetTransport *pTransport);

    INT (STDMETHODCALLTYPE *OnPrompt)(
        IIMAPCallback* This,
        HRESULT hrError,
        LPCSTR pszText,
        LPCSTR pszCaption,
        UINT uType,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnStatus)(
        IIMAPCallback* This,
        IXPSTATUS ixpstatus,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnError)(
        IIMAPCallback* This,
        IXPSTATUS ixpstatus,
        LPIXPRESULT pResult,
        IInternetTransport *pTransport);

    HRESULT (STDMETHODCALLTYPE *OnCommand)(
        IIMAPCallback* This,
        CMDTYPE cmdtype,
        LPSTR pszLine,
        HRESULT hrResponse,
        IInternetTransport *pTransport);

    /*** IIMAPCallback methods ***/
    HRESULT (STDMETHODCALLTYPE *OnResponse)(
        IIMAPCallback* This,
        const IMAP_RESPONSE *pirIMAPResponse);

    END_INTERFACE
} IIMAPCallbackVtbl;
interface IIMAPCallback {
    CONST_VTBL IIMAPCallbackVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IIMAPCallback_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IIMAPCallback_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IIMAPCallback_Release(This) (This)->lpVtbl->Release(This)
/*** ITransportCallback methods ***/
#define IIMAPCallback_OnTimeout(This,pdwTimeout,pTransport) (This)->lpVtbl->OnTimeout(This,pdwTimeout,pTransport)
#define IIMAPCallback_OnLogonPrompt(This,pInetServer,pTransport) (This)->lpVtbl->OnLogonPrompt(This,pInetServer,pTransport)
#define IIMAPCallback_OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport) (This)->lpVtbl->OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport)
#define IIMAPCallback_OnStatus(This,ixpstatus,pTransport) (This)->lpVtbl->OnStatus(This,ixpstatus,pTransport)
#define IIMAPCallback_OnError(This,ixpstatus,pResult,pTransport) (This)->lpVtbl->OnError(This,ixpstatus,pResult,pTransport)
#define IIMAPCallback_OnCommand(This,cmdtype,pszLine,hrResponse,pTransport) (This)->lpVtbl->OnCommand(This,cmdtype,pszLine,hrResponse,pTransport)
/*** IIMAPCallback methods ***/
#define IIMAPCallback_OnResponse(This,pirIMAPResponse) (This)->lpVtbl->OnResponse(This,pirIMAPResponse)
#endif

#endif

HRESULT STDMETHODCALLTYPE IIMAPCallback_OnResponse_Proxy(
    IIMAPCallback* This,
    const IMAP_RESPONSE *pirIMAPResponse);
void __RPC_STUB IIMAPCallback_OnResponse_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IIMAPCallback_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IIMAPTransport interface
 */
#ifndef __IIMAPTransport_INTERFACE_DEFINED__
#define __IIMAPTransport_INTERFACE_DEFINED__

#define IMAP_CAPABILITY_IMAP4 (0x1)

#define IMAP_CAPABILITY_IMAP4rev1 (0x2)

#define IMAP_CAPABILITY_IDLE (0x4)

#define IMAP_CAPABILITY_ALLFLAGS (0x7)

DEFINE_GUID(IID_IIMAPTransport, 0xe9e9d8a8, 0x4edd, 0x11d0, 0x87,0x4f, 0x00,0xaa,0x00,0x53,0x0e,0xe9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e9e9d8a8-4edd-11d0-874f-00aa00530ee9")
IIMAPTransport : public IInternetTransport
{
    virtual HRESULT STDMETHODCALLTYPE InitNew(
        LPSTR pszLogFilePath,
        IIMAPCallback *pCBHandler) = 0;

    virtual HRESULT STDMETHODCALLTYPE NewIRangeList(
        IRangeList **pprlNewRangeList) = 0;

    virtual HRESULT STDMETHODCALLTYPE Capability(
        DWORD *pdwCapabilityFlags) = 0;

    virtual HRESULT STDMETHODCALLTYPE Select(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName) = 0;

    virtual HRESULT STDMETHODCALLTYPE Examine(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName) = 0;

    virtual HRESULT STDMETHODCALLTYPE Create(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName) = 0;

    virtual HRESULT STDMETHODCALLTYPE Delete(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName) = 0;

    virtual HRESULT STDMETHODCALLTYPE Rename(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName,
        LPSTR lpszNewMailboxName) = 0;

    virtual HRESULT STDMETHODCALLTYPE Subscribe(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName) = 0;

    virtual HRESULT STDMETHODCALLTYPE Unsubscribe(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName) = 0;

    virtual HRESULT STDMETHODCALLTYPE List(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxNameReference,
        LPSTR lpszMailboxNamePattern) = 0;

    virtual HRESULT STDMETHODCALLTYPE Lsub(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxNameReference,
        LPSTR lpszMailboxNamePattern) = 0;

    virtual HRESULT STDMETHODCALLTYPE Append(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName,
        LPSTR lpszMessageFlags,
        FILETIME ftMessageDateTime,
        LPSTREAM lpstmMessageToSave) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler) = 0;

    virtual HRESULT STDMETHODCALLTYPE Expunge(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler) = 0;

    virtual HRESULT STDMETHODCALLTYPE Search(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszSearchCriteria,
        boolean bReturnUIDs,
        IRangeList *pMsgRange,
        boolean bUIDRangeList) = 0;

    virtual HRESULT STDMETHODCALLTYPE Fetch(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        IRangeList *pMsgRange,
        boolean bUIDMsgRange,
        LPSTR lpszFetchArgs) = 0;

    virtual HRESULT STDMETHODCALLTYPE Store(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        IRangeList *pMsgRange,
        boolean bUIDRangeList,
        LPSTR lpszStoreArgs) = 0;

    virtual HRESULT STDMETHODCALLTYPE Copy(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        IRangeList *pMsgRange,
        boolean bUIDRangeList,
        LPSTR lpszMailboxName) = 0;

    virtual HRESULT STDMETHODCALLTYPE Noop(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler) = 0;

    virtual HRESULT STDMETHODCALLTYPE ResizeMsgSeqNumTable(
        DWORD dwSizeOfMbox) = 0;

    virtual HRESULT STDMETHODCALLTYPE UpdateSeqNumToUID(
        DWORD dwMsgSeqNum,
        DWORD dwUID) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveSequenceNum(
        DWORD dwDeletedMsgSeqNum) = 0;

    virtual HRESULT STDMETHODCALLTYPE MsgSeqNumToUID(
        DWORD dwMsgSeqNum,
        DWORD *pdwUID) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMsgSeqNumToUIDArray(
        DWORD **ppdwMsgSeqNumToUIDArray,
        DWORD *pdwNumberOfElements) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetHighestMsgSeqNum(
        DWORD *pdwHighestMSN) = 0;

    virtual HRESULT STDMETHODCALLTYPE ResetMsgSeqNumToUID(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetDefaultCBHandler(
        IIMAPCallback *pCBHandler) = 0;

    virtual HRESULT STDMETHODCALLTYPE Status(
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR pszMailboxName,
        LPSTR pszStatusCmdArgs) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IIMAPTransport, 0xe9e9d8a8, 0x4edd, 0x11d0, 0x87,0x4f, 0x00,0xaa,0x00,0x53,0x0e,0xe9)
#endif
#else
typedef struct IIMAPTransportVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** IInternetTransport methods ***/
    HRESULT (STDMETHODCALLTYPE *GetServerInfo)(
        IIMAPTransport* This,
        LPINETSERVER pInetServer);

    IXPTYPE (STDMETHODCALLTYPE *GetIXPType)(
        IIMAPTransport* This);

    HRESULT (STDMETHODCALLTYPE *IsState)(
        IIMAPTransport* This,
        IXPISSTATE isstate);

    HRESULT (STDMETHODCALLTYPE *InetServerFromAccount)(
        IIMAPTransport* This,
        IImnAccount *pAccount,
        LPINETSERVER pInetServer);

    HRESULT (STDMETHODCALLTYPE *Connect)(
        IIMAPTransport* This,
        LPINETSERVER pInetServer,
        boolean fAuthenticate,
        boolean fCommandLogging);

    HRESULT (STDMETHODCALLTYPE *HandsOffCallback)(
        IIMAPTransport* This);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        IIMAPTransport* This);

    HRESULT (STDMETHODCALLTYPE *DropConnection)(
        IIMAPTransport* This);

    HRESULT (STDMETHODCALLTYPE *GetStatus)(
        IIMAPTransport* This,
        IXPSTATUS *pCurrentStatus);

    /*** IIMAPTransport methods ***/
    HRESULT (STDMETHODCALLTYPE *InitNew)(
        IIMAPTransport* This,
        LPSTR pszLogFilePath,
        IIMAPCallback *pCBHandler);

    HRESULT (STDMETHODCALLTYPE *NewIRangeList)(
        IIMAPTransport* This,
        IRangeList **pprlNewRangeList);

    HRESULT (STDMETHODCALLTYPE *Capability)(
        IIMAPTransport* This,
        DWORD *pdwCapabilityFlags);

    HRESULT (STDMETHODCALLTYPE *Select)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName);

    HRESULT (STDMETHODCALLTYPE *Examine)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName);

    HRESULT (STDMETHODCALLTYPE *Create)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName);

    HRESULT (STDMETHODCALLTYPE *Rename)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName,
        LPSTR lpszNewMailboxName);

    HRESULT (STDMETHODCALLTYPE *Subscribe)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName);

    HRESULT (STDMETHODCALLTYPE *Unsubscribe)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName);

    HRESULT (STDMETHODCALLTYPE *List)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxNameReference,
        LPSTR lpszMailboxNamePattern);

    HRESULT (STDMETHODCALLTYPE *Lsub)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxNameReference,
        LPSTR lpszMailboxNamePattern);

    HRESULT (STDMETHODCALLTYPE *Append)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszMailboxName,
        LPSTR lpszMessageFlags,
        FILETIME ftMessageDateTime,
        LPSTREAM lpstmMessageToSave);

    HRESULT (STDMETHODCALLTYPE *Close)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler);

    HRESULT (STDMETHODCALLTYPE *Expunge)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler);

    HRESULT (STDMETHODCALLTYPE *Search)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR lpszSearchCriteria,
        boolean bReturnUIDs,
        IRangeList *pMsgRange,
        boolean bUIDRangeList);

    HRESULT (STDMETHODCALLTYPE *Fetch)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        IRangeList *pMsgRange,
        boolean bUIDMsgRange,
        LPSTR lpszFetchArgs);

    HRESULT (STDMETHODCALLTYPE *Store)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        IRangeList *pMsgRange,
        boolean bUIDRangeList,
        LPSTR lpszStoreArgs);

    HRESULT (STDMETHODCALLTYPE *Copy)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        IRangeList *pMsgRange,
        boolean bUIDRangeList,
        LPSTR lpszMailboxName);

    HRESULT (STDMETHODCALLTYPE *Noop)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler);

    HRESULT (STDMETHODCALLTYPE *ResizeMsgSeqNumTable)(
        IIMAPTransport* This,
        DWORD dwSizeOfMbox);

    HRESULT (STDMETHODCALLTYPE *UpdateSeqNumToUID)(
        IIMAPTransport* This,
        DWORD dwMsgSeqNum,
        DWORD dwUID);

    HRESULT (STDMETHODCALLTYPE *RemoveSequenceNum)(
        IIMAPTransport* This,
        DWORD dwDeletedMsgSeqNum);

    HRESULT (STDMETHODCALLTYPE *MsgSeqNumToUID)(
        IIMAPTransport* This,
        DWORD dwMsgSeqNum,
        DWORD *pdwUID);

    HRESULT (STDMETHODCALLTYPE *GetMsgSeqNumToUIDArray)(
        IIMAPTransport* This,
        DWORD **ppdwMsgSeqNumToUIDArray,
        DWORD *pdwNumberOfElements);

    HRESULT (STDMETHODCALLTYPE *GetHighestMsgSeqNum)(
        IIMAPTransport* This,
        DWORD *pdwHighestMSN);

    HRESULT (STDMETHODCALLTYPE *ResetMsgSeqNumToUID)(
        IIMAPTransport* This);

    HRESULT (STDMETHODCALLTYPE *SetDefaultCBHandler)(
        IIMAPTransport* This,
        IIMAPCallback *pCBHandler);

    HRESULT (STDMETHODCALLTYPE *Status)(
        IIMAPTransport* This,
        WPARAM wParam,
        LPARAM lParam,
        IIMAPCallback *pCBHandler,
        LPSTR pszMailboxName,
        LPSTR pszStatusCmdArgs);

    END_INTERFACE
} IIMAPTransportVtbl;
interface IIMAPTransport {
    CONST_VTBL IIMAPTransportVtbl* lpVtbl;
};

#ifdef COBJMACROS
/*** IUnknown methods ***/
#define IIMAPTransport_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IIMAPTransport_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IIMAPTransport_Release(This) (This)->lpVtbl->Release(This)
/*** IInternetTransport methods ***/
#define IIMAPTransport_GetServerInfo(This,pInetServer) (This)->lpVtbl->GetServerInfo(This,pInetServer)
#define IIMAPTransport_GetIXPType(This) (This)->lpVtbl->GetIXPType(This)
#define IIMAPTransport_IsState(This,isstate) (This)->lpVtbl->IsState(This,isstate)
#define IIMAPTransport_InetServerFromAccount(This,pAccount,pInetServer) (This)->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer)
#define IIMAPTransport_Connect(This,pInetServer,fAuthenticate,fCommandLogging) (This)->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging)
#define IIMAPTransport_HandsOffCallback(This) (This)->lpVtbl->HandsOffCallback(This)
#define IIMAPTransport_Disconnect(This) (This)->lpVtbl->Disconnect(This)
#define IIMAPTransport_DropConnection(This) (This)->lpVtbl->DropConnection(This)
#define IIMAPTransport_GetStatus(This,pCurrentStatus) (This)->lpVtbl->GetStatus(This,pCurrentStatus)
/*** IIMAPTransport methods ***/
#define IIMAPTransport_InitNew(This,pszLogFilePath,pCBHandler) (This)->lpVtbl->InitNew(This,pszLogFilePath,pCBHandler)
#define IIMAPTransport_NewIRangeList(This,pprlNewRangeList) (This)->lpVtbl->NewIRangeList(This,pprlNewRangeList)
#define IIMAPTransport_Capability(This,pdwCapabilityFlags) (This)->lpVtbl->Capability(This,pdwCapabilityFlags)
#define IIMAPTransport_Select(This,wParam,lParam,pCBHandler,lpszMailboxName) (This)->lpVtbl->Select(This,wParam,lParam,pCBHandler,lpszMailboxName)
#define IIMAPTransport_Examine(This,wParam,lParam,pCBHandler,lpszMailboxName) (This)->lpVtbl->Examine(This,wParam,lParam,pCBHandler,lpszMailboxName)
#define IIMAPTransport_Create(This,wParam,lParam,pCBHandler,lpszMailboxName) (This)->lpVtbl->Create(This,wParam,lParam,pCBHandler,lpszMailboxName)
#define IIMAPTransport_Delete(This,wParam,lParam,pCBHandler,lpszMailboxName) (This)->lpVtbl->Delete(This,wParam,lParam,pCBHandler,lpszMailboxName)
#define IIMAPTransport_Rename(This,wParam,lParam,pCBHandler,lpszMailboxName,lpszNewMailboxName) (This)->lpVtbl->Rename(This,wParam,lParam,pCBHandler,lpszMailboxName,lpszNewMailboxName)
#define IIMAPTransport_Subscribe(This,wParam,lParam,pCBHandler,lpszMailboxName) (This)->lpVtbl->Subscribe(This,wParam,lParam,pCBHandler,lpszMailboxName)
#define IIMAPTransport_Unsubscribe(This,wParam,lParam,pCBHandler,lpszMailboxName) (This)->lpVtbl->Unsubscribe(This,wParam,lParam,pCBHandler,lpszMailboxName)
#define IIMAPTransport_List(This,wParam,lParam,pCBHandler,lpszMailboxNameReference,lpszMailboxNamePattern) (This)->lpVtbl->List(This,wParam,lParam,pCBHandler,lpszMailboxNameReference,lpszMailboxNamePattern)
#define IIMAPTransport_Lsub(This,wParam,lParam,pCBHandler,lpszMailboxNameReference,lpszMailboxNamePattern) (This)->lpVtbl->Lsub(This,wParam,lParam,pCBHandler,lpszMailboxNameReference,lpszMailboxNamePattern)
#define IIMAPTransport_Append(This,wParam,lParam,pCBHandler,lpszMailboxName,lpszMessageFlags,ftMessageDateTime,lpstmMessageToSave) (This)->lpVtbl->Append(This,wParam,lParam,pCBHandler,lpszMailboxName,lpszMessageFlags,ftMessageDateTime,lpstmMessageToSave)
#define IIMAPTransport_Close(This,wParam,lParam,pCBHandler) (This)->lpVtbl->Close(This,wParam,lParam,pCBHandler)
#define IIMAPTransport_Expunge(This,wParam,lParam,pCBHandler) (This)->lpVtbl->Expunge(This,wParam,lParam,pCBHandler)
#define IIMAPTransport_Search(This,wParam,lParam,pCBHandler,lpszSearchCriteria,bReturnUIDs,pMsgRange,bUIDRangeList) (This)->lpVtbl->Search(This,wParam,lParam,pCBHandler,lpszSearchCriteria,bReturnUIDs,pMsgRange,bUIDRangeList)
#define IIMAPTransport_Fetch(This,wParam,lParam,pCBHandler,pMsgRange,bUIDMsgRange,lpszFetchArgs) (This)->lpVtbl->Fetch(This,wParam,lParam,pCBHandler,pMsgRange,bUIDMsgRange,lpszFetchArgs)
#define IIMAPTransport_Store(This,wParam,lParam,pCBHandler,pMsgRange,bUIDRangeList,lpszStoreArgs) (This)->lpVtbl->Store(This,wParam,lParam,pCBHandler,pMsgRange,bUIDRangeList,lpszStoreArgs)
#define IIMAPTransport_Copy(This,wParam,lParam,pCBHandler,pMsgRange,bUIDRangeList,lpszMailboxName) (This)->lpVtbl->Copy(This,wParam,lParam,pCBHandler,pMsgRange,bUIDRangeList,lpszMailboxName)
#define IIMAPTransport_Noop(This,wParam,lParam,pCBHandler) (This)->lpVtbl->Noop(This,wParam,lParam,pCBHandler)
#define IIMAPTransport_ResizeMsgSeqNumTable(This,dwSizeOfMbox) (This)->lpVtbl->ResizeMsgSeqNumTable(This,dwSizeOfMbox)
#define IIMAPTransport_UpdateSeqNumToUID(This,dwMsgSeqNum,dwUID) (This)->lpVtbl->UpdateSeqNumToUID(This,dwMsgSeqNum,dwUID)
#define IIMAPTransport_RemoveSequenceNum(This,dwDeletedMsgSeqNum) (This)->lpVtbl->RemoveSequenceNum(This,dwDeletedMsgSeqNum)
#define IIMAPTransport_MsgSeqNumToUID(This,dwMsgSeqNum,pdwUID) (This)->lpVtbl->MsgSeqNumToUID(This,dwMsgSeqNum,pdwUID)
#define IIMAPTransport_GetMsgSeqNumToUIDArray(This,ppdwMsgSeqNumToUIDArray,pdwNumberOfElements) (This)->lpVtbl->GetMsgSeqNumToUIDArray(This,ppdwMsgSeqNumToUIDArray,pdwNumberOfElements)
#define IIMAPTransport_GetHighestMsgSeqNum(This,pdwHighestMSN) (This)->lpVtbl->GetHighestMsgSeqNum(This,pdwHighestMSN)
#define IIMAPTransport_ResetMsgSeqNumToUID(This) (This)->lpVtbl->ResetMsgSeqNumToUID(This)
#define IIMAPTransport_SetDefaultCBHandler(This,pCBHandler) (This)->lpVtbl->SetDefaultCBHandler(This,pCBHandler)
#define IIMAPTransport_Status(This,wParam,lParam,pCBHandler,pszMailboxName,pszStatusCmdArgs) (This)->lpVtbl->Status(This,wParam,lParam,pCBHandler,pszMailboxName,pszStatusCmdArgs)
#endif

#endif

HRESULT STDMETHODCALLTYPE IIMAPTransport_InitNew_Proxy(
    IIMAPTransport* This,
    LPSTR pszLogFilePath,
    IIMAPCallback *pCBHandler);
void __RPC_STUB IIMAPTransport_InitNew_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_NewIRangeList_Proxy(
    IIMAPTransport* This,
    IRangeList **pprlNewRangeList);
void __RPC_STUB IIMAPTransport_NewIRangeList_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Capability_Proxy(
    IIMAPTransport* This,
    DWORD *pdwCapabilityFlags);
void __RPC_STUB IIMAPTransport_Capability_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Select_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxName);
void __RPC_STUB IIMAPTransport_Select_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Examine_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxName);
void __RPC_STUB IIMAPTransport_Examine_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Create_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxName);
void __RPC_STUB IIMAPTransport_Create_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Delete_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxName);
void __RPC_STUB IIMAPTransport_Delete_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Rename_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxName,
    LPSTR lpszNewMailboxName);
void __RPC_STUB IIMAPTransport_Rename_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Subscribe_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxName);
void __RPC_STUB IIMAPTransport_Subscribe_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Unsubscribe_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxName);
void __RPC_STUB IIMAPTransport_Unsubscribe_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_List_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxNameReference,
    LPSTR lpszMailboxNamePattern);
void __RPC_STUB IIMAPTransport_List_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Lsub_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxNameReference,
    LPSTR lpszMailboxNamePattern);
void __RPC_STUB IIMAPTransport_Lsub_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Append_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszMailboxName,
    LPSTR lpszMessageFlags,
    FILETIME ftMessageDateTime,
    LPSTREAM lpstmMessageToSave);
void __RPC_STUB IIMAPTransport_Append_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Close_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler);
void __RPC_STUB IIMAPTransport_Close_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Expunge_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler);
void __RPC_STUB IIMAPTransport_Expunge_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Search_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR lpszSearchCriteria,
    boolean bReturnUIDs,
    IRangeList *pMsgRange,
    boolean bUIDRangeList);
void __RPC_STUB IIMAPTransport_Search_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Fetch_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    IRangeList *pMsgRange,
    boolean bUIDMsgRange,
    LPSTR lpszFetchArgs);
void __RPC_STUB IIMAPTransport_Fetch_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Store_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    IRangeList *pMsgRange,
    boolean bUIDRangeList,
    LPSTR lpszStoreArgs);
void __RPC_STUB IIMAPTransport_Store_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Copy_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    IRangeList *pMsgRange,
    boolean bUIDRangeList,
    LPSTR lpszMailboxName);
void __RPC_STUB IIMAPTransport_Copy_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Noop_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler);
void __RPC_STUB IIMAPTransport_Noop_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_ResizeMsgSeqNumTable_Proxy(
    IIMAPTransport* This,
    DWORD dwSizeOfMbox);
void __RPC_STUB IIMAPTransport_ResizeMsgSeqNumTable_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_UpdateSeqNumToUID_Proxy(
    IIMAPTransport* This,
    DWORD dwMsgSeqNum,
    DWORD dwUID);
void __RPC_STUB IIMAPTransport_UpdateSeqNumToUID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_RemoveSequenceNum_Proxy(
    IIMAPTransport* This,
    DWORD dwDeletedMsgSeqNum);
void __RPC_STUB IIMAPTransport_RemoveSequenceNum_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_MsgSeqNumToUID_Proxy(
    IIMAPTransport* This,
    DWORD dwMsgSeqNum,
    DWORD *pdwUID);
void __RPC_STUB IIMAPTransport_MsgSeqNumToUID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_GetMsgSeqNumToUIDArray_Proxy(
    IIMAPTransport* This,
    DWORD **ppdwMsgSeqNumToUIDArray,
    DWORD *pdwNumberOfElements);
void __RPC_STUB IIMAPTransport_GetMsgSeqNumToUIDArray_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_GetHighestMsgSeqNum_Proxy(
    IIMAPTransport* This,
    DWORD *pdwHighestMSN);
void __RPC_STUB IIMAPTransport_GetHighestMsgSeqNum_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_ResetMsgSeqNumToUID_Proxy(
    IIMAPTransport* This);
void __RPC_STUB IIMAPTransport_ResetMsgSeqNumToUID_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_SetDefaultCBHandler_Proxy(
    IIMAPTransport* This,
    IIMAPCallback *pCBHandler);
void __RPC_STUB IIMAPTransport_SetDefaultCBHandler_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IIMAPTransport_Status_Proxy(
    IIMAPTransport* This,
    WPARAM wParam,
    LPARAM lParam,
    IIMAPCallback *pCBHandler,
    LPSTR pszMailboxName,
    LPSTR pszStatusCmdArgs);
void __RPC_STUB IIMAPTransport_Status_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IIMAPTransport_INTERFACE_DEFINED__ */

HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);
HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);
HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);
HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);
/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __WIDL_IMNXPORT_H */
