1/* 2 * Copyright 2006 Robert Shearman for CodeWeavers 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19import "imnact.idl"; 20 21interface IInternetTransport; 22interface ISMTPTransport; 23interface IPOP3Transport; 24interface IIMAPTransport; 25 26/* CLSIDs */ 27 28cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") 29cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") 30cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") 31cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") 32cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") 33cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") 34cpp_quote("DEFINE_GUID(CLSID_IRangeList, 0xfd853cea, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") 35cpp_quote("DEFINE_GUID(CLSID_IIMAPTransport, 0xfd853ceb, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") 36cpp_quote("DEFINE_GUID(CLSID_IHTTPMailTransport, 0x5a580c11, 0xe5eb, 0x11d1, 0xa8, 0x6e, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);") 37cpp_quote("DEFINE_GUID(CLSID_IPropFindRequest, 0xbb847b8a, 0x054a, 0x11d2, 0xa8, 0x94, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);") 38cpp_quote("DEFINE_GUID(CLSID_IPropPatchRequest, 0xea678830, 0x235d, 0x11d2, 0xa8, 0xb6, 0x00, 0x00, 0xf8, 0x08, 0x4f, 0x96);") 39 40/* Error Codes */ 41 42cpp_quote("#ifndef HR_E") 43cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)") 44cpp_quote("#endif") 45cpp_quote("#ifndef HR_S") 46cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)") 47cpp_quote("#endif") 48 49/* General Error Codes */ 50cpp_quote("#define IXP_E_LOAD_SICILY_FAILED HR_E(0xCC00)") 51cpp_quote("#define IXP_E_INVALID_CERT_CN HR_E(0xCC01)") 52cpp_quote("#define IXP_E_INVALID_CERT_DATE HR_E(0xCC02)") 53cpp_quote("#define IXP_E_ALREADY_CONNECTED HR_E(0xCC03)") 54cpp_quote("#define IXP_E_CONN HR_E(0xCC04)") 55cpp_quote("#define IXP_E_NOT_CONNECTED HR_E(0xCC05)") 56cpp_quote("#define IXP_E_CONN_SEND HR_E(0xCC06)") 57cpp_quote("#define IXP_E_WOULD_BLOCK HR_E(0xCC07)") 58cpp_quote("#define IXP_E_INVALID_STATE HR_E(0xCC08)") 59cpp_quote("#define IXP_E_CONN_RECV HR_E(0xCC09)") 60cpp_quote("#define IXP_E_INCOMPLETE HR_E(0xCC0A)") 61cpp_quote("#define IXP_E_BUSY HR_E(0xCC0B)") 62cpp_quote("#define IXP_E_NOT_INIT HR_E(0xCC0C)") 63cpp_quote("#define IXP_E_CANT_FIND_HOST HR_E(0xCC0D)") 64cpp_quote("#define IXP_E_FAILED_TO_CONNECT HR_E(0xCC0E)") 65cpp_quote("#define IXP_E_CONNECTION_DROPPED HR_E(0xCC0F)") 66cpp_quote("#define IXP_E_INVALID_ADDRESS HR_E(0xCC10)") 67cpp_quote("#define IXP_E_INVALID_ADDRESS_LIST HR_E(0xCC11)") 68cpp_quote("#define IXP_E_SOCKET_READ_ERROR HR_E(0xCC12)") 69cpp_quote("#define IXP_E_SOCKET_WRITE_ERROR HR_E(0xCC13)") 70cpp_quote("#define IXP_E_SCOKET_INIT_ERROR HR_E(0xCC14)") 71cpp_quote("#define IXP_E_SOCKET_CONNECT_ERROR HR_E(0xCC15)") 72cpp_quote("#define IXP_E_INVALID_ACCOUNT HR_E(0xCC16)") 73cpp_quote("#define IXP_E_USER_CANCEL HR_E(0xCC17)") 74cpp_quote("#define IXP_E_SICILY_LOGON_FAILED HR_E(0xCC18)") 75cpp_quote("#define IXP_E_TIMEOUT HR_E(0xCC19)") 76cpp_quote("#define IXP_E_SECURE_CONNECT_FAILED HR_E(0xCC1A)") 77 78/* SMTP Failure Statuses */ 79cpp_quote("#define IXP_E_SMTP_RESPONSE_ERROR HR_E(0xCC60)") 80cpp_quote("#define IXP_E_SMTP_UNKNOWN_RESPONSE_CODE HR_E(0xCC61)") 81cpp_quote("#define IXP_E_SMTP_500_SYNTAX_ERROR HR_E(0xCC62)") 82cpp_quote("#define IXP_E_SMTP_501_PARAM_SYNTAX HR_E(0xCC63)") 83cpp_quote("#define IXP_E_SMTP_502_COMMAND_NOTIMPL HR_E(0xCC64)") 84cpp_quote("#define IXP_E_SMTP_503_COMMAND_SEQ HR_E(0xCC65)") 85cpp_quote("#define IXP_E_SMTP_504_COMMAND_PARAM_NOTIMPL HR_E(0xCC66)") 86cpp_quote("#define IXP_E_SMTP_421_NOT_AVAILABLE HR_E(0xCC67)") 87cpp_quote("#define IXP_E_SMTP_450_MAILBOX_BUSY HR_E(0xCC68)") 88cpp_quote("#define IXP_E_SMTP_550_MAILBOX_NOT_FOUND HR_E(0xCC69)") 89cpp_quote("#define IXP_E_SMTP_451_ERROR_PROCESSING HR_E(0xCC6A)") 90cpp_quote("#define IXP_E_SMTP_551_USER_NOT_LOCAL HR_E(0xCC6B)") 91cpp_quote("#define IXP_E_SMTP_452_NO_SYSTEM_STORAGE HR_E(0xCC6C)") 92cpp_quote("#define IXP_E_SMTP_552_STORAGE_OVERFLOW HR_E(0xCC6D)") 93cpp_quote("#define IXP_E_SMTP_553_MAILBOX_NAME_SYNTAX HR_E(0xCC6E)") 94cpp_quote("#define IXP_E_SMTP_554_TRANSACT_FAILED HR_E(0xCC6F)") 95 96/* SMTP Success Statuses */ 97cpp_quote("#define IXP_E_SMTP_211_SYSTEM_STATUS HR_S(0xCC70)") 98cpp_quote("#define IXP_E_SMTP_214_HELP_MESSAGE HR_S(0xCC71)") 99cpp_quote("#define IXP_E_SMTP_220_READY HR_S(0xCC72)") 100cpp_quote("#define IXP_E_SMTP_221_CLOSING HR_S(0xCC73)") 101cpp_quote("#define IXP_E_SMTP_250_MAIL_ACTION_OKAY HR_S(0xCC74)") 102cpp_quote("#define IXP_E_SMTP_251_FORWARDING_MAIL HR_S(0xCC75)") 103cpp_quote("#define IXP_E_SMTP_354_START_MAIL_INPUT HR_S(0xCC76)") 104cpp_quote("#define IXP_E_SMTP_CONTINUE HR_S(0xCC77)") 105cpp_quote("#define IXP_E_SMTP_334_AUTH_READY_RESPONSE HR_S(0xCC78)") 106cpp_quote("#define IXP_E_SMTP_245_AUTH_SUCCESS HR_S(0xCC79)") 107 108/* More SMTP Failure Statuses */ 109cpp_quote("#define IXP_E_SMTP_REJECTED_SENDER HR_E(0xCC78)") 110cpp_quote("#define IXP_E_SMTP_REJECTED_RECIPIENTS HR_E(0xCC79)") 111cpp_quote("#define IXP_E_SMTP_NO_SENDER HR_E(0xCC7A)") 112cpp_quote("#define IXP_E_SMTP_NO_RECIPIENTS HR_E(0xCC7B)") 113cpp_quote("#define IXP_E_SMTP_530_STARTTLS_REQUIRED HR_E(0xCC7C)") 114cpp_quote("#define IXP_E_SMTP_NO_STARTTLS_SUPPORT HR_E(0xCC7D)") 115cpp_quote("#define IXP_E_SMTP_NO_DSN_SUPPORT HR_E(0xCC7E)") 116cpp_quote("#define IXP_E_SMTP_454_STARTTLS_FAILED HR_E(0xCC7F)") 117 118const SHORT CCHMAX_DOMAIN = 256; 119const SHORT CCHMAX_PHONE_NUMBER = 128; 120 121const DWORD DEFAULT_IMAP_PORT = 143; 122const DWORD DEFAULT_POP3_PORT = 110; 123const DWORD DEFAULT_SMTP_PORT = 25; 124const DWORD DEFAULT_NNTP_PORT = 119; 125 126typedef enum tagINETADDRTYPE 127{ 128 ADDR_TO, 129 ADDR_FROM, 130 ADDR_DSN_NEVER = 16, 131 ADDR_DSN_SUCCESS = 32, 132 ADDR_DSN_FAILURE = 64, 133 ADDR_DSN_DELAY = 128 134} INETADDRTYPE; 135 136const DWORD ADDR_TOFROM_MASK = 0x1; 137const DWORD ADDR_DSN_MASK = 0xf0; 138 139typedef enum tagDSNRET 140{ 141 DSNRET_DEFAULT, 142 DSNRET_HDRS, 143 DSNRET_FULL, 144} DSNRET; 145 146typedef struct tagINETADDR 147{ 148 INETADDRTYPE addrtype; 149 CHAR szEmail[CCHMAX_EMAIL_ADDRESS]; 150} INETADDR, *LPINETADDR; 151 152typedef struct tagINETADDRLIST 153{ 154 ULONG cAddress; 155 LPINETADDR prgAddress; 156} INETADDRLIST, *LPINETADDRLIST; 157 158typedef enum tagRASCONNTYPE 159{ 160 RAS_CONNECT_LAN, 161 RAS_CONNECT_MANUAL, 162 RAS_CONNECT_RAS 163} RASCONNTYPE; 164 165typedef enum tagHTTPMAILPROPTYPE 166{ 167 HTTPMAIL_PROP_INVALID, 168 HTTPMAIL_PROP_ADBAR, 169 HTTPMAIL_PROP_CONTACTS, 170 HTTPMAIL_PROP_INBOX, 171 HTTPMAIL_PROP_OUTBOX, 172 HTTPMAIL_PROP_SENDMSG, 173 HTTPMAIL_PROP_SENTITEMS, 174 HTTPMAIL_PROP_DELETEDITEMS, 175 HTTPMAIL_PROP_DRAFTS, 176 HTTPMAIL_PROP_MSGFOLDERROOT, 177 HTTPMAIL_PROP_SIG, 178 HTTPMAIL_PROP_LAST 179} HTTPMAILPROPTYPE; 180 181typedef enum tagHTTPMAILSPECIALFOLDER 182{ 183 HTTPMAIL_SF_NONE, 184 HTTPMAIL_SF_UNRECOGNIZED, 185 HTTPMAIL_SF_INBOX, 186 HTTPMAIL_SF_DELETEDITEMS, 187 HTTPMAIL_SF_DRAFTS, 188 HTTPMAIL_SF_OUTBOX, 189 HTTPMAIL_SF_SENTITEMS, 190 HTTPMAIL_SF_CONTACTS, 191 HTTPMAIL_SF_CALENDAR, 192 HTTPMAIL_SF_MSNPROMO, 193 HTTPMAIL_SF_LAST 194} HTTPMAILSPECIALFOLDER; 195 196typedef enum tagHTTPMAILCONTACTTYPE 197{ 198 HTTPMAIL_CT_CONTACT, 199 HTTPMAIL_CT_GROUP, 200 HTTPMAIL_CT_LAST 201} HTTPMAILCONTACTTYPE; 202 203const DWORD DAVNAMESPACE_UNKNOWN = 0xFFFFFFFF; 204const DWORD DAVNAMESPACE_DAV = 0; 205const DWORD DAVNAMESPACE_HOTMAIL = 1; 206const DWORD DAVNAMESPACE_HTTPMAIL = 2; 207const DWORD DAVNAMESPACE_MAIL = 3; 208const DWORD DAVNAMESPACE_CONTACTS = 4; 209 210cpp_quote("#define ISF_SMTP_USEIPFORHELO 0x01") 211cpp_quote("#define ISF_ALWAYSPROMPTFORPASSWORD 0x02") 212/* for SMTP - send EHLO and use STARTTLS if available: */ 213cpp_quote("#define ISF_SSLONSAMEPORT 0x04") 214cpp_quote("#define ISF_QUERYDSNSUPPORT 0x08") 215/* for SMTP - send EHLO and use AUTH if available: */ 216cpp_quote("#define ISF_QUERYAUTHSUPPORT 0x10") 217 218typedef struct INETSERVER 219{ 220 CHAR szAccount[CCHMAX_ACCOUNT_NAME]; 221 CHAR szUserName[CCHMAX_USERNAME]; 222 CHAR szPassword[CCHMAX_PASSWORD]; 223 CHAR szServerName[CCHMAX_SERVER_NAME]; 224 CHAR szConnectoid[CCHMAX_CONNECTOID]; 225 RASCONNTYPE rasconntype; 226 DWORD dwPort; 227 BOOL fSSL; 228 BOOL fTrySicily; 229 DWORD dwTimeout; 230 DWORD dwFlags; 231} INETSERVER, *LPINETSERVER; 232 233typedef enum tagIXPTYPE 234{ 235 IXP_NNTP, 236 IXP_SMTP, 237 IXP_POP3, 238 IXP_IMAP, 239 IXP_RAS, 240 IXP_HTTPMail 241} IXPTYPE; 242 243typedef enum tagIXPSTATUS 244{ 245 IXP_FINDINGHOST, 246 IXP_CONNECTING, 247 IXP_SECURING, 248 IXP_CONNECTED, 249 IXP_AUTHORIZING, 250 IXP_AUTHRETRY, 251 IXP_AUTHORIZED, 252 IXP_DISCONNECTING, 253 IXP_DISCONNECTED, 254 IXP_LAST 255} IXPSTATUS; 256 257const DWORD DEPTH_INFINITY = 0xFFFFFFFE; 258 259typedef DWORD MEMBERINFOFLAGS; 260 261const MEMBERINFOFLAGS HTTP_MEMBERINFO_COMMONPROPS = 0x0; 262const MEMBERINFOFLAGS HTTP_MEMBERINFO_FOLDERPROPS = 0x1; 263const MEMBERINFOFLAGS HTTP_MEMBERINFO_MESSAGEPROPS = 0x2; 264const MEMBERINFOFLAGS HTTP_MEMBERINFO_ALLPROPS = HTTP_MEMBERINFO_FOLDERPROPS | HTTP_MEMBERINFO_MESSAGEPROPS; 265 266typedef DWORD IMAP_MSGFLAGS; 267 268const IMAP_MSGFLAGS IMAP_MSG_NOFLAGS = 0x00; 269const IMAP_MSGFLAGS IMAP_MSG_ANSWERED = 0x01; 270const IMAP_MSGFLAGS IMAP_MSG_FLAGGED = 0x02; 271const IMAP_MSGFLAGS IMAP_MSG_DELETED = 0x04; 272const IMAP_MSGFLAGS IMAP_MSG_SEEN = 0x08; 273const IMAP_MSGFLAGS IMAP_MSG_DRAFT = 0x10; 274const IMAP_MSGFLAGS IMAP_MSG_ALLFLAGS = 0x1f; 275 276[ 277 object, 278 uuid(CA30F3FF-C9AC-11D1-9A3A-00C04FA309D4), 279 local 280] 281interface ITransportCallbackService : IUnknown 282{ 283 HRESULT GetParentWindow( 284 [in] DWORD dwReserved, 285 [out] HWND *phwndParent); 286 287 HRESULT GetAccount( 288 [out] LPDWORD pdwServerType, 289 [out] IImnAccount **ppAccount); 290} 291 292[ 293 object, 294 uuid(0DF2C7E1-3435-11D0-81D0-00C04FD85AB4), 295 local 296] 297interface ITransportCallback : IUnknown 298{ 299 typedef struct tagIXPRESULT 300 { 301 HRESULT hrResult; 302 LPSTR pszResponse; 303 UINT uiServerError; 304 HRESULT hrServerError; 305 DWORD dwSocketError; 306 LPSTR pszProblem; 307 } IXPRESULT, *LPIXPRESULT; 308 309 typedef enum tagCMDTYPE 310 { 311 CMD_SEND, 312 CMD_RESP 313 } CMDTYPE; 314 315 HRESULT OnTimeout( 316 [in,out] DWORD *pdwTimeout, 317 [in] IInternetTransport *pTransport); 318 319 HRESULT OnLogonPrompt( 320 [in,out] LPINETSERVER pInetServer, 321 [in] IInternetTransport *pTransport); 322 323 INT OnPrompt( 324 [in] HRESULT hrError, 325 [in] LPCSTR pszText, 326 [in] LPCSTR pszCaption, 327 [in] UINT uType, 328 [in] IInternetTransport *pTransport); 329 330 HRESULT OnStatus( 331 [in] IXPSTATUS ixpstatus, 332 [in] IInternetTransport *pTransport); 333 334 HRESULT OnError( 335 [in] IXPSTATUS ixpstatus, 336 [in] LPIXPRESULT pResult, 337 [in] IInternetTransport *pTransport); 338 339 HRESULT OnCommand( 340 [in] CMDTYPE cmdtype, 341 [in] LPSTR pszLine, 342 [in] HRESULT hrResponse, 343 [in] IInternetTransport *pTransport); 344} 345 346[ 347 object, 348 uuid(1F636C01-364E-11D0-81D3-00C04FD85AB4), 349 local 350] 351interface IInternetTransport : IUnknown 352{ 353 const boolean iitAUTHENTICATE = TRUE; 354 const boolean iitDONT_AUTHENTICATe = FALSE; 355 const boolean iitENABLE_ONCOMMAND = TRUE; 356 const boolean iitDISABLE_ONCOMMAND = FALSE; 357 358 typedef enum tagIXPISSTATE 359 { 360 IXP_IS_CONNECTED, 361 IXP_IS_BUSY, 362 IXP_IS_READY, 363 IXP_IS_AUTHENTICATED 364 } IXPISSTATE; 365 366 HRESULT GetServerInfo( 367 [in,out] LPINETSERVER pInetServer); 368 369 IXPTYPE GetIXPType(); 370 371 HRESULT IsState( 372 [in] IXPISSTATE isstate); 373 374 HRESULT InetServerFromAccount( 375 [in] IImnAccount *pAccount, 376 [in,out] LPINETSERVER pInetServer); 377 378 HRESULT Connect( 379 [in] LPINETSERVER pInetServer, 380 [in] boolean fAuthenticate, 381 [in] boolean fCommandLogging); 382 383 HRESULT HandsOffCallback(); 384 385 HRESULT Disconnect(); 386 387 HRESULT DropConnection(); 388 389 HRESULT GetStatus( 390 [out] IXPSTATUS *pCurrentStatus); 391} 392 393[ 394 object, 395 uuid(1F636C02-364E-11D0-81D3-00C04FD85AB4), 396 local 397] 398interface ISMTPCallback : ITransportCallback 399{ 400 typedef enum tagSMTPCOMMAND 401 { 402 SMTP_NONE, 403 SMTP_BANNER, 404 SMTP_CONNECTED, 405 SMTP_SEND_MESSAGE, 406 SMTP_AUTH, 407 SMTP_EHLO, 408 SMTP_HELO, 409 SMTP_MAIL, 410 SMTP_RCPT, 411 SMTP_RSET, 412 SMTP_QUIT, 413 SMTP_DATA, 414 SMTP_DOT, 415 SMTP_SEND_STREAM, 416 SMTP_CUSTOM 417 } SMTPCOMMAND; 418 419 typedef struct tagSMTPSTREAM 420 { 421 DWORD cbIncrement; 422 DWORD cbCurrent; 423 DWORD cbTotal; 424 } SMTPSTREAM, *LPSMTPSTREAM; 425 426 typedef struct tagSMTPRESPONSE 427 { 428 SMTPCOMMAND command; 429 BOOL fDone; 430 IXPRESULT rIxpResult; 431 ISMTPTransport *pTransport; 432 433 [switch_type(SMTPCOMMAND), switch_is(command)] 434 union 435 { 436 [case(SMTP_SEND_STREAM)] SMTPSTREAM rStreamInfo; 437 [default]; 438 } DUMMYUNIONNAME; 439 } SMTPRESPONSE, *LPSMTPRESPONSE; 440 441 HRESULT OnResponse( 442 [in] LPSMTPRESPONSE pResponse); 443} 444 445[ 446 object, 447 uuid(0DF2C7E2-3435-11D0-81D0-00C04FD85AB4), 448 local 449] 450interface ISMTPTransport : IInternetTransport 451{ 452 typedef struct tagSMTPMESSAGE 453 { 454 ULONG cbSize; 455 LPSTREAM pstmMsg; 456 INETADDRLIST rAddressList; 457 } SMTPMESSAGE, *LPSMTPMESSAGE; 458 459 HRESULT InitNew( 460 [in] LPSTR pszLogFilePath, 461 [in] ISMTPCallback *pCallback); 462 463cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") 464cpp_quote("#undef SendMessage") 465cpp_quote("#endif") 466 467 HRESULT SendMessage( 468 [in] LPSMTPMESSAGE pMessage); 469 470 HRESULT CommandMAIL( 471 [in] LPSTR pszEmailFrom); 472 473 HRESULT CommandRCPT( 474 [in] LPSTR pszEmailTo); 475 476 HRESULT CommandEHLO(); 477 478 HRESULT CommandHELO(); 479 480 HRESULT CommandAUTH( 481 [in] LPSTR pszAuthType); 482 483 HRESULT CommandQUIT(); 484 485 HRESULT CommandRSET(); 486 487 HRESULT CommandDATA(); 488 489 HRESULT CommandDOT(); 490 491 HRESULT SendDataStream( 492 [in] IStream *pStream, 493 [in] ULONG cbSize); 494} 495 496[ 497 object, 498 uuid(0DF2C7EC-3435-11D0-81D0-00C04FD85AB4), 499 local 500] 501interface ISMTPTransport2 : ISMTPTransport 502{ 503 typedef struct tagSMTPMESSAGE2 504 { 505 SMTPMESSAGE smtpMsg; 506 LPSTR pszDSNENVID; 507 DSNRET dsnRet; 508 DWORD dwReserved; 509 DWORD dwReserved2; 510 } SMTPMESSAGE2, *LPSMTPMESSAGE2; 511 512 HRESULT SetWindow(); 513 514 HRESULT ResetWindow(); 515 516 HRESULT SendMessage2( 517 [in] LPSMTPMESSAGE2 pMessage); 518 519 HRESULT CommandRCPT2( 520 [in] LPSTR pszEmailTo, 521 [in] INETADDRTYPE atDSN); 522} 523 524/* FIXME: IDAVNamespaceArbiter, IPropPatchRequest, IPropFindRequest, IPropFindMultiResponse, IPropFindResponse, IHTTPMailCallback, IHTTPMailTransport */ 525 526[ 527 object, 528 uuid(0DF2C7E3-3435-11D0-81D0-00C04FD85AB4), 529 local 530] 531interface IPOP3Callback : ITransportCallback 532{ 533 typedef enum tagPOP3COMMAND 534 { 535 POP3_NONE, 536 POP3_BANNER, 537 POP3_CONNECTED, 538 POP3_USER, 539 POP3_PASS, 540 POP3_AUTH, 541 POP3_UIDL, 542 POP3_STAT, 543 POP3_LIST, 544 POP3_DELE, 545 POP3_RETR, 546 POP3_TOP, 547 POP3_NOOP, 548 POP3_QUIT, 549 POP3_RSET, 550 POP3_CUSTOM 551 } POP3COMMAND; 552 553 typedef struct tagPOP3RETR 554 { 555 BOOL fHeader; 556 BOOL fBody; 557 DWORD dwPopId; 558 DWORD cbSoFar; 559 LPSTR pszLines; 560 ULONG cbLines; 561 } POP3RETR, *LPPOP3RETR; 562 563 typedef struct tagPOP3TOP 564 { 565 BOOL fHeader; 566 BOOL fBody; 567 DWORD dwPopId; 568 DWORD cPreviewLines; 569 DWORD cbSoFar; 570 LPSTR pszLines; 571 ULONG cbLines; 572 } POP3TOP, *LPPOP3TOP; 573 574 typedef struct tagPOP3LIST 575 { 576 DWORD dwPopId; 577 DWORD cbSize; 578 } POP3LIST, *LPPOP3LIST; 579 580 typedef struct tagPOP3UIDL 581 { 582 DWORD dwPopId; 583 LPSTR pszUidl; 584 } POP3UIDL, *LPPOP3UIDL; 585 586 typedef struct tagPOP3STAT 587 { 588 DWORD cMessages; 589 DWORD cbMessages; 590 } POP3STAT, *LPPOP3STAT; 591 592 typedef struct tagPOP3RESPONSE 593 { 594 POP3COMMAND command; 595 BOOL fDone; 596 IXPRESULT rIxpResult; 597 IPOP3Transport *pTransport; 598 BOOL fValidInfo; 599 [switch_type(POP3COMMAND), switch_is(command)] 600 union 601 { 602 [case(POP3_UIDL)] POP3UIDL rUidlInfo; 603 [case(POP3_STAT)] POP3STAT rStatInfo; 604 [case(POP3_LIST)] POP3LIST rListInfo; 605 [case(POP3_DELE)] DWORD dwPopId; 606 [case(POP3_RETR)] POP3RETR rRetrInfo; 607 [case(POP3_TOP)] POP3TOP rTopInfo; 608 [default]; 609 } DUMMYUNIONNAME; 610 } POP3RESPONSE, *LPPOP3RESPONSE; 611 612 HRESULT OnResponse( 613 [in] LPPOP3RESPONSE pResponse); 614} 615 616[ 617 object, 618 uuid(0DF2C7E4-3435-11D0-81D0-00C04FD85AB4), 619 local 620] 621interface IPOP3Transport : IInternetTransport 622{ 623 typedef enum tagPOP3CMDTYPE 624 { 625 POP3CMD_GET_POPID, 626 POP3CMD_GET_MARKED, 627 POP3CMD_GET_ALL 628 } POP3CMDTYPE; 629 630 typedef enum tagPOP3MARKTYPE 631 { 632 POP3_MARK_FOR_TOP = 0x01, 633 POP3_MARK_FOR_RETR = 0x02, 634 POP3_MARK_FOR_DELE = 0x04, 635 POP3_MARK_FOR_UIDL = 0x08, 636 POP3_MARK_FOR_LIST = 0x10 637 } POP3MARKTYPE; 638 639 HRESULT InitNew( 640 [in] LPSTR pszLogFilePath, 641 [in] IPOP3Callback *pCallback); 642 643 HRESULT MarkItem( 644 [in] POP3MARKTYPE marktype, 645 [in] DWORD dwPopId, 646 [in] boolean fMarked); 647 648 HRESULT CommandAUTH( 649 [in] LPSTR pszAuthType); 650 651 HRESULT CommandUSER( 652 [in] LPSTR pszUserName); 653 654 HRESULT CommandPASS( 655 [in] LPSTR pszPassword); 656 657 HRESULT CommandLIST( 658 [in] POP3CMDTYPE cmdtype, 659 [in] DWORD dwPopId); 660 661 HRESULT CommandTOP( 662 [in] POP3CMDTYPE cmdtype, 663 [in] DWORD dwPopId, 664 [in] DWORD cPreviewLines); 665 666 HRESULT CommandQUIT(); 667 668 HRESULT CommandSTAT(); 669 670 HRESULT CommandNOOP(); 671 672 HRESULT CommandRSET(); 673 674 HRESULT CommandUIDL( 675 [in] POP3CMDTYPE cmdtype, 676 [in] DWORD dwPopId); 677 678 HRESULT CommandDELE( 679 [in] POP3CMDTYPE cmdtype, 680 [in] DWORD dwPopId); 681 682 HRESULT CommandRETR( 683 [in] POP3CMDTYPE cmdtype, 684 [in] DWORD dwPopId); 685} 686 687/* FIXME: INNTPCallback, INNTPTransport */ 688 689[ 690 object, 691 uuid(8C438160-4EF6-11d0-874F-00AA00530EE9), 692 local, 693] 694interface IRangeList : IUnknown 695{ 696 const ULONG RL_RANGE_ERROR = ((ULONG)-1); 697 const ULONG RL_LAST_MESSAGE = ((ULONG)-1); 698 699 HRESULT Clear(); 700 701 HRESULT IsInRange( 702 [in] const ULONG value); 703 704 HRESULT Min( 705 [out] ULONG *pulMin); 706 707 HRESULT Max( 708 [out] ULONG *pulMax); 709 710 HRESULT Save( 711 [out] byte **ppbDestination, 712 [out] ULONG *pulSizeOfDestination); 713 714 HRESULT Load( 715 [in, size_is(ulSizeOfSource)] byte *pbSource, 716 [in] const ULONG ulSizeOfSource); 717 718 HRESULT AddRange( 719 [in] const ULONG low, 720 [in] const ULONG high); 721 722 HRESULT AddSingleValue( 723 [in] const ULONG value); 724 725 HRESULT AddRangeList( 726 [in] const IRangeList *prl); 727 728 HRESULT DeleteRange( 729 [in] const ULONG low, 730 [in] const ULONG high); 731 732 HRESULT DeleteSingleValue( 733 [in] const ULONG value); 734 735 HRESULT DeleteRangeList( 736 [in] const IRangeList *prl); 737 738 HRESULT MinOfRange( 739 [in] const ULONG value, 740 [out] ULONG *pulMinOfRange); 741 742 HRESULT MaxOfRange( 743 [in] const ULONG value, 744 [out] ULONG *pulMaxOfRange); 745 746 HRESULT RangeToIMAPString( 747 [out] LPSTR *ppszDestination, 748 [out] LPDWORD pdwLengthOfDestination); 749 750 HRESULT Next( 751 [in] const ULONG current, 752 [out] ULONG *pulNext); 753 754 HRESULT Prev( 755 [in] const ULONG current, 756 [out] ULONG *pulPrev); 757 758 HRESULT Cardinality( 759 [out] ULONG *pulCardinality); 760 761 HRESULT CardinalityFrom( 762 [in] const ULONG ulStartPoint, 763 [out] ULONG *pulCardinalityFrom); 764} 765 766[ 767 object, 768 uuid(E9E9D8A3-4EDD-11d0-874F-00AA00530EE9), 769 local 770] 771interface IIMAPCallback : ITransportCallback 772{ 773 typedef DWORD IMAP_MBOXFLAGS; 774 const IMAP_MBOXFLAGS IMAP_MBOX_NOFLAGS = 0x0; 775 const IMAP_MBOXFLAGS IMAP_MBOX_MARKED = 0x1; 776 const IMAP_MBOXFLAGS IMAP_MBOX_NOINFERIORS = 0x2; 777 const IMAP_MBOXFLAGS IMAP_MBOX_NOSELECT = 0x4; 778 const IMAP_MBOXFLAGS IMAP_MBOX_UNMARKED = 0x8; 779 const IMAP_MBOXFLAGS IMAP_MBOX_ALLFLAGS = 0xf; 780 781 typedef enum tagIMAP_RESPONSE_TYPE 782 { 783 irtERROR_NOTIFICATION, 784 irtCOMMAND_COMPLETION, 785 irtSERVER_ALERT, 786 irtPARSE_ERROR, 787 irtMAILBOX_UPDATE, 788 irtDELETED_MSG, 789 irtFETCH_BODY, 790 irtUPDATE_MSG, 791 irtAPPLICABLE_FLAGS, 792 irtPERMANENT_FLAGS, 793 irtUIDVALIDITY, 794 irtREADWRITE_STATUS, 795 irtTRYCREATE, 796 irtSEARCH, 797 irtMAILBOX_LISTING, 798 irtMAILBOX_STATUS, 799 irtAPPEND_PROGRESS, 800 irtUPDATE_MSG_EX 801 } IMAP_RESPONSE_TYPE; 802 803 typedef struct tagFETCH_BODY_PART 804 { 805 DWORD dwMsgSeqNum; 806 LPSTR pszBodyTag; 807 DWORD dwTotalBytes; 808 DWORD dwSizeOfData; 809 DWORD dwOffset; 810 BOOL fDone; 811 LPSTR pszData; 812 LPARAM lpFetchCookie1; 813 LPARAM lpFetchCookie2; 814 } FETCH_BODY_PART; 815 816 typedef struct tagFETCH_CMD_RESULTS 817 { 818 DWORD dwMsgSeqNum; 819 BOOL bMsgFlags; 820 IMAP_MSGFLAGS mfMsgFlags; 821 BOOL bRFC822Size; 822 DWORD dwRFC822Size; 823 BOOL bUID; 824 DWORD dwUID; 825 BOOL bInternalDate; 826 FILETIME ftInternalDate; 827 LPARAM lpFetchCookie1; 828 LPARAM lpFetchCookie2; 829 } FETCH_CMD_RESULTS; 830 831 typedef struct tagIMAPADDR 832 { 833 LPSTR pszName; 834 LPSTR pszADL; 835 LPSTR pszMailbox; 836 LPSTR pszHost; 837 struct tagIMAPADDR *pNext; 838 } IMAPADDR; 839 840 typedef struct tagFETCH_CMD_RESULTS_EX 841 { 842 DWORD dwMsgSeqNum; 843 BOOL bMsgFlags; 844 IMAP_MSGFLAGS mfMsgFlags; 845 BOOL bRFC822Size; 846 DWORD dwRFC822Size; 847 BOOL bUID; 848 DWORD dwUID; 849 BOOL bInternalDate; 850 FILETIME ftInternalDate; 851 LPARAM lpFetchCookie1; 852 LPARAM lpFetchCookie2; 853 BOOL bEnvelope; 854 FILETIME ftENVDate; 855 LPSTR pszENVSubject; 856 IMAPADDR *piaENVFrom; 857 IMAPADDR *piaENVSender; 858 IMAPADDR *piaENVReplyTo; 859 IMAPADDR *piaENVTo; 860 IMAPADDR *piaENVCc; 861 IMAPADDR *piaENVBcc; 862 LPSTR pszENVInReplyTo; 863 LPSTR pszENVMessageID; 864 DWORD dwReserved1; 865 DWORD dwReserved2; 866 DWORD dwReserved3; 867 } FETCH_CMD_RESULTS_EX; 868 869 typedef struct tagMBOX_MSGCOUNT 870 { 871 BOOL bGotExistsResponse; 872 DWORD dwExists; 873 BOOL bGotRecentResponse; 874 DWORD dwRecent; 875 BOOL bGotUnseenResponse; 876 DWORD dwUnseen; 877 } MBOX_MSGCOUNT; 878 879 typedef struct tagIMAP_LISTLSUB_RESPONSE 880 { 881 LPSTR pszMailboxName; 882 IMAP_MBOXFLAGS imfMboxFlags; 883 char cHierarchyChar; 884 } IMAP_LISTLSUB_RESPONSE; 885 886 typedef struct tagIMAP_STATUS_RESPONSE 887 { 888 LPSTR pszMailboxName; 889 BOOL fMessages; 890 DWORD dwMessages; 891 BOOL fRecent; 892 DWORD dwRecent; 893 BOOL fUIDNext; 894 DWORD dwUIDNext; 895 BOOL fUIDValidity; 896 DWORD dwUIDValidity; 897 BOOL fUnseen; 898 DWORD dwUnseen; 899 } IMAP_STATUS_RESPONSE; 900 901 typedef struct tagAPPEND_PROGRESS 902 { 903 DWORD dwUploaded; 904 DWORD dwTotal; 905 } APPEND_PROGRESS; 906 907 typedef [switch_type(IMAP_RESPONSE_TYPE)] union tagIMAP_RESPONSE_DATA 908 { 909 [case (irtMAILBOX_UPDATE)] MBOX_MSGCOUNT *pmcMsgCount; 910 [case (irtDELETED_MSG)] DWORD dwDeletedMsgSeqNum; 911 [case (irtFETCH_BODY)] FETCH_BODY_PART *pFetchBodyPart; 912 [case (irtUPDATE_MSG)] FETCH_CMD_RESULTS *pFetchResults; 913 [case (irtAPPLICABLE_FLAGS, irtPERMANENT_FLAGS)] IMAP_MSGFLAGS imfImapMessageFlags; 914 [case (irtUIDVALIDITY)] DWORD dwUIDValidity; 915 [case (irtREADWRITE_STATUS)] BOOL bReadWrite; 916 [case (irtSEARCH)] IRangeList *prlSearchResults; 917 [case (irtMAILBOX_LISTING)] IMAP_LISTLSUB_RESPONSE illrdMailboxListing; 918 [case (irtMAILBOX_STATUS)] IMAP_STATUS_RESPONSE *pisrStatusResponse; 919 [case (irtAPPEND_PROGRESS)] APPEND_PROGRESS *papAppendProgress; 920 [case (irtUPDATE_MSG_EX)] FETCH_CMD_RESULTS_EX *pFetchResultsEx; 921 } IMAP_RESPONSE_DATA; 922 923 typedef struct tagIMAP_RESPONSE 924 { 925 WPARAM wParam; 926 LPARAM lParam; 927 HRESULT hrResult; 928 LPSTR lpszResponseText; 929 IMAP_RESPONSE_TYPE irtResponseType; 930 [switch_is(irtResponseType)] IMAP_RESPONSE_DATA irdResponseData; 931 } IMAP_RESPONSE; 932 933 HRESULT OnResponse([in] const IMAP_RESPONSE *pirIMAPResponse); 934} 935 936[ 937object, 938uuid(E9E9D8A8-4EDD-11d0-874F-00AA00530EE9), 939local, 940] 941interface IIMAPTransport : IInternetTransport 942{ 943 const DWORD IMAP_CAPABILITY_IMAP4 = 0x1; 944 const DWORD IMAP_CAPABILITY_IMAP4rev1 = 0x2; 945 const DWORD IMAP_CAPABILITY_IDLE = 0x4; 946 const DWORD IMAP_CAPABILITY_ALLFLAGS = 0x7; 947 948 HRESULT InitNew( 949 [in] LPSTR pszLogFilePath, 950 [in] IIMAPCallback *pCBHandler); 951 952 HRESULT NewIRangeList( 953 [out] IRangeList **pprlNewRangeList); 954 955 HRESULT Capability( 956 [out] DWORD *pdwCapabilityFlags); 957 958 HRESULT Select( 959 [in] WPARAM wParam, 960 [in] LPARAM lParam, 961 [in] IIMAPCallback *pCBHandler, 962 [in] LPSTR lpszMailboxName); 963 964 HRESULT Examine( 965 [in] WPARAM wParam, 966 [in] LPARAM lParam, 967 [in] IIMAPCallback *pCBHandler, 968 [in] LPSTR lpszMailboxName); 969 970 HRESULT Create( 971 [in] WPARAM wParam, 972 [in] LPARAM lParam, 973 [in] IIMAPCallback *pCBHandler, 974 [in] LPSTR lpszMailboxName); 975 976 HRESULT Delete( 977 [in] WPARAM wParam, 978 [in] LPARAM lParam, 979 [in] IIMAPCallback *pCBHandler, 980 [in] LPSTR lpszMailboxName); 981 982 HRESULT Rename( 983 [in] WPARAM wParam, 984 [in] LPARAM lParam, 985 [in] IIMAPCallback *pCBHandler, 986 [in] LPSTR lpszMailboxName, 987 [in] LPSTR lpszNewMailboxName); 988 989 HRESULT Subscribe( 990 [in] WPARAM wParam, 991 [in] LPARAM lParam, 992 [in] IIMAPCallback *pCBHandler, 993 [in] LPSTR lpszMailboxName); 994 995 HRESULT Unsubscribe( 996 [in] WPARAM wParam, 997 [in] LPARAM lParam, 998 [in] IIMAPCallback *pCBHandler, 999 [in] LPSTR lpszMailboxName); 1000 1001 HRESULT List( 1002 [in] WPARAM wParam, 1003 [in] LPARAM lParam, 1004 [in] IIMAPCallback *pCBHandler, 1005 [in] LPSTR lpszMailboxNameReference, 1006 [in] LPSTR lpszMailboxNamePattern); 1007 1008 HRESULT Lsub( 1009 [in] WPARAM wParam, 1010 [in] LPARAM lParam, 1011 [in] IIMAPCallback *pCBHandler, 1012 [in] LPSTR lpszMailboxNameReference, 1013 [in] LPSTR lpszMailboxNamePattern); 1014 1015 HRESULT Append( 1016 [in] WPARAM wParam, 1017 [in] LPARAM lParam, 1018 [in] IIMAPCallback *pCBHandler, 1019 [in] LPSTR lpszMailboxName, 1020 [in] LPSTR lpszMessageFlags, 1021 [in] FILETIME ftMessageDateTime, 1022 [in] LPSTREAM lpstmMessageToSave); 1023 1024 HRESULT Close( 1025 [in] WPARAM wParam, 1026 [in] LPARAM lParam, 1027 [in] IIMAPCallback *pCBHandler); 1028 1029 HRESULT Expunge( 1030 [in] WPARAM wParam, 1031 [in] LPARAM lParam, 1032 [in] IIMAPCallback *pCBHandler); 1033 1034 HRESULT Search( 1035 [in] WPARAM wParam, 1036 [in] LPARAM lParam, 1037 [in] IIMAPCallback *pCBHandler, 1038 [in] LPSTR lpszSearchCriteria, 1039 [in] boolean bReturnUIDs, 1040 [in] IRangeList *pMsgRange, 1041 [in] boolean bUIDRangeList); 1042 1043 HRESULT Fetch( 1044 [in] WPARAM wParam, 1045 [in] LPARAM lParam, 1046 [in] IIMAPCallback *pCBHandler, 1047 [in] IRangeList *pMsgRange, 1048 [in] boolean bUIDMsgRange, 1049 [in] LPSTR lpszFetchArgs); 1050 1051 HRESULT Store( 1052 [in] WPARAM wParam, 1053 [in] LPARAM lParam, 1054 [in] IIMAPCallback *pCBHandler, 1055 [in] IRangeList *pMsgRange, 1056 [in] boolean bUIDRangeList, 1057 [in] LPSTR lpszStoreArgs); 1058 1059 HRESULT Copy( 1060 [in] WPARAM wParam, 1061 [in] LPARAM lParam, 1062 [in] IIMAPCallback *pCBHandler, 1063 [in] IRangeList *pMsgRange, 1064 [in] boolean bUIDRangeList, 1065 [in] LPSTR lpszMailboxName); 1066 1067 HRESULT Noop( 1068 [in] WPARAM wParam, 1069 [in] LPARAM lParam, 1070 [in] IIMAPCallback *pCBHandler); 1071 1072 HRESULT ResizeMsgSeqNumTable( 1073 [in] DWORD dwSizeOfMbox); 1074 1075 HRESULT UpdateSeqNumToUID( 1076 [in] DWORD dwMsgSeqNum, 1077 [in] DWORD dwUID); 1078 1079 HRESULT RemoveSequenceNum( 1080 [in] DWORD dwDeletedMsgSeqNum); 1081 1082 HRESULT MsgSeqNumToUID( 1083 [in] DWORD dwMsgSeqNum, 1084 [out] DWORD *pdwUID); 1085 1086 HRESULT GetMsgSeqNumToUIDArray( 1087 [out] DWORD **ppdwMsgSeqNumToUIDArray, 1088 [out] DWORD *pdwNumberOfElements); 1089 1090 HRESULT GetHighestMsgSeqNum( 1091 [out] DWORD *pdwHighestMSN); 1092 1093 HRESULT ResetMsgSeqNumToUID(); 1094 1095 HRESULT SetDefaultCBHandler( 1096 [in] IIMAPCallback *pCBHandler); 1097 1098 HRESULT Status( 1099 [in] WPARAM wParam, 1100 [in] LPARAM lParam, 1101 [in] IIMAPCallback *pCBHandler, 1102 [in] LPSTR pszMailboxName, 1103 [in] LPSTR pszStatusCmdArgs); 1104} 1105 1106#if 0 1107cpp_quote("HRESULT WINAPI CreateRASTransport(IRASTransport **ppTransport);") 1108cpp_quote("HRESULT WINAPI CreateNNTPTransport(INNTPTransport **ppTransport);") 1109cpp_quote("HRESULT WINAPI CreateIMAPTransport2(IIMAPTransport2 **ppTransport);") 1110#endif 1111cpp_quote("HRESULT WINAPI CreateRangeList(IRangeList **ppRangeList);") 1112cpp_quote("HRESULT WINAPI CreateSMTPTransport(ISMTPTransport **ppTransport);") 1113cpp_quote("HRESULT WINAPI CreatePOP3Transport(IPOP3Transport **ppTransport);") 1114cpp_quote("HRESULT WINAPI CreateIMAPTransport(IIMAPTransport **ppTransport);") 1115