/*** Autogenerated by WIDL 2.14 from ../../wine-staging/include/imnxport.idl - Do not edit ***/

#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

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

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __imnxport_h__
#define __imnxport_h__

/* Forward declarations */

#ifndef __ITransportCallbackService_FWD_DEFINED__
#define __ITransportCallbackService_FWD_DEFINED__
typedef interface ITransportCallbackService ITransportCallbackService;
#ifdef __cplusplus
interface ITransportCallbackService;
#endif /* __cplusplus */
#endif

#ifndef __ITransportCallback_FWD_DEFINED__
#define __ITransportCallback_FWD_DEFINED__
typedef interface ITransportCallback ITransportCallback;
#ifdef __cplusplus
interface ITransportCallback;
#endif /* __cplusplus */
#endif

#ifndef __IInternetTransport_FWD_DEFINED__
#define __IInternetTransport_FWD_DEFINED__
typedef interface IInternetTransport IInternetTransport;
#ifdef __cplusplus
interface IInternetTransport;
#endif /* __cplusplus */
#endif

#ifndef __ISMTPCallback_FWD_DEFINED__
#define __ISMTPCallback_FWD_DEFINED__
typedef interface ISMTPCallback ISMTPCallback;
#ifdef __cplusplus
interface ISMTPCallback;
#endif /* __cplusplus */
#endif

#ifndef __ISMTPTransport_FWD_DEFINED__
#define __ISMTPTransport_FWD_DEFINED__
typedef interface ISMTPTransport ISMTPTransport;
#ifdef __cplusplus
interface ISMTPTransport;
#endif /* __cplusplus */
#endif

#ifndef __ISMTPTransport2_FWD_DEFINED__
#define __ISMTPTransport2_FWD_DEFINED__
typedef interface ISMTPTransport2 ISMTPTransport2;
#ifdef __cplusplus
interface ISMTPTransport2;
#endif /* __cplusplus */
#endif

#ifndef __IPOP3Callback_FWD_DEFINED__
#define __IPOP3Callback_FWD_DEFINED__
typedef interface IPOP3Callback IPOP3Callback;
#ifdef __cplusplus
interface IPOP3Callback;
#endif /* __cplusplus */
#endif

#ifndef __IPOP3Transport_FWD_DEFINED__
#define __IPOP3Transport_FWD_DEFINED__
typedef interface IPOP3Transport IPOP3Transport;
#ifdef __cplusplus
interface IPOP3Transport;
#endif /* __cplusplus */
#endif

#ifndef __IRangeList_FWD_DEFINED__
#define __IRangeList_FWD_DEFINED__
typedef interface IRangeList IRangeList;
#ifdef __cplusplus
interface IRangeList;
#endif /* __cplusplus */
#endif

#ifndef __IIMAPCallback_FWD_DEFINED__
#define __IIMAPCallback_FWD_DEFINED__
typedef interface IIMAPCallback IIMAPCallback;
#ifdef __cplusplus
interface IIMAPCallback;
#endif /* __cplusplus */
#endif

#ifndef __IIMAPTransport_FWD_DEFINED__
#define __IIMAPTransport_FWD_DEFINED__
typedef interface IIMAPTransport IIMAPTransport;
#ifdef __cplusplus
interface IIMAPTransport;
#endif /* __cplusplus */
#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;
#ifdef __cplusplus
interface IInternetTransport;
#endif /* __cplusplus */
#endif

#ifndef __ISMTPTransport_FWD_DEFINED__
#define __ISMTPTransport_FWD_DEFINED__
typedef interface ISMTPTransport ISMTPTransport;
#ifdef __cplusplus
interface ISMTPTransport;
#endif /* __cplusplus */
#endif

#ifndef __IPOP3Transport_FWD_DEFINED__
#define __IPOP3Transport_FWD_DEFINED__
typedef interface IPOP3Transport IPOP3Transport;
#ifdef __cplusplus
interface IPOP3Transport;
#endif /* __cplusplus */
#endif

#ifndef __IIMAPTransport_FWD_DEFINED__
#define __IIMAPTransport_FWD_DEFINED__
typedef interface IIMAPTransport IIMAPTransport;
#ifdef __cplusplus
interface IIMAPTransport;
#endif /* __cplusplus */
#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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ITransportCallbackService_QueryInterface(ITransportCallbackService* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ITransportCallbackService_AddRef(ITransportCallbackService* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ITransportCallbackService_Release(ITransportCallbackService* This) {
    return This->lpVtbl->Release(This);
}
/*** ITransportCallbackService methods ***/
static FORCEINLINE HRESULT ITransportCallbackService_GetParentWindow(ITransportCallbackService* This,DWORD dwReserved,HWND *phwndParent) {
    return This->lpVtbl->GetParentWindow(This,dwReserved,phwndParent);
}
static FORCEINLINE HRESULT ITransportCallbackService_GetAccount(ITransportCallbackService* This,LPDWORD pdwServerType,IImnAccount **ppAccount) {
    return This->lpVtbl->GetAccount(This,pdwServerType,ppAccount);
}
#endif
#endif

#endif


