include: Add imnact.idl and imnxport.idl.
diff --git a/.gitignore b/.gitignore
index 95fa523..bc6401b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -577,6 +577,8 @@
 include/htiframe.h
 include/iads.h
 include/icftypes.h
+include/imnact.h
+include/imnxport.h
 include/indexsrv.h
 include/mediaobj.h
 include/mimeinfo.h
diff --git a/include/Makefile.in b/include/Makefile.in
index 9835f09..4522d2b 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -24,6 +24,8 @@
 	htiframe.idl \
 	iads.idl \
 	icftypes.idl \
+	imnact.idl \
+	imnxport.idl \
 	indexsrv.idl \
 	mediaobj.idl \
 	mimeinfo.idl \
diff --git a/include/imnact.idl b/include/imnact.idl
new file mode 100644
index 0000000..ee2460a
--- /dev/null
+++ b/include/imnact.idl
@@ -0,0 +1,299 @@
+/*
+ * Copyright 2006 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "objidl.idl";
+
+interface IImnAccount;
+
+cpp_quote("#ifndef HR_E")
+cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+cpp_quote("#ifndef HR_S")
+cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+
+typedef enum tagSMTPAUTHTYPE
+{
+    SMTP_AUTH_NONE,
+    SMTP_AUTH_SICILY,
+    SMTP_AUTH_USE_POP3ORIMAP_SETTINGS,
+    SMTP_AUTH_USE_SMTP_SETTINGS,
+} SMTPAUTHTYPE;
+
+const SHORT CCHMAX_ORG_NAME = 256;
+const SHORT CCHMAX_DISPLAY_NAME = 256;
+const SHORT CCHMAX_ACCOUNT_NAME = 256;
+const SHORT CCHMAX_SERVER_NAME = 256;
+const SHORT CCHMAX_PASSWORD = 256;
+const SHORT CCHMAX_USERNAME = 256;
+const SHORT CCHMAX_EMAIL_ADDRESS = 256;
+const SHORT CCHMAX_CONNECTOID = 256;
+const SHORT CCHMAX_SEARCH_BASE = 256;
+const SHORT CCHMAX_ROOT_FOLDER = 256;
+const SHORT CCHMAX_SIGNATURE = 16;
+const SHORT CCHMAX_SERVICE = 256;
+
+[
+    object,
+    uuid(0A06BD31-166F-11D0-81B9-00C04FD85AB4),
+    pointer_default(unique)
+]
+interface IImnAdviseAccount : IUnknown
+{
+    typedef enum
+    {
+        ACCT_NEWS,
+        ACCT_MAIL,
+        ACCT_DIR_SERV,
+        ACCT_LAST
+    } ACCTTYPE;
+
+    typedef struct tagAccountContext
+    {
+        ACCTTYPE AcctType;
+        LPSTR pszAccountID;
+        LPSTR pszOldName;
+        DWORD dwServerType;
+    } ACTX;
+
+    HRESULT AdviseAccount(
+        [in]    DWORD dwAdviseType,
+        [in]    ACTX *pAcctCtx);
+}
+
+[
+    object,
+    uuid(8D0AED11-1638-11D0-81B9-00C04FD85AB4),
+    pointer_default(unique)
+]
+interface IImnAdviseMigrateServer : IUnknown
+{
+    HRESULT MigrateServer(
+        [in]    DWORD dwSrvType,
+        [in]    IImnAccount *pAccount);
+}
+
+[
+    object,
+    uuid(FD465483-1384-11D0-ABBD-0020AFDFD10A),
+    pointer_default(unique)
+]
+interface IImnEnumAccounts : IUnknown
+{
+    HRESULT GetCount(
+        [out]   ULONG *pcItems);
+
+    HRESULT SortByAccountName();
+
+    HRESULT GetNext(
+        [out]   IImnAccount **ppAccount);
+
+    HRESULT Reset();
+}
+
+[
+    object,
+    uuid(FD465481-1384-11D0-ABBD-0020AFDFD10A),
+    pointer_default(unique)
+]
+interface IImnAccountManager : IUnknown
+{
+    typedef struct tagACCTLISTINFO
+    {
+        DWORD cbSize;
+        ACCTTYPE AcctTypeInit;
+        DWORD dwAcctFlags;
+        DWORD dwFlags;
+    } ACCTLISTINFO;
+
+    HRESULT Init(
+        [in]    IImnAdviseMigrateServer *pAdviseMigrateServer);
+
+    HRESULT CreateAccountObject(
+        [in]    ACCTTYPE AcctType,
+        [out]   IImnAccount **ppAccount);
+
+    HRESULT Enumerate(
+        [in]    DWORD dwSrvTypes,
+        [out]   IImnEnumAccounts **ppEnumAccounts);
+
+    HRESULT GetAccountCount(
+        [in]    ACCTTYPE AcctType,
+        [out]   ULONG *pcServers);
+
+    HRESULT FindAccount(
+        [in]    DWORD dwPropTag,
+        [in]    LPCSTR pszSearchData,
+        [out]   IImnAccount **ppAccount);
+
+    HRESULT GetDefaultAccountName(
+        [in]    ACCTTYPE AcctType,
+        [in,ref] LPSTR pszAccount,
+        [in]    ULONG cchMax);
+
+    HRESULT ProcessNotification(
+        [in]    UINT uMsg,
+        [in]    WPARAM wParam,
+        [in]    LPARAM lParam);
+
+    HRESULT ValidateDefaultSendAccount();
+
+    HRESULT AccountListDialog(
+        [in]    HWND hwnd,
+        [in]    ACCTLISTINFO *pinfo);
+
+    HRESULT Advise(
+        [in]    IImnAdviseAccount *pAdviseAccount,
+        [out]   DWORD *pdwConnection);
+
+    HRESULT Unadvise(
+        [in]    DWORD dwConnection);
+
+    HRESULT GetUniqueAccountName(
+        [in]    LPSTR szName,
+        [in]    UINT cch);
+
+    HRESULT InitEx(
+        [in]    IImnAdviseMigrateServer *pAdviseMigrateServer,
+        [in]    DWORD dwFlags);
+}
+
+[
+    object,
+    uuid(C43DFC6F-62BB-11D2-A727-00C04F79E7C8),
+    pointer_default(unique)
+]
+interface IImnAccountManager2 : IImnAccountManager
+{
+    HRESULT InitUser(
+        [in]    IImnAdviseMigrateServer *pAdviseMigrateServer,
+        [in]    REFGUID rguidID,
+        [in]    DWORD dwFlags);
+
+    HRESULT GetIncompleteAccount(
+        [in]    ACCTTYPE AcctType,
+        [in,ref] LPSTR pszAccountId,
+        [in]    ULONG cchMax);
+
+    HRESULT SetIncompleteAccount(
+        [in]    ACCTTYPE AcctType,
+        [in]    LPCSTR pszAccountId);
+}
+
+[
+    object,
+    uuid(FD465484-1384-11D0-ABBD-0020AFDFD10A),
+    pointer_default(unique)
+]
+interface IPropertyContainer : IUnknown
+{
+    typedef enum
+    {
+        TYPE_ERROR = 1000,
+        TYPE_DWORD,
+        TYPE_LONG,
+        TYPE_WORD,
+        TYPE_SHORT,
+        TYPE_BYTE,
+        TYPE_CHAR,
+        TYPE_FILETIME,
+        TYPE_STRING,
+        TYPE_BINARY,
+        TYPE_FLAGS,
+        TYPE_STREAM,
+        TYPE_WSTRING,
+        TYPE_BOOL,
+        TYPE_PASS,
+        TYPE_LAST
+    } PROPTYPE;
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef GetProp")
+cpp_quote("#undef SetProp")
+cpp_quote("#endif")
+
+    HRESULT GetProp(
+        [in]    DWORD dwPropTag,
+        [in,size_is(*pcb),ref] BYTE *pb,
+        [in]    ULONG *pcb);
+
+    HRESULT GetPropDw(
+        [in]    DWORD dwPropTag,
+        [out]   DWORD *pdw);
+
+    HRESULT GetPropSz(
+        [in]    DWORD dwPropTag,
+        [in,ref] LPSTR psz,
+        [in]    ULONG cchMax);
+
+    HRESULT SetProp(
+        [in]    DWORD dwPropTag,
+        [in,size_is(cb)] BYTE *pb,
+        [in]    ULONG cb);
+
+    HRESULT SetPropDw(
+        [in]    DWORD dwPropTag,
+        [in]    DWORD dw);
+
+    HRESULT SetPropSz(
+        [in]    DWORD dwPropTag,
+        [in]    LPSTR psz);
+}
+
+[
+    object,
+    uuid(FD465482-1384-11D0-ABBD-0020AFDFD10A),
+    pointer_default(unique)
+]
+interface IImnAccount : IPropertyContainer
+{
+    HRESULT Exist();
+
+    HRESULT SetAsDefault();
+
+    HRESULT Delete();
+
+    HRESULT SaveChanges();
+
+    HRESULT GetAccountType(
+        [out]   ACCTTYPE *pAcctType);
+
+    HRESULT GetServerTypes(
+        [out]   DWORD *pdwSrvTypes);
+
+    HRESULT ShowProperties(
+        [in]    HWND hwnd,
+        [in]    DWORD dwFlags);
+
+    HRESULT ValidateProperty(
+        [in]    DWORD dwPropTag,
+        [in,size_is(cb)] BYTE *pb,
+        [in]    ULONG cb);
+
+    HRESULT DoWizard(
+        [in]    HWND hwnd,
+        [in]    DWORD dwFlags);
+
+    HRESULT DoImportWizard(
+        [in]    HWND hwnd,
+        [in]    CLSID clsid,
+        [in]    DWORD dwFlags);
+}
+
+cpp_quote("HRESULT WINAPI HrCreateAccountManager(IImnAccountManager **ppAccountManager);")
+cpp_quote("HRESULT WINAPI ValidEmailAddress(LPSTR lpAddress);")
diff --git a/include/imnxport.idl b/include/imnxport.idl
new file mode 100644
index 0000000..50f3e4e
--- /dev/null
+++ b/include/imnxport.idl
@@ -0,0 +1,699 @@
+/*
+ * Copyright 2006 Robert Shearman for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+import "imnact.idl";
+
+interface IInternetTransport;
+interface ISMTPTransport;
+interface IPOP3Transport;
+
+/* CLSIDs */
+
+cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);")
+cpp_quote("DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
+cpp_quote("DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
+cpp_quote("DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);")
+
+/* Error Codes */
+
+cpp_quote("#ifndef HR_E")
+cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+cpp_quote("#ifndef HR_S")
+cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
+cpp_quote("#endif")
+
+/* General Error Codes */
+cpp_quote("#define IXP_E_LOAD_SICILY_FAILED     HR_E(0xCC00)")
+cpp_quote("#define IXP_E_INVALID_CERT_CN        HR_E(0xCC01)")
+cpp_quote("#define IXP_E_INVALID_CERT_DATE      HR_E(0xCC02)")
+cpp_quote("#define IXP_E_ALREADY_CONNECTED      HR_E(0xCC03)")
+cpp_quote("#define IXP_E_CONN                   HR_E(0xCC04)")
+cpp_quote("#define IXP_E_NOT_CONNECTED          HR_E(0xCC05)")
+cpp_quote("#define IXP_E_CONN_SEND              HR_E(0xCC06)")
+cpp_quote("#define IXP_E_WOULD_BLOCK            HR_E(0xCC07)")
+cpp_quote("#define IXP_E_INVALID_STATE          HR_E(0xCC08)")
+cpp_quote("#define IXP_E_CONN_RECV              HR_E(0xCC09)")
+cpp_quote("#define IXP_E_INCOMPLETE             HR_E(0xCC0A)")
+cpp_quote("#define IXP_E_BUSY                   HR_E(0xCC0B)")
+cpp_quote("#define IXP_E_NOT_INIT               HR_E(0xCC0C)")
+cpp_quote("#define IXP_E_CANT_FIND_HOST         HR_E(0xCC0D)")
+cpp_quote("#define IXP_E_FAILED_TO_CONNECT      HR_E(0xCC0E)")
+cpp_quote("#define IXP_E_CONNECTION_DROPPED     HR_E(0xCC0F)")
+cpp_quote("#define IXP_E_INVALID_ADDRESS        HR_E(0xCC10)")
+cpp_quote("#define IXP_E_INVALID_ADDRESS_LIST   HR_E(0xCC11)")
+cpp_quote("#define IXP_E_SOCKET_READ_ERROR      HR_E(0xCC12)")
+cpp_quote("#define IXP_E_SOCKET_WRITE_ERROR     HR_E(0xCC13)")
+cpp_quote("#define IXP_E_SCOKET_INIT_ERROR      HR_E(0xCC14)")
+cpp_quote("#define IXP_E_SOCKET_CONNECT_ERROR   HR_E(0xCC15)")
+cpp_quote("#define IXP_E_INVALID_ACCOUNT        HR_E(0xCC16)")
+cpp_quote("#define IXP_E_USER_CANCEL            HR_E(0xCC17)")
+cpp_quote("#define IXP_E_SICILY_LOGON_FAILED    HR_E(0xCC18)")
+cpp_quote("#define IXP_E_TIMEOUT                HR_E(0xCC19)")
+cpp_quote("#define IXP_E_SECURE_CONNECT_FAILED  HR_E(0xCC1A)")
+
+/* SMTP Failure Statuses */
+cpp_quote("#define IXP_E_SMTP_RESPONSE_ERROR            HR_E(0xCC60)")
+cpp_quote("#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE     HR_E(0xCC61)")
+cpp_quote("#define IXP_E_SMTP_500_SYNTAX_ERROR          HR_E(0xCC62)")
+cpp_quote("#define IXP_E_SMTP_501_PARAM_SYNTAX          HR_E(0xCC63)")
+cpp_quote("#define IXP_E_SMTP_502_COMMAND_NOTIMPL       HR_E(0xCC64)")
+cpp_quote("#define IXP_E_SMTP_503_COMMAND_SEQ           HR_E(0xCC65)")
+cpp_quote("#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)")
+cpp_quote("#define IXP_E_SMTP_421_NOT_AVAILABLE         HR_E(0xCC67)")
+cpp_quote("#define IXP_E_SMTP_450_MAILBOX_BUSY          HR_E(0xCC68)")
+cpp_quote("#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND     HR_E(0xCC69)")
+cpp_quote("#define IXP_E_SMTP_451_ERROR_PROCESSING      HR_E(0xCC6A)")
+cpp_quote("#define IXP_E_SMTP_551_USER_NOT_LOCAL        HR_E(0xCC6B)")
+cpp_quote("#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE     HR_E(0xCC6C)")
+cpp_quote("#define IXP_E_SMTP_552_STORAGE_OVERFLOW      HR_E(0xCC6D)")
+cpp_quote("#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX   HR_E(0xCC6E)")
+cpp_quote("#define IXP_E_SMTP_554_TRANSACT_FAILED       HR_E(0xCC6F)")
+
+/* SMTP Success Statuses */
+cpp_quote("#define IXP_E_SMTP_211_SYSTEM_STATUS         HR_S(0xCC70)")
+cpp_quote("#define IXP_E_SMTP_214_HELP_MESSAGE          HR_S(0xCC71)")
+cpp_quote("#define IXP_E_SMTP_220_READY                 HR_S(0xCC72)")
+cpp_quote("#define IXP_E_SMTP_221_CLOSING               HR_S(0xCC73)")
+cpp_quote("#define IXP_E_SMTP_250_MAIL_ACTION_OKAY      HR_S(0xCC74)")
+cpp_quote("#define IXP_E_SMTP_251_FORWARDING_MAIL       HR_S(0xCC75)")
+cpp_quote("#define IXP_E_SMTP_354_START_MAIL_INPUT      HR_S(0xCC76)")
+cpp_quote("#define IXP_E_SMTP_CONTINUE                  HR_S(0xCC77)")
+cpp_quote("#define IXP_E_SMTP_334_AUTH_READY_RESPONSE   HR_S(0xCC78)")
+cpp_quote("#define IXP_E_SMTP_245_AUTH_SUCCESS          HR_S(0xCC79)")
+
+/* More SMTP Failure Statuses */
+cpp_quote("#define IXP_E_SMTP_REJECTED_SENDER           HR_E(0xCC78)")
+cpp_quote("#define IXP_E_SMTP_REJECTED_RECIPIENTS       HR_E(0xCC79)")
+cpp_quote("#define IXP_E_SMTP_NO_SENDER                 HR_E(0xCC7A)")
+cpp_quote("#define IXP_E_SMTP_NO_RECIPIENTS             HR_E(0xCC7B)")
+cpp_quote("#define IXP_E_SMTP_530_STARTTLS_REQUIRED     HR_E(0xCC7C)")
+cpp_quote("#define IXP_E_SMTP_NO_STARTTLS_SUPPORT       HR_E(0xCC7D)")
+cpp_quote("#define IXP_E_SMTP_NO_DSN_SUPPORT            HR_E(0xCC7E)")
+cpp_quote("#define IXP_E_SMTP_454_STARTTLS_FAILED       HR_E(0xCC7F)")
+
+const SHORT CCHMAX_DOMAIN = 256;
+const SHORT CCHMAX_PHONE_NUMBER = 128;
+
+const DWORD DEFAULT_IMAP_PORT = 143;
+const DWORD DEFAULT_POP3_PORT = 110;
+const DWORD DEFAULT_SMTP_PORT = 25;
+const DWORD DEFAULT_NNTP_PORT = 119;
+
+typedef enum tagINETADDRTYPE
+{
+    ADDR_TO,
+    ADDR_FROM,
+    ADDR_DSN_NEVER = 16,
+    ADDR_DSN_SUCCESS = 32,
+    ADDR_DSN_FAILURE = 64,
+    ADDR_DSN_DELAY = 128
+} INETADDRTYPE;
+
+const DWORD ADDR_TOFROM_MASK = 0x1;
+const DWORD ADDR_DSN_MASK = 0xf0;
+
+typedef enum tagDSNRET
+{
+    DSNRET_DEFAULT,
+    DSNRET_HDRS,
+    DSNRET_FULL,
+} DSNRET;
+
+typedef struct tagINETADDR
+{
+    INETADDRTYPE addrtype;
+    CHAR szEmail[CCHMAX_EMAIL_ADDRESS];
+} INETADDR, *LPINETADDR;
+
+typedef struct tagINETADDRLIST
+{
+    ULONG cAddress;
+    LPINETADDR prgAddress;
+} INETADDRLIST, *LPINETADDRLIST;
+
+typedef enum tagRASCONNTYPE
+{
+    RAS_CONNECT_LAN,
+    RAS_CONNECT_MANUAL,
+    RAS_CONNECT_RAS
+} RASCONNTYPE;
+
+typedef enum tagHTTPMAILPROPTYPE
+{
+    HTTPMAIL_PROP_INVALID,
+    HTTPMAIL_PROP_ADBAR,
+    HTTPMAIL_PROP_CONTACTS,
+    HTTPMAIL_PROP_INBOX,
+    HTTPMAIL_PROP_OUTBOX,
+    HTTPMAIL_PROP_SENDMSG,
+    HTTPMAIL_PROP_SENTITEMS,
+    HTTPMAIL_PROP_DELETEDITEMS,
+    HTTPMAIL_PROP_DRAFTS,
+    HTTPMAIL_PROP_MSGFOLDERROOT,
+    HTTPMAIL_PROP_SIG,
+    HTTPMAIL_PROP_LAST
+} HTTPMAILPROPTYPE;
+
+typedef enum tagHTTPMAILSPECIALFOLDER
+{
+    HTTPMAIL_SF_NONE,
+    HTTPMAIL_SF_UNRECOGNIZED,
+    HTTPMAIL_SF_INBOX,
+    HTTPMAIL_SF_DELETEDITEMS,
+    HTTPMAIL_SF_DRAFTS,
+    HTTPMAIL_SF_OUTBOX,
+    HTTPMAIL_SF_SENTITEMS,
+    HTTPMAIL_SF_CONTACTS,
+    HTTPMAIL_SF_CALENDAR,
+    HTTPMAIL_SF_MSNPROMO,
+    HTTPMAIL_SF_LAST
+} HTTPMAILSPECIALFOLDER;
+
+typedef enum tagHTTPMAILCONTACTTYPE
+{
+    HTTPMAIL_CT_CONTACT,
+    HTTPMAIL_CT_GROUP,
+    HTTPMAIL_CT_LAST
+} HTTPMAILCONTACTTYPE;
+
+const DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF;
+const DWORD DAVNAMESPACE_DAV = 0;
+const DWORD DAVNAMESPACE_HOTMAIL = 1;
+const DWORD DAVNAMESPACE_HTTPMAIL = 2;
+const DWORD DAVNAMESPACE_MAIL = 3;
+const DWORD DAVNAMESPACE_CONTACTS = 4;
+
+cpp_quote("#define ISF_SMTP_USEIPFORHELO        0x01")
+cpp_quote("#define ISF_ALWAYSPROMPTFORPASSWORD  0x02")
+/* for SMTP - send EHLO and use STARTTLS if available: */
+cpp_quote("#define ISF_SSLONSAMEPORT            0x04")
+cpp_quote("#define ISF_QUERYDSNSUPPORT          0x08")
+/* for SMTP - send EHLO and use AUTH if available: */
+cpp_quote("#define ISF_QUERYAUTHSUPPORT         0x10")
+
+typedef struct INETSERVER
+{
+    CHAR szAccount[CCHMAX_ACCOUNT_NAME];
+    CHAR szUserName[CCHMAX_USERNAME];
+    CHAR szPassword[CCHMAX_PASSWORD];
+    CHAR szServerName[CCHMAX_SERVER_NAME];
+    CHAR szConnectoid[CCHMAX_CONNECTOID];
+    RASCONNTYPE rasconntype;
+    DWORD dwPort;
+    BOOL fSSL;
+    BOOL fTrySicily;
+    DWORD dwTimeout;
+    DWORD dwFlags;
+} INETSERVER, *LPINETSERVER;
+
+typedef enum tagIXPTYPE
+{
+    IXP_NNTP,
+    IXP_SMTP,
+    IXP_POP3,
+    IXP_IMAP,
+    IXP_RAS,
+    IXP_HTTPMail
+} IXPTYPE;
+
+typedef enum tagIXPSTATUS
+{
+    IXP_FINDINGHOST,
+    IXP_CONNECTING,
+    IXP_SECURING,
+    IXP_CONNECTED,
+    IXP_AUTHORIZING,
+    IXP_AUTHRETRY,
+    IXP_AUTHORIZED,
+    IXP_DISCONNECTING,
+    IXP_DISCONNECTED,
+    IXP_LAST
+} IXPSTATUS;
+
+const DWORD DEPTH_INFINITY = 0xFFFFFFFE;
+
+typedef DWORD MEMBERINFOFLAGS;
+
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x0;
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x1;
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x2;
+const MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS;
+
+typedef DWORD IMAP_MSGFLAGS;
+
+const IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00;
+const IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x01;
+const IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x02;
+const IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x04;
+const IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x08;
+const IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x10;
+const IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x1f;
+
+[
+    object,
+    uuid(CA30F3FF-C9AC-11D1-9A3A-00C04FA309D4),
+    local
+]
+interface ITransportCallbackService : IUnknown
+{
+    HRESULT GetParentWindow(
+        [in]    DWORD dwReserved,
+        [out]   HWND *phwndParent);
+
+    HRESULT GetAccount(
+        [out]   LPDWORD pdwServerType,
+        [out]   IImnAccount **ppAccount);
+}
+
+[
+    object,
+    uuid(0DF2C7E1-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface ITransportCallback : IUnknown
+{
+    typedef struct tagIXPRESULT
+    {
+        HRESULT hrResult;
+        LPSTR pszResponse;
+        UINT uiServerError;
+        HRESULT hrServerError;
+        DWORD dwSocketError;
+        LPSTR pszProblem;
+    } IXPRESULT, *LPIXPRESULT;
+
+    typedef enum tagCMDTYPE
+    {
+        CMD_SEND,
+        CMD_RESP
+    } CMDTYPE;
+
+    HRESULT OnTimeout(
+        [in,out]    DWORD *pdwTimeout,
+        [in]        IInternetTransport *pTransport);
+
+    HRESULT OnLogonPrompt(
+        [in,out]    LPINETSERVER pInetServer,
+        [in]        IInternetTransport *pTransport);
+
+    INT OnPrompt(
+        [in]    HRESULT hrError,
+        [in]    LPCSTR pszText,
+        [in]    LPCSTR pszCaption,
+        [in]    UINT uType,
+        [in]    IInternetTransport *pTransport);
+
+    HRESULT OnStatus(
+        [in]    IXPSTATUS ixpstatus,
+        [in]    IInternetTransport *pTransport);
+
+    HRESULT OnError(
+        [in]    IXPSTATUS ixpstatus,
+        [in]    LPIXPRESULT pResult,
+        [in]    IInternetTransport *pTransport);
+
+    HRESULT OnCommand(
+        [in]    CMDTYPE cmdtype,
+        [in]    LPSTR pszLine,
+        [in]    HRESULT hrResponse,
+        [in]    IInternetTransport *pTransport);
+}
+
+[
+    object,
+    uuid(1F636C01-364E-11D0-81D3-00C04FD85AB4),
+    local
+]
+interface IInternetTransport : IUnknown
+{
+    const boolean iitAUTHENTICATE = TRUE;
+    const boolean iitDONT_AUTHENTICATe = FALSE;
+    const boolean iitENABLE_ONCOMMAND = TRUE;
+    const boolean iitDISABLE_ONCOMMAND = FALSE;
+
+    typedef enum tagIXPISSTATE
+    {
+        IXP_IS_CONNECTED,
+        IXP_IS_BUSY,
+        IXP_IS_READY,
+        IXP_IS_AUTHENTICATED
+    } IXPISSTATE;
+
+    HRESULT GetServerInfo(
+        [in,out]    LPINETSERVER pInetServer);
+
+    IXPTYPE GetIXPType();
+
+    HRESULT IsState(
+        [in]    IXPISSTATE isstate);
+
+    HRESULT InetServerFromAccount(
+        [in]        IImnAccount *pAccount,
+        [in,out]    LPINETSERVER pInetServer);
+
+    HRESULT Connect(
+        [in]    LPINETSERVER pInetServer,
+        [in]    boolean fAuthenticate,
+        [in]    boolean fCommandLogging);
+
+    HRESULT HandsOffCallback();
+
+    HRESULT Disconnect();
+
+    HRESULT DropConnection();
+
+    HRESULT GetStatus(
+        [out]   IXPSTATUS *pCurrentStatus);
+}
+
+[
+    object,
+    uuid(1F636C02-364E-11D0-81D3-00C04FD85AB4),
+    local
+]
+interface ISMTPCallback : ITransportCallback
+{
+    typedef enum tagSMTPCOMMAND
+    {
+        SMTP_NONE,
+        SMTP_BANNER,
+        SMTP_CONNECTED,
+        SMTP_SEND_MESSAGE,
+        SMTP_AUTH,
+        SMTP_EHLO,
+        SMTP_HELO,
+        SMTP_MAIL,
+        SMTP_RCPT,
+        SMTP_RSET,
+        SMTP_QUIT,
+        SMTP_DATA,
+        SMTP_DOT,
+        SMTP_SEND_STREAM,
+        SMTP_CUSTOM
+    } SMTPCOMMAND;
+
+    typedef struct tagSMTPSTREAM
+    {
+        DWORD cbIncrement;
+        DWORD cbCurrent;
+        DWORD cbTotal;
+    } SMTPSTREAM, *LPSMTPSTREAM;
+
+    typedef struct tagSMTPRESPONSE
+    {
+        SMTPCOMMAND command;
+        BOOL fDone;
+        IXPRESULT rIxpResult;
+        ISMTPTransport *pTransport;
+
+        [switch_type(SMTPCOMMAND), switch_is(command)]
+        union
+        {
+        [case(SMTP_SEND_STREAM)]    SMTPSTREAM rStreamInfo;
+        [default];
+        };
+    } SMTPRESPONSE, *LPSMTPRESPONSE;
+
+    HRESULT OnResponse(
+        [in] LPSMTPRESPONSE pResponse);
+}
+
+[
+    object,
+    uuid(0DF2C7E2-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface ISMTPTransport : IInternetTransport
+{
+    typedef struct tagSMTPMESSAGE
+    {
+        ULONG cbSize;
+        LPSTREAM pstmMsg;
+        INETADDRLIST rAddressList;
+    } SMTPMESSAGE, *LPSMTPMESSAGE;
+
+    HRESULT InitNew(
+        [in]    LPSTR pszLogFilePath,
+        [in]    ISMTPCallback *pCallback);
+
+cpp_quote("#ifdef WINE_NO_UNICODE_MACROS")
+cpp_quote("#undef SendMessage")
+cpp_quote("#endif")
+
+    HRESULT SendMessage(
+        [in]    LPSMTPMESSAGE pMessage);
+
+    HRESULT CommandMAIL(
+        [in]    LPSTR pszEmailFrom);
+
+    HRESULT CommandRCPT(
+        [in]    LPSTR pszEmailTo);
+
+    HRESULT CommandEHLO();
+
+    HRESULT CommandHELO();
+
+    HRESULT CommandAUTH(
+        [in]    LPSTR pszAuthType);
+
+    HRESULT CommandQUIT();
+
+    HRESULT CommandRSET();
+
+    HRESULT CommandDATA();
+
+    HRESULT CommandDOT();
+
+    HRESULT SendDataStream(
+        [in]    IStream *pStream,
+        [in]    ULONG cbSize);
+}
+
+[
+    object,
+    uuid(0DF2C7EC-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface ISMTPTransport2 : ISMTPTransport
+{
+    typedef struct tagSMTPMESSAGE2
+    {
+        SMTPMESSAGE smtpMsg;
+        LPSTR pszDSNENVID;
+        DSNRET dsnRet;
+        DWORD dwReserved;
+        DWORD dwReserved2;
+    } SMTPMESSAGE2, *LPSMTPMESSAGE2;
+
+    HRESULT SetWindow();
+
+    HRESULT ResetWindow();
+
+    HRESULT SendMessage2(
+        [in]    LPSMTPMESSAGE2 pMessage);
+
+    HRESULT CommandRCPT2(
+        [in]    LPSTR pszEmailTo,
+        [in]    INETADDRTYPE atDSN);
+}
+
+/* FIXME: IDAVNamespaceArbiter, IPropPatchRequest, IPropFindRequest, IPropFindMultiResponse, IPropFindResponse, IHTTPMailCallback, IHTTPMailTransport */
+
+[
+    object,
+    uuid(0DF2C7E3-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface IPOP3Callback : ITransportCallback
+{
+    typedef enum tagPOP3COMMAND
+    {
+        POP3_NONE,
+        POP3_BANNER,
+        POP3_CONNECTED,
+        POP3_USER,
+        POP3_PASS,
+        POP3_AUTH,
+        POP3_UIDL,
+        POP3_STAT,
+        POP3_LIST,
+        POP3_DELE,
+        POP3_RETR,
+        POP3_TOP,
+        POP3_NOOP,
+        POP3_QUIT,
+        POP3_RSET,
+        POP3_CUSTOM
+    } POP3COMMAND;
+
+    typedef struct tagPOP3RETR
+    {
+        BOOL fHeader;
+        BOOL fBody;
+        DWORD dwPopId;
+        DWORD cbSoFar;
+        LPSTR pszLines;
+        ULONG cbLines;
+    } POP3RETR, *LPPOP3RETR;
+
+    typedef struct tagPOP3TOP
+    {
+        BOOL fHeader;
+        BOOL fBody;
+        DWORD dwPopId;
+        DWORD cPreviewLines;
+        DWORD cbSoFar;
+        LPSTR pszLines;
+        ULONG cbLines;
+    } POP3TOP, *LPPOP3TOP;
+
+    typedef struct tagPOP3LIST
+    {
+        DWORD dwPopId;
+        DWORD cbSize;
+    } POP3LIST, *LPPOP3LIST;
+
+    typedef struct tagPOP3UIDL
+    {
+        DWORD dwPopId;
+        LPSTR pszUidl;
+    } POP3UIDL, *LPPOP3UIDL;
+
+    typedef struct tagPOP3STAT
+    {
+        DWORD cMessages;
+        DWORD cbMessages;
+    } POP3STAT, *LPPOP3STAT;
+
+    typedef struct tagPOP3RESPONSE
+    {
+        POP3COMMAND command;
+        BOOL fDone;
+        IXPRESULT rIxpResult;
+        IPOP3Transport *pTransport;
+        BOOL fValidInfo;
+        [switch_type(POP3COMMAND), switch_is(command)]
+        union
+        {
+        [case(POP3_UIDL)] POP3UIDL rUidlInfo;
+        [case(POP3_STAT)] POP3STAT rStatInfo;
+        [case(POP3_LIST)] POP3LIST rListInfo;
+        [case(POP3_DELE)] DWORD dwPopId;
+        [case(POP3_RETR)] POP3RETR rRetrInfo;
+        [case(POP3_TOP)]  POP3TOP rTopInfo;
+        [default];
+        };
+    } POP3RESPONSE, *LPPOP3RESPONSE;
+
+    HRESULT OnResponse(
+        [in]    LPPOP3RESPONSE pResponse);
+}
+
+[
+    object,
+    uuid(0DF2C7E4-3435-11D0-81D0-00C04FD85AB4),
+    local
+]
+interface IPOP3Transport : IInternetTransport
+{
+    typedef enum tagPOP3CMDTYPE
+    {
+        POP3CMD_GET_POPID,
+        POP3CMD_GET_MARKED,
+        POP3CMD_GET_ALL
+    } POP3CMDTYPE;
+
+    typedef enum tagPOP3MARKTYPE
+    {
+        POP3_MARK_FOR_TOP = 0x01,
+        POP3_MARK_FOR_RETR = 0x02,
+        POP3_MARK_FOR_DELE = 0x04,
+        POP3_MARK_FOR_UIDL = 0x08,
+        POP3_MARK_FOR_LIST = 0x10
+    } POP3MARKTYPE;
+
+    HRESULT InitNew(
+        [in]    LPSTR pszLogFilePath,
+        [in]    IPOP3Callback *pCallback);
+
+    HRESULT MarkItem(
+        [in]    POP3MARKTYPE marktype,
+        [in]    DWORD dwPopId,
+        [in]    boolean fMarked);
+
+    HRESULT CommandAUTH(
+        [in]    LPSTR pszAuthType);
+
+    HRESULT CommandUSER(
+        [in]    LPSTR pszUserName);
+
+    HRESULT CommandPASS(
+        [in]    LPSTR pszPassword);
+
+    HRESULT CommandLIST(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId);
+
+    HRESULT CommandTOP(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId,
+        [in]    DWORD cPreviewLines);
+
+    HRESULT CommandQUIT();
+
+    HRESULT CommandSTAT();
+
+    HRESULT CommandNOOP();
+
+    HRESULT CommandRSET();
+
+    HRESULT CommandUIDL(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId);
+
+    HRESULT CommandDELE(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId);
+
+    HRESULT CommandRETR(
+        [in]    POP3CMDTYPE cmdtype,
+        [in]    DWORD dwPopId);
+}
+
+/* FIXME: INNTPCallback, INNTPTransport */
+
+/* FIXME: IRangeList */
+
+/* FIXME: IIMAPCallback, IIMAPTransport */
+
+#if 0
+cpp_quote("HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);")
+cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);")
+#endif
+cpp_quote("HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);")
+cpp_quote("HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);")