#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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ITransportCallback_QueryInterface(ITransportCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ITransportCallback_AddRef(ITransportCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ITransportCallback_Release(ITransportCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** ITransportCallback methods ***/
static FORCEINLINE HRESULT ITransportCallback_OnTimeout(ITransportCallback* This,DWORD *pdwTimeout,IInternetTransport *pTransport) {
    return This->lpVtbl->OnTimeout(This,pdwTimeout,pTransport);
}
static FORCEINLINE HRESULT ITransportCallback_OnLogonPrompt(ITransportCallback* This,LPINETSERVER pInetServer,IInternetTransport *pTransport) {
    return This->lpVtbl->OnLogonPrompt(This,pInetServer,pTransport);
}
static FORCEINLINE INT ITransportCallback_OnPrompt(ITransportCallback* This,HRESULT hrError,LPCSTR pszText,LPCSTR pszCaption,UINT uType,IInternetTransport *pTransport) {
    return This->lpVtbl->OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport);
}
static FORCEINLINE HRESULT ITransportCallback_OnStatus(ITransportCallback* This,IXPSTATUS ixpstatus,IInternetTransport *pTransport) {
    return This->lpVtbl->OnStatus(This,ixpstatus,pTransport);
}
static FORCEINLINE HRESULT ITransportCallback_OnError(ITransportCallback* This,IXPSTATUS ixpstatus,LPIXPRESULT pResult,IInternetTransport *pTransport) {
    return This->lpVtbl->OnError(This,ixpstatus,pResult,pTransport);
}
static FORCEINLINE HRESULT ITransportCallback_OnCommand(ITransportCallback* This,CMDTYPE cmdtype,LPSTR pszLine,HRESULT hrResponse,IInternetTransport *pTransport) {
    return This->lpVtbl->OnCommand(This,cmdtype,pszLine,hrResponse,pTransport);
}
#endif
#endif

#endif


#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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IInternetTransport_QueryInterface(IInternetTransport* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IInternetTransport_AddRef(IInternetTransport* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IInternetTransport_Release(IInternetTransport* This) {
    return This->lpVtbl->Release(This);
}
/*** IInternetTransport methods ***/
static FORCEINLINE HRESULT IInternetTransport_GetServerInfo(IInternetTransport* This,LPINETSERVER pInetServer) {
    return This->lpVtbl->GetServerInfo(This,pInetServer);
}
static FORCEINLINE IXPTYPE IInternetTransport_GetIXPType(IInternetTransport* This) {
    return This->lpVtbl->GetIXPType(This);
}
static FORCEINLINE HRESULT IInternetTransport_IsState(IInternetTransport* This,IXPISSTATE isstate) {
    return This->lpVtbl->IsState(This,isstate);
}
static FORCEINLINE HRESULT IInternetTransport_InetServerFromAccount(IInternetTransport* This,IImnAccount *pAccount,LPINETSERVER pInetServer) {
    return This->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer);
}
static FORCEINLINE HRESULT IInternetTransport_Connect(IInternetTransport* This,LPINETSERVER pInetServer,boolean fAuthenticate,boolean fCommandLogging) {
    return This->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging);
}
static FORCEINLINE HRESULT IInternetTransport_HandsOffCallback(IInternetTransport* This) {
    return This->lpVtbl->HandsOffCallback(This);
}
static FORCEINLINE HRESULT IInternetTransport_Disconnect(IInternetTransport* This) {
    return This->lpVtbl->Disconnect(This);
}
static FORCEINLINE HRESULT IInternetTransport_DropConnection(IInternetTransport* This) {
    return This->lpVtbl->DropConnection(This);
}
static FORCEINLINE HRESULT IInternetTransport_GetStatus(IInternetTransport* This,IXPSTATUS *pCurrentStatus) {
    return This->lpVtbl->GetStatus(This,pCurrentStatus);
}
#endif
#endif

#endif


#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;
    __C89_NAMELESS union {
        SMTPSTREAM rStreamInfo;
    } __C89_NAMELESSUNIONNAME;
} 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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISMTPCallback_QueryInterface(ISMTPCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISMTPCallback_AddRef(ISMTPCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISMTPCallback_Release(ISMTPCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** ITransportCallback methods ***/
static FORCEINLINE HRESULT ISMTPCallback_OnTimeout(ISMTPCallback* This,DWORD *pdwTimeout,IInternetTransport *pTransport) {
    return This->lpVtbl->OnTimeout(This,pdwTimeout,pTransport);
}
static FORCEINLINE HRESULT ISMTPCallback_OnLogonPrompt(ISMTPCallback* This,LPINETSERVER pInetServer,IInternetTransport *pTransport) {
    return This->lpVtbl->OnLogonPrompt(This,pInetServer,pTransport);
}
static FORCEINLINE INT ISMTPCallback_OnPrompt(ISMTPCallback* This,HRESULT hrError,LPCSTR pszText,LPCSTR pszCaption,UINT uType,IInternetTransport *pTransport) {
    return This->lpVtbl->OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport);
}
static FORCEINLINE HRESULT ISMTPCallback_OnStatus(ISMTPCallback* This,IXPSTATUS ixpstatus,IInternetTransport *pTransport) {
    return This->lpVtbl->OnStatus(This,ixpstatus,pTransport);
}
static FORCEINLINE HRESULT ISMTPCallback_OnError(ISMTPCallback* This,IXPSTATUS ixpstatus,LPIXPRESULT pResult,IInternetTransport *pTransport) {
    return This->lpVtbl->OnError(This,ixpstatus,pResult,pTransport);
}
static FORCEINLINE HRESULT ISMTPCallback_OnCommand(ISMTPCallback* This,CMDTYPE cmdtype,LPSTR pszLine,HRESULT hrResponse,IInternetTransport *pTransport) {
    return This->lpVtbl->OnCommand(This,cmdtype,pszLine,hrResponse,pTransport);
}
/*** ISMTPCallback methods ***/
static FORCEINLINE HRESULT ISMTPCallback_OnResponse(ISMTPCallback* This,LPSMTPRESPONSE pResponse) {
    return This->lpVtbl->OnResponse(This,pResponse);
}
#endif
#endif

#endif


#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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISMTPTransport_QueryInterface(ISMTPTransport* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISMTPTransport_AddRef(ISMTPTransport* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISMTPTransport_Release(ISMTPTransport* This) {
    return This->lpVtbl->Release(This);
}
/*** IInternetTransport methods ***/
static FORCEINLINE HRESULT ISMTPTransport_GetServerInfo(ISMTPTransport* This,LPINETSERVER pInetServer) {
    return This->lpVtbl->GetServerInfo(This,pInetServer);
}
static FORCEINLINE IXPTYPE ISMTPTransport_GetIXPType(ISMTPTransport* This) {
    return This->lpVtbl->GetIXPType(This);
}
static FORCEINLINE HRESULT ISMTPTransport_IsState(ISMTPTransport* This,IXPISSTATE isstate) {
    return This->lpVtbl->IsState(This,isstate);
}
static FORCEINLINE HRESULT ISMTPTransport_InetServerFromAccount(ISMTPTransport* This,IImnAccount *pAccount,LPINETSERVER pInetServer) {
    return This->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer);
}
static FORCEINLINE HRESULT ISMTPTransport_Connect(ISMTPTransport* This,LPINETSERVER pInetServer,boolean fAuthenticate,boolean fCommandLogging) {
    return This->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging);
}
static FORCEINLINE HRESULT ISMTPTransport_HandsOffCallback(ISMTPTransport* This) {
    return This->lpVtbl->HandsOffCallback(This);
}
static FORCEINLINE HRESULT ISMTPTransport_Disconnect(ISMTPTransport* This) {
    return This->lpVtbl->Disconnect(This);
}
static FORCEINLINE HRESULT ISMTPTransport_DropConnection(ISMTPTransport* This) {
    return This->lpVtbl->DropConnection(This);
}
static FORCEINLINE HRESULT ISMTPTransport_GetStatus(ISMTPTransport* This,IXPSTATUS *pCurrentStatus) {
    return This->lpVtbl->GetStatus(This,pCurrentStatus);
}
/*** ISMTPTransport methods ***/
static FORCEINLINE HRESULT ISMTPTransport_InitNew(ISMTPTransport* This,LPSTR pszLogFilePath,ISMTPCallback *pCallback) {
    return This->lpVtbl->InitNew(This,pszLogFilePath,pCallback);
}
static FORCEINLINE HRESULT ISMTPTransport_SendMessage(ISMTPTransport* This,LPSMTPMESSAGE pMessage) {
    return This->lpVtbl->SendMessage(This,pMessage);
}
static FORCEINLINE HRESULT ISMTPTransport_CommandMAIL(ISMTPTransport* This,LPSTR pszEmailFrom) {
    return This->lpVtbl->CommandMAIL(This,pszEmailFrom);
}
static FORCEINLINE HRESULT ISMTPTransport_CommandRCPT(ISMTPTransport* This,LPSTR pszEmailTo) {
    return This->lpVtbl->CommandRCPT(This,pszEmailTo);
}
static FORCEINLINE HRESULT ISMTPTransport_CommandEHLO(ISMTPTransport* This) {
    return This->lpVtbl->CommandEHLO(This);
}
static FORCEINLINE HRESULT ISMTPTransport_CommandHELO(ISMTPTransport* This) {
    return This->lpVtbl->CommandHELO(This);
}
static FORCEINLINE HRESULT ISMTPTransport_CommandAUTH(ISMTPTransport* This,LPSTR pszAuthType) {
    return This->lpVtbl->CommandAUTH(This,pszAuthType);
}
static FORCEINLINE HRESULT ISMTPTransport_CommandQUIT(ISMTPTransport* This) {
    return This->lpVtbl->CommandQUIT(This);
}
static FORCEINLINE HRESULT ISMTPTransport_CommandRSET(ISMTPTransport* This) {
    return This->lpVtbl->CommandRSET(This);
}
static FORCEINLINE HRESULT ISMTPTransport_CommandDATA(ISMTPTransport* This) {
    return This->lpVtbl->CommandDATA(This);
}
static FORCEINLINE HRESULT ISMTPTransport_CommandDOT(ISMTPTransport* This) {
    return This->lpVtbl->CommandDOT(This);
}
static FORCEINLINE HRESULT ISMTPTransport_SendDataStream(ISMTPTransport* This,IStream *pStream,ULONG cbSize) {
    return This->lpVtbl->SendDataStream(This,pStream,cbSize);
}
#endif
#endif

#endif


#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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ISMTPTransport2_QueryInterface(ISMTPTransport2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ISMTPTransport2_AddRef(ISMTPTransport2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ISMTPTransport2_Release(ISMTPTransport2* This) {
    return This->lpVtbl->Release(This);
}
/*** IInternetTransport methods ***/
static FORCEINLINE HRESULT ISMTPTransport2_GetServerInfo(ISMTPTransport2* This,LPINETSERVER pInetServer) {
    return This->lpVtbl->GetServerInfo(This,pInetServer);
}
static FORCEINLINE IXPTYPE ISMTPTransport2_GetIXPType(ISMTPTransport2* This) {
    return This->lpVtbl->GetIXPType(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_IsState(ISMTPTransport2* This,IXPISSTATE isstate) {
    return This->lpVtbl->IsState(This,isstate);
}
static FORCEINLINE HRESULT ISMTPTransport2_InetServerFromAccount(ISMTPTransport2* This,IImnAccount *pAccount,LPINETSERVER pInetServer) {
    return This->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer);
}
static FORCEINLINE HRESULT ISMTPTransport2_Connect(ISMTPTransport2* This,LPINETSERVER pInetServer,boolean fAuthenticate,boolean fCommandLogging) {
    return This->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging);
}
static FORCEINLINE HRESULT ISMTPTransport2_HandsOffCallback(ISMTPTransport2* This) {
    return This->lpVtbl->HandsOffCallback(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_Disconnect(ISMTPTransport2* This) {
    return This->lpVtbl->Disconnect(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_DropConnection(ISMTPTransport2* This) {
    return This->lpVtbl->DropConnection(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_GetStatus(ISMTPTransport2* This,IXPSTATUS *pCurrentStatus) {
    return This->lpVtbl->GetStatus(This,pCurrentStatus);
}
/*** ISMTPTransport methods ***/
static FORCEINLINE HRESULT ISMTPTransport2_InitNew(ISMTPTransport2* This,LPSTR pszLogFilePath,ISMTPCallback *pCallback) {
    return This->lpVtbl->InitNew(This,pszLogFilePath,pCallback);
}
static FORCEINLINE HRESULT ISMTPTransport2_SendMessage(ISMTPTransport2* This,LPSMTPMESSAGE pMessage) {
    return This->lpVtbl->SendMessage(This,pMessage);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandMAIL(ISMTPTransport2* This,LPSTR pszEmailFrom) {
    return This->lpVtbl->CommandMAIL(This,pszEmailFrom);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandRCPT(ISMTPTransport2* This,LPSTR pszEmailTo) {
    return This->lpVtbl->CommandRCPT(This,pszEmailTo);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandEHLO(ISMTPTransport2* This) {
    return This->lpVtbl->CommandEHLO(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandHELO(ISMTPTransport2* This) {
    return This->lpVtbl->CommandHELO(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandAUTH(ISMTPTransport2* This,LPSTR pszAuthType) {
    return This->lpVtbl->CommandAUTH(This,pszAuthType);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandQUIT(ISMTPTransport2* This) {
    return This->lpVtbl->CommandQUIT(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandRSET(ISMTPTransport2* This) {
    return This->lpVtbl->CommandRSET(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandDATA(ISMTPTransport2* This) {
    return This->lpVtbl->CommandDATA(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandDOT(ISMTPTransport2* This) {
    return This->lpVtbl->CommandDOT(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_SendDataStream(ISMTPTransport2* This,IStream *pStream,ULONG cbSize) {
    return This->lpVtbl->SendDataStream(This,pStream,cbSize);
}
/*** ISMTPTransport2 methods ***/
static FORCEINLINE HRESULT ISMTPTransport2_SetWindow(ISMTPTransport2* This) {
    return This->lpVtbl->SetWindow(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_ResetWindow(ISMTPTransport2* This) {
    return This->lpVtbl->ResetWindow(This);
}
static FORCEINLINE HRESULT ISMTPTransport2_SendMessage2(ISMTPTransport2* This,LPSMTPMESSAGE2 pMessage) {
    return This->lpVtbl->SendMessage2(This,pMessage);
}
static FORCEINLINE HRESULT ISMTPTransport2_CommandRCPT2(ISMTPTransport2* This,LPSTR pszEmailTo,INETADDRTYPE atDSN) {
    return This->lpVtbl->CommandRCPT2(This,pszEmailTo,atDSN);
}
#endif
#endif

#endif


#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;
    __C89_NAMELESS union {
        POP3UIDL rUidlInfo;
        POP3STAT rStatInfo;
        POP3LIST rListInfo;
        DWORD dwPopId;
        POP3RETR rRetrInfo;
        POP3TOP rTopInfo;
    } __C89_NAMELESSUNIONNAME;
} 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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IPOP3Callback_QueryInterface(IPOP3Callback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IPOP3Callback_AddRef(IPOP3Callback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IPOP3Callback_Release(IPOP3Callback* This) {
    return This->lpVtbl->Release(This);
}
/*** ITransportCallback methods ***/
static FORCEINLINE HRESULT IPOP3Callback_OnTimeout(IPOP3Callback* This,DWORD *pdwTimeout,IInternetTransport *pTransport) {
    return This->lpVtbl->OnTimeout(This,pdwTimeout,pTransport);
}
static FORCEINLINE HRESULT IPOP3Callback_OnLogonPrompt(IPOP3Callback* This,LPINETSERVER pInetServer,IInternetTransport *pTransport) {
    return This->lpVtbl->OnLogonPrompt(This,pInetServer,pTransport);
}
static FORCEINLINE INT IPOP3Callback_OnPrompt(IPOP3Callback* This,HRESULT hrError,LPCSTR pszText,LPCSTR pszCaption,UINT uType,IInternetTransport *pTransport) {
    return This->lpVtbl->OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport);
}
static FORCEINLINE HRESULT IPOP3Callback_OnStatus(IPOP3Callback* This,IXPSTATUS ixpstatus,IInternetTransport *pTransport) {
    return This->lpVtbl->OnStatus(This,ixpstatus,pTransport);
}
static FORCEINLINE HRESULT IPOP3Callback_OnError(IPOP3Callback* This,IXPSTATUS ixpstatus,LPIXPRESULT pResult,IInternetTransport *pTransport) {
    return This->lpVtbl->OnError(This,ixpstatus,pResult,pTransport);
}
static FORCEINLINE HRESULT IPOP3Callback_OnCommand(IPOP3Callback* This,CMDTYPE cmdtype,LPSTR pszLine,HRESULT hrResponse,IInternetTransport *pTransport) {
    return This->lpVtbl->OnCommand(This,cmdtype,pszLine,hrResponse,pTransport);
}
/*** IPOP3Callback methods ***/
static FORCEINLINE HRESULT IPOP3Callback_OnResponse(IPOP3Callback* This,LPPOP3RESPONSE pResponse) {
    return This->lpVtbl->OnResponse(This,pResponse);
}
#endif
#endif

#endif


#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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IPOP3Transport_QueryInterface(IPOP3Transport* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IPOP3Transport_AddRef(IPOP3Transport* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IPOP3Transport_Release(IPOP3Transport* This) {
    return This->lpVtbl->Release(This);
}
/*** IInternetTransport methods ***/
static FORCEINLINE HRESULT IPOP3Transport_GetServerInfo(IPOP3Transport* This,LPINETSERVER pInetServer) {
    return This->lpVtbl->GetServerInfo(This,pInetServer);
}
static FORCEINLINE IXPTYPE IPOP3Transport_GetIXPType(IPOP3Transport* This) {
    return This->lpVtbl->GetIXPType(This);
}
static FORCEINLINE HRESULT IPOP3Transport_IsState(IPOP3Transport* This,IXPISSTATE isstate) {
    return This->lpVtbl->IsState(This,isstate);
}
static FORCEINLINE HRESULT IPOP3Transport_InetServerFromAccount(IPOP3Transport* This,IImnAccount *pAccount,LPINETSERVER pInetServer) {
    return This->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer);
}
static FORCEINLINE HRESULT IPOP3Transport_Connect(IPOP3Transport* This,LPINETSERVER pInetServer,boolean fAuthenticate,boolean fCommandLogging) {
    return This->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging);
}
static FORCEINLINE HRESULT IPOP3Transport_HandsOffCallback(IPOP3Transport* This) {
    return This->lpVtbl->HandsOffCallback(This);
}
static FORCEINLINE HRESULT IPOP3Transport_Disconnect(IPOP3Transport* This) {
    return This->lpVtbl->Disconnect(This);
}
static FORCEINLINE HRESULT IPOP3Transport_DropConnection(IPOP3Transport* This) {
    return This->lpVtbl->DropConnection(This);
}
static FORCEINLINE HRESULT IPOP3Transport_GetStatus(IPOP3Transport* This,IXPSTATUS *pCurrentStatus) {
    return This->lpVtbl->GetStatus(This,pCurrentStatus);
}
/*** IPOP3Transport methods ***/
static FORCEINLINE HRESULT IPOP3Transport_InitNew(IPOP3Transport* This,LPSTR pszLogFilePath,IPOP3Callback *pCallback) {
    return This->lpVtbl->InitNew(This,pszLogFilePath,pCallback);
}
static FORCEINLINE HRESULT IPOP3Transport_MarkItem(IPOP3Transport* This,POP3MARKTYPE marktype,DWORD dwPopId,boolean fMarked) {
    return This->lpVtbl->MarkItem(This,marktype,dwPopId,fMarked);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandAUTH(IPOP3Transport* This,LPSTR pszAuthType) {
    return This->lpVtbl->CommandAUTH(This,pszAuthType);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandUSER(IPOP3Transport* This,LPSTR pszUserName) {
    return This->lpVtbl->CommandUSER(This,pszUserName);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandPASS(IPOP3Transport* This,LPSTR pszPassword) {
    return This->lpVtbl->CommandPASS(This,pszPassword);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandLIST(IPOP3Transport* This,POP3CMDTYPE cmdtype,DWORD dwPopId) {
    return This->lpVtbl->CommandLIST(This,cmdtype,dwPopId);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandTOP(IPOP3Transport* This,POP3CMDTYPE cmdtype,DWORD dwPopId,DWORD cPreviewLines) {
    return This->lpVtbl->CommandTOP(This,cmdtype,dwPopId,cPreviewLines);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandQUIT(IPOP3Transport* This) {
    return This->lpVtbl->CommandQUIT(This);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandSTAT(IPOP3Transport* This) {
    return This->lpVtbl->CommandSTAT(This);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandNOOP(IPOP3Transport* This) {
    return This->lpVtbl->CommandNOOP(This);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandRSET(IPOP3Transport* This) {
    return This->lpVtbl->CommandRSET(This);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandUIDL(IPOP3Transport* This,POP3CMDTYPE cmdtype,DWORD dwPopId) {
    return This->lpVtbl->CommandUIDL(This,cmdtype,dwPopId);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandDELE(IPOP3Transport* This,POP3CMDTYPE cmdtype,DWORD dwPopId) {
    return This->lpVtbl->CommandDELE(This,cmdtype,dwPopId);
}
static FORCEINLINE HRESULT IPOP3Transport_CommandRETR(IPOP3Transport* This,POP3CMDTYPE cmdtype,DWORD dwPopId) {
    return This->lpVtbl->CommandRETR(This,cmdtype,dwPopId);
}
#endif
#endif

#endif


#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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IRangeList_QueryInterface(IRangeList* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IRangeList_AddRef(IRangeList* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IRangeList_Release(IRangeList* This) {
    return This->lpVtbl->Release(This);
}
/*** IRangeList methods ***/
static FORCEINLINE HRESULT IRangeList_Clear(IRangeList* This) {
    return This->lpVtbl->Clear(This);
}
static FORCEINLINE HRESULT IRangeList_IsInRange(IRangeList* This,const ULONG value) {
    return This->lpVtbl->IsInRange(This,value);
}
static FORCEINLINE HRESULT IRangeList_Min(IRangeList* This,ULONG *pulMin) {
    return This->lpVtbl->Min(This,pulMin);
}
static FORCEINLINE HRESULT IRangeList_Max(IRangeList* This,ULONG *pulMax) {
    return This->lpVtbl->Max(This,pulMax);
}
static FORCEINLINE HRESULT IRangeList_Save(IRangeList* This,byte **ppbDestination,ULONG *pulSizeOfDestination) {
    return This->lpVtbl->Save(This,ppbDestination,pulSizeOfDestination);
}
static FORCEINLINE HRESULT IRangeList_Load(IRangeList* This,byte *pbSource,const ULONG ulSizeOfSource) {
    return This->lpVtbl->Load(This,pbSource,ulSizeOfSource);
}
static FORCEINLINE HRESULT IRangeList_AddRange(IRangeList* This,const ULONG low,const ULONG high) {
    return This->lpVtbl->AddRange(This,low,high);
}
static FORCEINLINE HRESULT IRangeList_AddSingleValue(IRangeList* This,const ULONG value) {
    return This->lpVtbl->AddSingleValue(This,value);
}
static FORCEINLINE HRESULT IRangeList_AddRangeList(IRangeList* This,const IRangeList *prl) {
    return This->lpVtbl->AddRangeList(This,prl);
}
static FORCEINLINE HRESULT IRangeList_DeleteRange(IRangeList* This,const ULONG low,const ULONG high) {
    return This->lpVtbl->DeleteRange(This,low,high);
}
static FORCEINLINE HRESULT IRangeList_DeleteSingleValue(IRangeList* This,const ULONG value) {
    return This->lpVtbl->DeleteSingleValue(This,value);
}
static FORCEINLINE HRESULT IRangeList_DeleteRangeList(IRangeList* This,const IRangeList *prl) {
    return This->lpVtbl->DeleteRangeList(This,prl);
}
static FORCEINLINE HRESULT IRangeList_MinOfRange(IRangeList* This,const ULONG value,ULONG *pulMinOfRange) {
    return This->lpVtbl->MinOfRange(This,value,pulMinOfRange);
}
static FORCEINLINE HRESULT IRangeList_MaxOfRange(IRangeList* This,const ULONG value,ULONG *pulMaxOfRange) {
    return This->lpVtbl->MaxOfRange(This,value,pulMaxOfRange);
}
static FORCEINLINE HRESULT IRangeList_RangeToIMAPString(IRangeList* This,LPSTR *ppszDestination,LPDWORD pdwLengthOfDestination) {
    return This->lpVtbl->RangeToIMAPString(This,ppszDestination,pdwLengthOfDestination);
}
static FORCEINLINE HRESULT IRangeList_Next(IRangeList* This,const ULONG current,ULONG *pulNext) {
    return This->lpVtbl->Next(This,current,pulNext);
}
static FORCEINLINE HRESULT IRangeList_Prev(IRangeList* This,const ULONG current,ULONG *pulPrev) {
    return This->lpVtbl->Prev(This,current,pulPrev);
}
static FORCEINLINE HRESULT IRangeList_Cardinality(IRangeList* This,ULONG *pulCardinality) {
    return This->lpVtbl->Cardinality(This,pulCardinality);
}
static FORCEINLINE HRESULT IRangeList_CardinalityFrom(IRangeList* This,const ULONG ulStartPoint,ULONG *pulCardinalityFrom) {
    return This->lpVtbl->CardinalityFrom(This,ulStartPoint,pulCardinalityFrom);
}
#endif
#endif

#endif


#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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IIMAPCallback_QueryInterface(IIMAPCallback* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IIMAPCallback_AddRef(IIMAPCallback* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IIMAPCallback_Release(IIMAPCallback* This) {
    return This->lpVtbl->Release(This);
}
/*** ITransportCallback methods ***/
static FORCEINLINE HRESULT IIMAPCallback_OnTimeout(IIMAPCallback* This,DWORD *pdwTimeout,IInternetTransport *pTransport) {
    return This->lpVtbl->OnTimeout(This,pdwTimeout,pTransport);
}
static FORCEINLINE HRESULT IIMAPCallback_OnLogonPrompt(IIMAPCallback* This,LPINETSERVER pInetServer,IInternetTransport *pTransport) {
    return This->lpVtbl->OnLogonPrompt(This,pInetServer,pTransport);
}
static FORCEINLINE INT IIMAPCallback_OnPrompt(IIMAPCallback* This,HRESULT hrError,LPCSTR pszText,LPCSTR pszCaption,UINT uType,IInternetTransport *pTransport) {
    return This->lpVtbl->OnPrompt(This,hrError,pszText,pszCaption,uType,pTransport);
}
static FORCEINLINE HRESULT IIMAPCallback_OnStatus(IIMAPCallback* This,IXPSTATUS ixpstatus,IInternetTransport *pTransport) {
    return This->lpVtbl->OnStatus(This,ixpstatus,pTransport);
}
static FORCEINLINE HRESULT IIMAPCallback_OnError(IIMAPCallback* This,IXPSTATUS ixpstatus,LPIXPRESULT pResult,IInternetTransport *pTransport) {
    return This->lpVtbl->OnError(This,ixpstatus,pResult,pTransport);
}
static FORCEINLINE HRESULT IIMAPCallback_OnCommand(IIMAPCallback* This,CMDTYPE cmdtype,LPSTR pszLine,HRESULT hrResponse,IInternetTransport *pTransport) {
    return This->lpVtbl->OnCommand(This,cmdtype,pszLine,hrResponse,pTransport);
}
/*** IIMAPCallback methods ***/
static FORCEINLINE HRESULT IIMAPCallback_OnResponse(IIMAPCallback* This,const IMAP_RESPONSE *pirIMAPResponse) {
    return This->lpVtbl->OnResponse(This,pirIMAPResponse);
}
#endif
#endif

#endif


#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
#ifndef WIDL_C_INLINE_WRAPPERS
/*** 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)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IIMAPTransport_QueryInterface(IIMAPTransport* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IIMAPTransport_AddRef(IIMAPTransport* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IIMAPTransport_Release(IIMAPTransport* This) {
    return This->lpVtbl->Release(This);
}
/*** IInternetTransport methods ***/
static FORCEINLINE HRESULT IIMAPTransport_GetServerInfo(IIMAPTransport* This,LPINETSERVER pInetServer) {
    return This->lpVtbl->GetServerInfo(This,pInetServer);
}
static FORCEINLINE IXPTYPE IIMAPTransport_GetIXPType(IIMAPTransport* This) {
    return This->lpVtbl->GetIXPType(This);
}
static FORCEINLINE HRESULT IIMAPTransport_IsState(IIMAPTransport* This,IXPISSTATE isstate) {
    return This->lpVtbl->IsState(This,isstate);
}
static FORCEINLINE HRESULT IIMAPTransport_InetServerFromAccount(IIMAPTransport* This,IImnAccount *pAccount,LPINETSERVER pInetServer) {
    return This->lpVtbl->InetServerFromAccount(This,pAccount,pInetServer);
}
static FORCEINLINE HRESULT IIMAPTransport_Connect(IIMAPTransport* This,LPINETSERVER pInetServer,boolean fAuthenticate,boolean fCommandLogging) {
    return This->lpVtbl->Connect(This,pInetServer,fAuthenticate,fCommandLogging);
}
static FORCEINLINE HRESULT IIMAPTransport_HandsOffCallback(IIMAPTransport* This) {
    return This->lpVtbl->HandsOffCallback(This);
}
static FORCEINLINE HRESULT IIMAPTransport_Disconnect(IIMAPTransport* This) {
    return This->lpVtbl->Disconnect(This);
}
static FORCEINLINE HRESULT IIMAPTransport_DropConnection(IIMAPTransport* This) {
    return This->lpVtbl->DropConnection(This);
}
static FORCEINLINE HRESULT IIMAPTransport_GetStatus(IIMAPTransport* This,IXPSTATUS *pCurrentStatus) {
    return This->lpVtbl->GetStatus(This,pCurrentStatus);
}
/*** IIMAPTransport methods ***/
static FORCEINLINE HRESULT IIMAPTransport_InitNew(IIMAPTransport* This,LPSTR pszLogFilePath,IIMAPCallback *pCBHandler) {
    return This->lpVtbl->InitNew(This,pszLogFilePath,pCBHandler);
}
static FORCEINLINE HRESULT IIMAPTransport_NewIRangeList(IIMAPTransport* This,IRangeList **pprlNewRangeList) {
    return This->lpVtbl->NewIRangeList(This,pprlNewRangeList);
}
static FORCEINLINE HRESULT IIMAPTransport_Capability(IIMAPTransport* This,DWORD *pdwCapabilityFlags) {
    return This->lpVtbl->Capability(This,pdwCapabilityFlags);
}
static FORCEINLINE HRESULT IIMAPTransport_Select(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxName) {
    return This->lpVtbl->Select(This,wParam,lParam,pCBHandler,lpszMailboxName);
}
static FORCEINLINE HRESULT IIMAPTransport_Examine(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxName) {
    return This->lpVtbl->Examine(This,wParam,lParam,pCBHandler,lpszMailboxName);
}
static FORCEINLINE HRESULT IIMAPTransport_Create(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxName) {
    return This->lpVtbl->Create(This,wParam,lParam,pCBHandler,lpszMailboxName);
}
static FORCEINLINE HRESULT IIMAPTransport_Delete(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxName) {
    return This->lpVtbl->Delete(This,wParam,lParam,pCBHandler,lpszMailboxName);
}
static FORCEINLINE HRESULT IIMAPTransport_Rename(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxName,LPSTR lpszNewMailboxName) {
    return This->lpVtbl->Rename(This,wParam,lParam,pCBHandler,lpszMailboxName,lpszNewMailboxName);
}
static FORCEINLINE HRESULT IIMAPTransport_Subscribe(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxName) {
    return This->lpVtbl->Subscribe(This,wParam,lParam,pCBHandler,lpszMailboxName);
}
static FORCEINLINE HRESULT IIMAPTransport_Unsubscribe(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxName) {
    return This->lpVtbl->Unsubscribe(This,wParam,lParam,pCBHandler,lpszMailboxName);
}
static FORCEINLINE HRESULT IIMAPTransport_List(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxNameReference,LPSTR lpszMailboxNamePattern) {
    return This->lpVtbl->List(This,wParam,lParam,pCBHandler,lpszMailboxNameReference,lpszMailboxNamePattern);
}
static FORCEINLINE HRESULT IIMAPTransport_Lsub(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxNameReference,LPSTR lpszMailboxNamePattern) {
    return This->lpVtbl->Lsub(This,wParam,lParam,pCBHandler,lpszMailboxNameReference,lpszMailboxNamePattern);
}
static FORCEINLINE HRESULT IIMAPTransport_Append(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszMailboxName,LPSTR lpszMessageFlags,FILETIME ftMessageDateTime,LPSTREAM lpstmMessageToSave) {
    return This->lpVtbl->Append(This,wParam,lParam,pCBHandler,lpszMailboxName,lpszMessageFlags,ftMessageDateTime,lpstmMessageToSave);
}
static FORCEINLINE HRESULT IIMAPTransport_Close(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler) {
    return This->lpVtbl->Close(This,wParam,lParam,pCBHandler);
}
static FORCEINLINE HRESULT IIMAPTransport_Expunge(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler) {
    return This->lpVtbl->Expunge(This,wParam,lParam,pCBHandler);
}
static FORCEINLINE HRESULT IIMAPTransport_Search(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR lpszSearchCriteria,boolean bReturnUIDs,IRangeList *pMsgRange,boolean bUIDRangeList) {
    return This->lpVtbl->Search(This,wParam,lParam,pCBHandler,lpszSearchCriteria,bReturnUIDs,pMsgRange,bUIDRangeList);
}
static FORCEINLINE HRESULT IIMAPTransport_Fetch(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,IRangeList *pMsgRange,boolean bUIDMsgRange,LPSTR lpszFetchArgs) {
    return This->lpVtbl->Fetch(This,wParam,lParam,pCBHandler,pMsgRange,bUIDMsgRange,lpszFetchArgs);
}
static FORCEINLINE HRESULT IIMAPTransport_Store(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,IRangeList *pMsgRange,boolean bUIDRangeList,LPSTR lpszStoreArgs) {
    return This->lpVtbl->Store(This,wParam,lParam,pCBHandler,pMsgRange,bUIDRangeList,lpszStoreArgs);
}
static FORCEINLINE HRESULT IIMAPTransport_Copy(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,IRangeList *pMsgRange,boolean bUIDRangeList,LPSTR lpszMailboxName) {
    return This->lpVtbl->Copy(This,wParam,lParam,pCBHandler,pMsgRange,bUIDRangeList,lpszMailboxName);
}
static FORCEINLINE HRESULT IIMAPTransport_Noop(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler) {
    return This->lpVtbl->Noop(This,wParam,lParam,pCBHandler);
}
static FORCEINLINE HRESULT IIMAPTransport_ResizeMsgSeqNumTable(IIMAPTransport* This,DWORD dwSizeOfMbox) {
    return This->lpVtbl->ResizeMsgSeqNumTable(This,dwSizeOfMbox);
}
static FORCEINLINE HRESULT IIMAPTransport_UpdateSeqNumToUID(IIMAPTransport* This,DWORD dwMsgSeqNum,DWORD dwUID) {
    return This->lpVtbl->UpdateSeqNumToUID(This,dwMsgSeqNum,dwUID);
}
static FORCEINLINE HRESULT IIMAPTransport_RemoveSequenceNum(IIMAPTransport* This,DWORD dwDeletedMsgSeqNum) {
    return This->lpVtbl->RemoveSequenceNum(This,dwDeletedMsgSeqNum);
}
static FORCEINLINE HRESULT IIMAPTransport_MsgSeqNumToUID(IIMAPTransport* This,DWORD dwMsgSeqNum,DWORD *pdwUID) {
    return This->lpVtbl->MsgSeqNumToUID(This,dwMsgSeqNum,pdwUID);
}
static FORCEINLINE HRESULT IIMAPTransport_GetMsgSeqNumToUIDArray(IIMAPTransport* This,DWORD **ppdwMsgSeqNumToUIDArray,DWORD *pdwNumberOfElements) {
    return This->lpVtbl->GetMsgSeqNumToUIDArray(This,ppdwMsgSeqNumToUIDArray,pdwNumberOfElements);
}
static FORCEINLINE HRESULT IIMAPTransport_GetHighestMsgSeqNum(IIMAPTransport* This,DWORD *pdwHighestMSN) {
    return This->lpVtbl->GetHighestMsgSeqNum(This,pdwHighestMSN);
}
static FORCEINLINE HRESULT IIMAPTransport_ResetMsgSeqNumToUID(IIMAPTransport* This) {
    return This->lpVtbl->ResetMsgSeqNumToUID(This);
}
static FORCEINLINE HRESULT IIMAPTransport_SetDefaultCBHandler(IIMAPTransport* This,IIMAPCallback *pCBHandler) {
    return This->lpVtbl->SetDefaultCBHandler(This,pCBHandler);
}
static FORCEINLINE HRESULT IIMAPTransport_Status(IIMAPTransport* This,WPARAM wParam,LPARAM lParam,IIMAPCallback *pCBHandler,LPSTR pszMailboxName,LPSTR pszStatusCmdArgs) {
    return This->lpVtbl->Status(This,wParam,lParam,pCBHandler,pszMailboxName,pszStatusCmdArgs);
}
#endif
#endif

#endif


#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 /* __imnxport_h__ */
