// CkImapW.h: interface for the CkImapW class. // ////////////////////////////////////////////////////////////////////// // This header is generated for Chilkat 11.3.0 #ifndef _CkImapW_H #define _CkImapW_H #include "chilkatDefs.h" #include "CkString.h" #include "CkClassWithCallbacksW.h" class CkBinDataW; class CkByteData; class CkEmailW; class CkTaskW; class CkStringBuilderW; class CkMessageSetW; class CkEmailBundleW; class CkStringArrayW; class CkCertW; class CkMailboxesW; class CkSecureStringW; class CkJsonObjectW; class CkPrivateKeyW; class CkSshKeyW; class CkXmlCertVaultW; class CkSshW; class CkSocketW; class CkBaseProgressW; #if !defined(__sun__) && !defined(__sun) #pragma pack (push, 8) #endif // CLASS: CkImapW class CK_VISIBLE_PUBLIC CkImapW : public CkClassWithCallbacksW { private: bool m_cbOwned; private: // Don't allow assignment or copying these objects. CkImapW(const CkImapW &); CkImapW &operator=(const CkImapW &); public: CkImapW(void); virtual ~CkImapW(void); static CkImapW *createNew(void); CkImapW(bool bCallbackOwned); static CkImapW *createNew(bool bCallbackOwned); void CK_VISIBLE_PRIVATE inject(void *impl); // May be called when finished with the object to free/dispose of any // internal resources held by the object. void dispose(void); CkBaseProgressW *get_EventCallbackObject(void) const; void put_EventCallbackObject(CkBaseProgressW *progress); // BEGIN PUBLIC INTERFACE // ---------------------- // Properties // ---------------------- // When set to true, causes the currently running method to abort. Methods that // always finish quickly (i.e.have no length file operations or network // communications) are not affected. If no method is running, then this property is // automatically reset to false when the next method is called. When the abort // occurs, this property is reset to false. Both synchronous and asynchronous // method calls can be aborted. (A synchronous method call could be aborted by // setting this property from a separate thread.) bool get_AbortCurrent(void); // When set to true, causes the currently running method to abort. Methods that // always finish quickly (i.e.have no length file operations or network // communications) are not affected. If no method is running, then this property is // automatically reset to false when the next method is called. When the abort // occurs, this property is reset to false. Both synchronous and asynchronous // method calls can be aborted. (A synchronous method call could be aborted by // setting this property from a separate thread.) void put_AbortCurrent(bool newVal); // When true (the default) the Append method will mark the email appended to a // mailbox as already seen. Otherwise an appended email will be initialized to have // a status of unseen. bool get_AppendSeen(void); // When true (the default) the Append method will mark the email appended to a // mailbox as already seen. Otherwise an appended email will be initialized to have // a status of unseen. void put_AppendSeen(bool newVal); // The UID of the last email appended to a mailbox via an Append* method. (Not all // IMAP servers report back the UID of the email appended.) int get_AppendUid(void); // Can be set to XOAUTH2 , CRAM-MD5 , NTLM , PLAIN , or LOGIN to select the // authentication method. NTLM is the most secure, and is a synonym for Windows // Integrated Authentication . The default is LOGIN (or the empty string) which is // simple plain-text username/password authentication. Not all IMAP servers support // all authentication methods. // // The XOAUTH2 method was added in version 9.5.0.44. // // Note: If SPA (i.e. NTLM) authentication does not succeed, set the // Global.DefaultNtlmVersion property equal to 1 and then retry. // void get_AuthMethod(CkString &str); // Can be set to XOAUTH2 , CRAM-MD5 , NTLM , PLAIN , or LOGIN to select the // authentication method. NTLM is the most secure, and is a synonym for Windows // Integrated Authentication . The default is LOGIN (or the empty string) which is // simple plain-text username/password authentication. Not all IMAP servers support // all authentication methods. // // The XOAUTH2 method was added in version 9.5.0.44. // // Note: If SPA (i.e. NTLM) authentication does not succeed, set the // Global.DefaultNtlmVersion property equal to 1 and then retry. // const wchar_t *authMethod(void); // Can be set to XOAUTH2 , CRAM-MD5 , NTLM , PLAIN , or LOGIN to select the // authentication method. NTLM is the most secure, and is a synonym for Windows // Integrated Authentication . The default is LOGIN (or the empty string) which is // simple plain-text username/password authentication. Not all IMAP servers support // all authentication methods. // // The XOAUTH2 method was added in version 9.5.0.44. // // Note: If SPA (i.e. NTLM) authentication does not succeed, set the // Global.DefaultNtlmVersion property equal to 1 and then retry. // void put_AuthMethod(const wchar_t *newVal); // Applies to the PLAIN authentication method. May be set to an authorization ID // that is to be sent along with the Login and Password for authentication. void get_AuthzId(CkString &str); // Applies to the PLAIN authentication method. May be set to an authorization ID // that is to be sent along with the Login and Password for authentication. const wchar_t *authzId(void); // Applies to the PLAIN authentication method. May be set to an authorization ID // that is to be sent along with the Login and Password for authentication. void put_AuthzId(const wchar_t *newVal); // If set to true, then all Fetch* methods will also automatically download // attachments. If set to false, then the Fetch* methods download the email // without attachments. The default value is true. // // Note: Methods that download headers-only, such as FetchSingleHeader, ignore this // property and never download attachments. Also, signed and/or encrypted emails // will always be downloaded in full (with attachments) regardless of this property // setting. // bool get_AutoDownloadAttachments(void); // If set to true, then all Fetch* methods will also automatically download // attachments. If set to false, then the Fetch* methods download the email // without attachments. The default value is true. // // Note: Methods that download headers-only, such as FetchSingleHeader, ignore this // property and never download attachments. Also, signed and/or encrypted emails // will always be downloaded in full (with attachments) regardless of this property // setting. // void put_AutoDownloadAttachments(bool newVal); // If true, then the following will occur when a connection is made to an IMAP // server: // // 1) If the Port property = 993, then sets StartTls = false and Ssl = true // 2) If the Port property = 143, sets Ssl = false // // The default value of this property is true. // bool get_AutoFix(void); // If true, then the following will occur when a connection is made to an IMAP // server: // // 1) If the Port property = 993, then sets StartTls = false and Ssl = true // 2) If the Port property = 143, sets Ssl = false // // The default value of this property is true. // void put_AutoFix(bool newVal); // The IP address to use for computers with multiple network interfaces or IP // addresses. For computers with a single network interface (i.e. most computers), // this property should not be set. For multihoming computers, the default IP // address is automatically used if this property is not set. // // The IP address is a string such as in dotted notation using numbers, not domain // names, such as 165.164.55.124 . // void get_ClientIpAddress(CkString &str); // The IP address to use for computers with multiple network interfaces or IP // addresses. For computers with a single network interface (i.e. most computers), // this property should not be set. For multihoming computers, the default IP // address is automatically used if this property is not set. // // The IP address is a string such as in dotted notation using numbers, not domain // names, such as 165.164.55.124 . // const wchar_t *clientIpAddress(void); // The IP address to use for computers with multiple network interfaces or IP // addresses. For computers with a single network interface (i.e. most computers), // this property should not be set. For multihoming computers, the default IP // address is automatically used if this property is not set. // // The IP address is a string such as in dotted notation using numbers, not domain // names, such as 165.164.55.124 . // void put_ClientIpAddress(const wchar_t *newVal); // Contains the IMAP server's domain name (or IP address) if currently connected. // Otherwise returns an empty string. void get_ConnectedToHost(CkString &str); // Contains the IMAP server's domain name (or IP address) if currently connected. // Otherwise returns an empty string. const wchar_t *connectedToHost(void); // Maximum number of seconds to wait when connecting to an IMAP server. The default // value is 30 (units are in seconds). int get_ConnectTimeout(void); // Maximum number of seconds to wait when connecting to an IMAP server. The default // value is 30 (units are in seconds). void put_ConnectTimeout(int newVal); // The Windows Domain to use for Windows Integrated Authentication (also known as // NTLM). This may be empty. void get_Domain(CkString &str); // The Windows Domain to use for Windows Integrated Authentication (also known as // NTLM). This may be empty. const wchar_t *domain(void); // The Windows Domain to use for Windows Integrated Authentication (also known as // NTLM). This may be empty. void put_Domain(const wchar_t *newVal); // The interval in milliseconds between each AbortCheck event callback, which // enables an application to abort certain method calls before they complete. By // default, HeartbeatMs is set to 0 , meaning no AbortCheck event callbacks will // trigger. // // References: // 1: #AbortCheck int get_HeartbeatMs(void); // The interval in milliseconds between each AbortCheck event callback, which // enables an application to abort certain method calls before they complete. By // default, HeartbeatMs is set to 0 , meaning no AbortCheck event callbacks will // trigger. // // References: // 1: #AbortCheck void put_HeartbeatMs(int newVal); // A string containing an integer value that is the HIGHESTMODSEQ of the currently // selected mailbox, or 0 if no mailbox is selected. (Chilkat decided to make this // a string property for the chance that HIGHESTMODSEQ is an extremely large // integer.) // // Not all IMAP servers support HIGHESTMODSEQ. See RFC 4551 Section 3.1.1 // HIGHESTMODSEQ Response Code for more information. // // // References: // 1: https://tools.ietf.org/html/rfc4551#section-3.1.1 void get_HighestModSeq(CkString &str); // A string containing an integer value that is the HIGHESTMODSEQ of the currently // selected mailbox, or 0 if no mailbox is selected. (Chilkat decided to make this // a string property for the chance that HIGHESTMODSEQ is an extremely large // integer.) // // Not all IMAP servers support HIGHESTMODSEQ. See RFC 4551 Section 3.1.1 // HIGHESTMODSEQ Response Code for more information. // // // References: // 1: https://tools.ietf.org/html/rfc4551#section-3.1.1 const wchar_t *highestModSeq(void); // If an HTTP proxy requiring authentication is to be used, set this property to // the HTTP proxy authentication method name. Valid choices are Basic or NTLM . void get_HttpProxyAuthMethod(CkString &str); // If an HTTP proxy requiring authentication is to be used, set this property to // the HTTP proxy authentication method name. Valid choices are Basic or NTLM . const wchar_t *httpProxyAuthMethod(void); // If an HTTP proxy requiring authentication is to be used, set this property to // the HTTP proxy authentication method name. Valid choices are Basic or NTLM . void put_HttpProxyAuthMethod(const wchar_t *newVal); // The NTLM authentication domain (optional) if NTLM authentication is used. void get_HttpProxyDomain(CkString &str); // The NTLM authentication domain (optional) if NTLM authentication is used. const wchar_t *httpProxyDomain(void); // The NTLM authentication domain (optional) if NTLM authentication is used. void put_HttpProxyDomain(const wchar_t *newVal); // If an HTTP proxy is to be used, set this property to the HTTP proxy hostname or // IPv4 address (in dotted decimal notation). void get_HttpProxyHostname(CkString &str); // If an HTTP proxy is to be used, set this property to the HTTP proxy hostname or // IPv4 address (in dotted decimal notation). const wchar_t *httpProxyHostname(void); // If an HTTP proxy is to be used, set this property to the HTTP proxy hostname or // IPv4 address (in dotted decimal notation). void put_HttpProxyHostname(const wchar_t *newVal); // If an HTTP proxy requiring authentication is to be used, set this property to // the HTTP proxy password. void get_HttpProxyPassword(CkString &str); // If an HTTP proxy requiring authentication is to be used, set this property to // the HTTP proxy password. const wchar_t *httpProxyPassword(void); // If an HTTP proxy requiring authentication is to be used, set this property to // the HTTP proxy password. void put_HttpProxyPassword(const wchar_t *newVal); // If an HTTP proxy is to be used, set this property to the HTTP proxy port number. // (Two commonly used HTTP proxy ports are 8080 and 3128.) int get_HttpProxyPort(void); // If an HTTP proxy is to be used, set this property to the HTTP proxy port number. // (Two commonly used HTTP proxy ports are 8080 and 3128.) void put_HttpProxyPort(int newVal); // If an HTTP proxy requiring authentication is to be used, set this property to // the HTTP proxy login name. void get_HttpProxyUsername(CkString &str); // If an HTTP proxy requiring authentication is to be used, set this property to // the HTTP proxy login name. const wchar_t *httpProxyUsername(void); // If an HTTP proxy requiring authentication is to be used, set this property to // the HTTP proxy login name. void put_HttpProxyUsername(const wchar_t *newVal); // Turns the in-memory session logging on or off. If on, the session log can be // obtained via the SessionLog property. The default value is false. // // The SessionLog contains the raw commands sent to the IMAP server, and the raw // responses received from the IMAP server. // bool get_KeepSessionLog(void); // Turns the in-memory session logging on or off. If on, the session log can be // obtained via the SessionLog property. The default value is false. // // The SessionLog contains the raw commands sent to the IMAP server, and the raw // responses received from the IMAP server. // void put_KeepSessionLog(bool newVal); // The MIME source of the email last appended during a call to AppendMail, or // AppendMime. void get_LastAppendedMime(CkString &str); // The MIME source of the email last appended during a call to AppendMail, or // AppendMime. const wchar_t *lastAppendedMime(void); // The last raw command sent to the IMAP server. (This information can be used for // debugging if problems occur.) void get_LastCommand(CkString &str); // The last raw command sent to the IMAP server. (This information can be used for // debugging if problems occur.) const wchar_t *lastCommand(void); // The last intermediate response received from the IMAP server. (This information // can be used for debugging if problems occur.) void get_LastIntermediateResponse(CkString &str); // The last intermediate response received from the IMAP server. (This information // can be used for debugging if problems occur.) const wchar_t *lastIntermediateResponse(void); // The raw data of the last response from the IMAP server. (Useful for debugging if // problems occur.) This property is cleared whenever a command is sent to the IMAP // server. If no response is received, then this property will remain empty. // Otherwise, it will contain the last response received from the IMAP server. void get_LastResponse(CkString &str); // The raw data of the last response from the IMAP server. (Useful for debugging if // problems occur.) This property is cleared whenever a command is sent to the IMAP // server. If no response is received, then this property will remain empty. // Otherwise, it will contain the last response received from the IMAP server. const wchar_t *lastResponse(void); // The response code part of the last command response, if it exists. IMAP status // responses MAY include an OPTIONAL response code . A response code consists of // data inside square brackets in the form of an atom, possibly followed by a space // and arguments. The response code contains additional information or status codes // for client software beyond the OK/NO/BAD condition, and are defined when there // is a specific action that a client can take based upon the additional // information. Examples of response codes are NONEXISTENT and AUTHENTICATIONFAILED // . The response code strings for a given failure condition may vary depending on // the IMAP server implementation. void get_LastResponseCode(CkString &str); // The response code part of the last command response, if it exists. IMAP status // responses MAY include an OPTIONAL response code . A response code consists of // data inside square brackets in the form of an atom, possibly followed by a space // and arguments. The response code contains additional information or status codes // for client software beyond the OK/NO/BAD condition, and are defined when there // is a specific action that a client can take based upon the additional // information. Examples of response codes are NONEXISTENT and AUTHENTICATIONFAILED // . The response code strings for a given failure condition may vary depending on // the IMAP server implementation. const wchar_t *lastResponseCode(void); // If logged into an IMAP server, the logged-in username. void get_LoggedInUser(CkString &str); // If logged into an IMAP server, the logged-in username. const wchar_t *loggedInUser(void); // After selecting a mailbox (by calling SelectMailbox), this property will be // updated to reflect the total number of emails in the mailbox. int get_NumMessages(void); // Set to true to prevent the mail flags (such as the Seen flag) from being set // when email is retrieved. The default value of this property is false. bool get_PeekMode(void); // Set to true to prevent the mail flags (such as the Seen flag) from being set // when email is retrieved. The default value of this property is false. void put_PeekMode(bool newVal); // This property is only valid in programming environment and languages that allow // for event callbacks. // // Sets the value to be defined as 100% complete for the purpose of PercentDone // event callbacks. The defaut value of 100 means that at most 100 event // PercentDone callbacks will occur in a method that (1) is event enabled and (2) // is such that it is possible to measure progress as a percentage completed. This // property may be set to larger numbers to get more fine-grained PercentDone // callbacks. For example, setting this property equal to 1000 will provide // callbacks with .1 percent granularity. For example, a value of 453 would // indicate 45.3% competed. This property is clamped to a minimum value of 10, and // a maximum value of 100000. // int get_PercentDoneScale(void); // This property is only valid in programming environment and languages that allow // for event callbacks. // // Sets the value to be defined as 100% complete for the purpose of PercentDone // event callbacks. The defaut value of 100 means that at most 100 event // PercentDone callbacks will occur in a method that (1) is event enabled and (2) // is such that it is possible to measure progress as a percentage completed. This // property may be set to larger numbers to get more fine-grained PercentDone // callbacks. For example, setting this property equal to 1000 will provide // callbacks with .1 percent granularity. For example, a value of 453 would // indicate 45.3% competed. This property is clamped to a minimum value of 10, and // a maximum value of 100000. // void put_PercentDoneScale(int newVal); // The IMAP port number. If using SSL, be sure to set this to the IMAP SSL port // number, which is typically port 993. (If this is the case, make sure you also // set the Ssl property = true. int get_Port(void); // The IMAP port number. If using SSL, be sure to set this to the IMAP SSL port // number, which is typically port 993. (If this is the case, make sure you also // set the Ssl property = true. void put_Port(int newVal); // If true, then use IPv6 over IPv4 when both are supported for a particular // domain. The default value of this property is false, which will choose IPv4 // over IPv6. bool get_PreferIpv6(void); // If true, then use IPv6 over IPv4 when both are supported for a particular // domain. The default value of this property is false, which will choose IPv4 // over IPv6. void put_PreferIpv6(bool newVal); // The maximum amount of time (in seconds) that incoming data is allowed to stall // while reading any kind of response from an IMAP server. This is the amount of // time that needs to elapse while no additional response bytes are forthcoming. // For the case of long responses, if the data stream halts for more than this // amount, it will timeout. This property is not a maximum for the total response // time, but only a maximum for the amount of time while no response arrives. // // The default value is 30 seconds. // int get_ReadTimeout(void); // The maximum amount of time (in seconds) that incoming data is allowed to stall // while reading any kind of response from an IMAP server. This is the amount of // time that needs to elapse while no additional response bytes are forthcoming. // For the case of long responses, if the data stream halts for more than this // amount, it will timeout. This property is not a maximum for the total response // time, but only a maximum for the amount of time while no response arrives. // // The default value is 30 seconds. // void put_ReadTimeout(int newVal); // If true, then the IMAP client will verify the server's SSL certificate. The // certificate is expired, or if the cert's signature is invalid, the connection is // not allowed. The default value of this property is false. bool get_RequireSslCertVerify(void); // If true, then the IMAP client will verify the server's SSL certificate. The // certificate is expired, or if the cert's signature is invalid, the connection is // not allowed. The default value of this property is false. void put_RequireSslCertVerify(bool newVal); // The CHARSET to be used in searches issued by the Search method. The default // value is UTF-8 . (If no 8bit chars are found in the search criteria passed to // the Search method, then no CHARSET is needed and this property doesn't apply.) // The SearchCharset property can be set to AUTO to get the pre-v9.4.0 behavior, // which is to examine the 8bit chars found in the search criteria and select an // appropriate multibyte charset. // // In summary, it is unlikely that this property needs to be changed. It should // only be modified if trouble arises with some IMAP servers when non-English chars // are used in the search criteria. // void get_SearchCharset(CkString &str); // The CHARSET to be used in searches issued by the Search method. The default // value is UTF-8 . (If no 8bit chars are found in the search criteria passed to // the Search method, then no CHARSET is needed and this property doesn't apply.) // The SearchCharset property can be set to AUTO to get the pre-v9.4.0 behavior, // which is to examine the 8bit chars found in the search criteria and select an // appropriate multibyte charset. // // In summary, it is unlikely that this property needs to be changed. It should // only be modified if trouble arises with some IMAP servers when non-English chars // are used in the search criteria. // const wchar_t *searchCharset(void); // The CHARSET to be used in searches issued by the Search method. The default // value is UTF-8 . (If no 8bit chars are found in the search criteria passed to // the Search method, then no CHARSET is needed and this property doesn't apply.) // The SearchCharset property can be set to AUTO to get the pre-v9.4.0 behavior, // which is to examine the 8bit chars found in the search criteria and select an // appropriate multibyte charset. // // In summary, it is unlikely that this property needs to be changed. It should // only be modified if trouble arises with some IMAP servers when non-English chars // are used in the search criteria. // void put_SearchCharset(const wchar_t *newVal); // The currently selected mailbox, or an empty string if none. void get_SelectedMailbox(CkString &str); // The currently selected mailbox, or an empty string if none. const wchar_t *selectedMailbox(void); // The buffer size to be used with the underlying TCP/IP socket for sending. The // default value is 32767. int get_SendBufferSize(void); // The buffer size to be used with the underlying TCP/IP socket for sending. The // default value is 32767. void put_SendBufferSize(int newVal); // The separator character used by the IMAP server for the mailbox hierarchy. It is // typically / or . , but may vary depending on the IMAP server. The ListMailboxes // method has the side-effect of setting this property to the correct value because // the IMAP server's response when listing mailboxes includes information about the // separator char. // // Note: Starting in version 9.5.0.47, this property changed from a char type to a // string type. The separator char property will always be a string of length 1 // character. // void get_SeparatorChar(CkString &str); // The separator character used by the IMAP server for the mailbox hierarchy. It is // typically / or . , but may vary depending on the IMAP server. The ListMailboxes // method has the side-effect of setting this property to the correct value because // the IMAP server's response when listing mailboxes includes information about the // separator char. // // Note: Starting in version 9.5.0.47, this property changed from a char type to a // string type. The separator char property will always be a string of length 1 // character. // const wchar_t *separatorChar(void); // The separator character used by the IMAP server for the mailbox hierarchy. It is // typically / or . , but may vary depending on the IMAP server. The ListMailboxes // method has the side-effect of setting this property to the correct value because // the IMAP server's response when listing mailboxes includes information about the // separator char. // // Note: Starting in version 9.5.0.47, this property changed from a char type to a // string type. The separator char property will always be a string of length 1 // character. // void put_SeparatorChar(const wchar_t *newVal); // Contains an in-memory log of the raw commands sent to the IMAP server, and the // raw responses received from the IMAP server. The KeepSessionLog property must be // set to true to enable session logging. Call ClearSessionLog to reset the log. void get_SessionLog(CkString &str); // Contains an in-memory log of the raw commands sent to the IMAP server, and the // raw responses received from the IMAP server. The KeepSessionLog property must be // set to true to enable session logging. Call ClearSessionLog to reset the log. const wchar_t *sessionLog(void); // The SOCKS4/SOCKS5 hostname or IPv4 address (in dotted decimal notation). This // property is only used if the SocksVersion property is set to 4 or 5). void get_SocksHostname(CkString &str); // The SOCKS4/SOCKS5 hostname or IPv4 address (in dotted decimal notation). This // property is only used if the SocksVersion property is set to 4 or 5). const wchar_t *socksHostname(void); // The SOCKS4/SOCKS5 hostname or IPv4 address (in dotted decimal notation). This // property is only used if the SocksVersion property is set to 4 or 5). void put_SocksHostname(const wchar_t *newVal); // The SOCKS5 password (if required). The SOCKS4 protocol does not include the use // of a password, so this does not apply to SOCKS4. void get_SocksPassword(CkString &str); // The SOCKS5 password (if required). The SOCKS4 protocol does not include the use // of a password, so this does not apply to SOCKS4. const wchar_t *socksPassword(void); // The SOCKS5 password (if required). The SOCKS4 protocol does not include the use // of a password, so this does not apply to SOCKS4. void put_SocksPassword(const wchar_t *newVal); // The SOCKS4/SOCKS5 proxy port. The default value is 1080. This property only // applies if a SOCKS proxy is used (if the SocksVersion property is set to 4 or // 5). int get_SocksPort(void); // The SOCKS4/SOCKS5 proxy port. The default value is 1080. This property only // applies if a SOCKS proxy is used (if the SocksVersion property is set to 4 or // 5). void put_SocksPort(int newVal); // The SOCKS4/SOCKS5 proxy username. This property is only used if the SocksVersion // property is set to 4 or 5). void get_SocksUsername(CkString &str); // The SOCKS4/SOCKS5 proxy username. This property is only used if the SocksVersion // property is set to 4 or 5). const wchar_t *socksUsername(void); // The SOCKS4/SOCKS5 proxy username. This property is only used if the SocksVersion // property is set to 4 or 5). void put_SocksUsername(const wchar_t *newVal); // SocksVersion May be set to one of the following integer values: // // 0 - No SOCKS proxy is used. This is the default. // 4 - Connect via a SOCKS4 proxy. // 5 - Connect via a SOCKS5 proxy. // int get_SocksVersion(void); // SocksVersion May be set to one of the following integer values: // // 0 - No SOCKS proxy is used. This is the default. // 4 - Connect via a SOCKS4 proxy. // 5 - Connect via a SOCKS5 proxy. // void put_SocksVersion(int newVal); // Sets the receive buffer size socket option. Normally, this property should be // left unchanged. The default value is 4194304. // // This property can be increased if download performance seems slow. It is // recommended to be a multiple of 4096. // int get_SoRcvBuf(void); // Sets the receive buffer size socket option. Normally, this property should be // left unchanged. The default value is 4194304. // // This property can be increased if download performance seems slow. It is // recommended to be a multiple of 4096. // void put_SoRcvBuf(int newVal); // This applies to the QueryMbx method to set a sort order for search results. By // default, this property is an empty string. // // Can be set to a string of SPACE separated keywords to indicate sort order // (default is ascending). The keyword REVERSE can precede a keyword to reverse the // sort order (i.e. make it descending). Possible sort keywords are: // * ARRIVAL // * CC // * DATE // * FROM // * SIZE // * SUBJECT // * TO // // Examples: // * SUBJECT REVERSE DATE // * REVERSE SIZE // * ARRIVAL // // Note: Not all IMAP servers support SORT . // void get_SortCriteria(CkString &str); // This applies to the QueryMbx method to set a sort order for search results. By // default, this property is an empty string. // // Can be set to a string of SPACE separated keywords to indicate sort order // (default is ascending). The keyword REVERSE can precede a keyword to reverse the // sort order (i.e. make it descending). Possible sort keywords are: // * ARRIVAL // * CC // * DATE // * FROM // * SIZE // * SUBJECT // * TO // // Examples: // * SUBJECT REVERSE DATE // * REVERSE SIZE // * ARRIVAL // // Note: Not all IMAP servers support SORT . // const wchar_t *sortCriteria(void); // This applies to the QueryMbx method to set a sort order for search results. By // default, this property is an empty string. // // Can be set to a string of SPACE separated keywords to indicate sort order // (default is ascending). The keyword REVERSE can precede a keyword to reverse the // sort order (i.e. make it descending). Possible sort keywords are: // * ARRIVAL // * CC // * DATE // * FROM // * SIZE // * SUBJECT // * TO // // Examples: // * SUBJECT REVERSE DATE // * REVERSE SIZE // * ARRIVAL // // Note: Not all IMAP servers support SORT . // void put_SortCriteria(const wchar_t *newVal); // Sets the send buffer size socket option. Normally, this property should be left // unchanged. The default value is 262144. // // This property can be increased if upload performance seems slow. It is // recommended to be a multiple of 4096. Testing with sizes such as 512K and 1MB is // reasonable. // int get_SoSndBuf(void); // Sets the send buffer size socket option. Normally, this property should be left // unchanged. The default value is 262144. // // This property can be increased if upload performance seems slow. It is // recommended to be a multiple of 4096. Testing with sizes such as 512K and 1MB is // reasonable. // void put_SoSndBuf(int newVal); // true if the IMAP connection should be TLS/SSL. // // Note: The typical IMAP TLS/SSL port number is 993. If you set this property = // true, it is likely that you should also set the Port property = 993. // bool get_Ssl(void); // true if the IMAP connection should be TLS/SSL. // // Note: The typical IMAP TLS/SSL port number is 993. If you set this property = // true, it is likely that you should also set the Port property = 993. // void put_Ssl(bool newVal); // Provides a means for setting a list of ciphers that are allowed for SSL/TLS // connections. The default (empty string) indicates that all implemented ciphers // are possible. The TLS ciphers supported in Chilkat v9.5.0.55 and later are:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 // TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 // TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 // TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 // TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 // TLS_DHE_RSA_WITH_AES_256_CBC_SHA // TLS_RSA_WITH_AES_256_CBC_SHA256 // TLS_RSA_WITH_AES_256_GCM_SHA384 // TLS_RSA_WITH_AES_256_CBC_SHA // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA // TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 // TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 // TLS_DHE_RSA_WITH_AES_128_CBC_SHA // TLS_RSA_WITH_AES_128_CBC_SHA256 // TLS_RSA_WITH_AES_128_GCM_SHA256 // TLS_RSA_WITH_AES_128_CBC_SHA // TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA // TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA // TLS_RSA_WITH_3DES_EDE_CBC_SHA // TLS_ECDHE_RSA_WITH_RC4_128_SHA // TLS_RSA_WITH_RC4_128_SHA // TLS_RSA_WITH_RC4_128_MD5 // TLS_DHE_RSA_WITH_DES_CBC_SHA // TLS_RSA_WITH_DES_CBC_SHA // To restrict SSL/TLS connections to one or more specific ciphers, set this // property to a comma-separated list of ciphers such as // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 . // The order should be in terms of preference, with the preferred algorithms listed // first. (Note that the client cannot specifically choose the algorithm is picked // because it is the server that chooses. The client simply provides the server // with a list from which to choose.) // // The property can also disallow connections with servers having certificates with // RSA keys less than a certain size. By default, server certificates having RSA // keys of 512 bits or greater are allowed. Add the keyword rsa1024 to disallow // connections with servers having keys smaller than 1024 bits. Add the keyword // rsa2048 to disallow connections with servers having keys smaller than 2048 bits. // // Note: Prior to Chilkat v9.5.0.55, it was not possible to explicitly list allowed // cipher suites. The deprecated means for indicating allowed ciphers was both // incomplete and unprecise. For example, the following keywords could be listed to // allow matching ciphers: aes256-cbc , aes128-cbc , 3des-cbc , and rc4 . These // keywords will still be recognized, but programs should be updated to explicitly // list the allowed ciphers. // // secure-renegotiation: Starting in Chilkat v9.5.0.55, the keyword // secure-renegotiation may be added to require that all renegotions be done // securely (as per RFC 5746). // // best-practices: Starting in Chilkat v9.5.0.55, this property may be set to the // single keyword best-practices . This will allow ciphers based on the current // best practices. As new versions of Chilkat are released, the best practices may // change. Changes will be noted here. The current best practices are: // // * If the server uses an RSA key, it must be 1024 bits or greater. // * All renegotations must be secure renegotiations. // * All ciphers using RC4, DES, or 3DES are disallowed. // // Example: The following string would restrict to 2 specific cipher suites, // require RSA keys to be 1024 bits or greater, and require secure renegotiations: // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, rsa1024, // secure-renegotiation // void get_SslAllowedCiphers(CkString &str); // Provides a means for setting a list of ciphers that are allowed for SSL/TLS // connections. The default (empty string) indicates that all implemented ciphers // are possible. The TLS ciphers supported in Chilkat v9.5.0.55 and later are:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 // TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 // TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 // TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 // TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 // TLS_DHE_RSA_WITH_AES_256_CBC_SHA // TLS_RSA_WITH_AES_256_CBC_SHA256 // TLS_RSA_WITH_AES_256_GCM_SHA384 // TLS_RSA_WITH_AES_256_CBC_SHA // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA // TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 // TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 // TLS_DHE_RSA_WITH_AES_128_CBC_SHA // TLS_RSA_WITH_AES_128_CBC_SHA256 // TLS_RSA_WITH_AES_128_GCM_SHA256 // TLS_RSA_WITH_AES_128_CBC_SHA // TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA // TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA // TLS_RSA_WITH_3DES_EDE_CBC_SHA // TLS_ECDHE_RSA_WITH_RC4_128_SHA // TLS_RSA_WITH_RC4_128_SHA // TLS_RSA_WITH_RC4_128_MD5 // TLS_DHE_RSA_WITH_DES_CBC_SHA // TLS_RSA_WITH_DES_CBC_SHA // To restrict SSL/TLS connections to one or more specific ciphers, set this // property to a comma-separated list of ciphers such as // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 . // The order should be in terms of preference, with the preferred algorithms listed // first. (Note that the client cannot specifically choose the algorithm is picked // because it is the server that chooses. The client simply provides the server // with a list from which to choose.) // // The property can also disallow connections with servers having certificates with // RSA keys less than a certain size. By default, server certificates having RSA // keys of 512 bits or greater are allowed. Add the keyword rsa1024 to disallow // connections with servers having keys smaller than 1024 bits. Add the keyword // rsa2048 to disallow connections with servers having keys smaller than 2048 bits. // // Note: Prior to Chilkat v9.5.0.55, it was not possible to explicitly list allowed // cipher suites. The deprecated means for indicating allowed ciphers was both // incomplete and unprecise. For example, the following keywords could be listed to // allow matching ciphers: aes256-cbc , aes128-cbc , 3des-cbc , and rc4 . These // keywords will still be recognized, but programs should be updated to explicitly // list the allowed ciphers. // // secure-renegotiation: Starting in Chilkat v9.5.0.55, the keyword // secure-renegotiation may be added to require that all renegotions be done // securely (as per RFC 5746). // // best-practices: Starting in Chilkat v9.5.0.55, this property may be set to the // single keyword best-practices . This will allow ciphers based on the current // best practices. As new versions of Chilkat are released, the best practices may // change. Changes will be noted here. The current best practices are: // // * If the server uses an RSA key, it must be 1024 bits or greater. // * All renegotations must be secure renegotiations. // * All ciphers using RC4, DES, or 3DES are disallowed. // // Example: The following string would restrict to 2 specific cipher suites, // require RSA keys to be 1024 bits or greater, and require secure renegotiations: // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, rsa1024, // secure-renegotiation // const wchar_t *sslAllowedCiphers(void); // Provides a means for setting a list of ciphers that are allowed for SSL/TLS // connections. The default (empty string) indicates that all implemented ciphers // are possible. The TLS ciphers supported in Chilkat v9.5.0.55 and later are:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 // TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 // TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA // TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA // TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 // TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 // TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 // TLS_DHE_RSA_WITH_AES_256_CBC_SHA // TLS_RSA_WITH_AES_256_CBC_SHA256 // TLS_RSA_WITH_AES_256_GCM_SHA384 // TLS_RSA_WITH_AES_256_CBC_SHA // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 // TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA // TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 // TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 // TLS_DHE_RSA_WITH_AES_128_CBC_SHA // TLS_RSA_WITH_AES_128_CBC_SHA256 // TLS_RSA_WITH_AES_128_GCM_SHA256 // TLS_RSA_WITH_AES_128_CBC_SHA // TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA // TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA // TLS_RSA_WITH_3DES_EDE_CBC_SHA // TLS_ECDHE_RSA_WITH_RC4_128_SHA // TLS_RSA_WITH_RC4_128_SHA // TLS_RSA_WITH_RC4_128_MD5 // TLS_DHE_RSA_WITH_DES_CBC_SHA // TLS_RSA_WITH_DES_CBC_SHA // To restrict SSL/TLS connections to one or more specific ciphers, set this // property to a comma-separated list of ciphers such as // TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 . // The order should be in terms of preference, with the preferred algorithms listed // first. (Note that the client cannot specifically choose the algorithm is picked // because it is the server that chooses. The client simply provides the server // with a list from which to choose.) // // The property can also disallow connections with servers having certificates with // RSA keys less than a certain size. By default, server certificates having RSA // keys of 512 bits or greater are allowed. Add the keyword rsa1024 to disallow // connections with servers having keys smaller than 1024 bits. Add the keyword // rsa2048 to disallow connections with servers having keys smaller than 2048 bits. // // Note: Prior to Chilkat v9.5.0.55, it was not possible to explicitly list allowed // cipher suites. The deprecated means for indicating allowed ciphers was both // incomplete and unprecise. For example, the following keywords could be listed to // allow matching ciphers: aes256-cbc , aes128-cbc , 3des-cbc , and rc4 . These // keywords will still be recognized, but programs should be updated to explicitly // list the allowed ciphers. // // secure-renegotiation: Starting in Chilkat v9.5.0.55, the keyword // secure-renegotiation may be added to require that all renegotions be done // securely (as per RFC 5746). // // best-practices: Starting in Chilkat v9.5.0.55, this property may be set to the // single keyword best-practices . This will allow ciphers based on the current // best practices. As new versions of Chilkat are released, the best practices may // change. Changes will be noted here. The current best practices are: // // * If the server uses an RSA key, it must be 1024 bits or greater. // * All renegotations must be secure renegotiations. // * All ciphers using RC4, DES, or 3DES are disallowed. // // Example: The following string would restrict to 2 specific cipher suites, // require RSA keys to be 1024 bits or greater, and require secure renegotiations: // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, rsa1024, // secure-renegotiation // void put_SslAllowedCiphers(const wchar_t *newVal); // Selects the secure protocol to be used for secure (SSL/TLS) connections. // Possible values are: // // default // TLS 1.3 // TLS 1.2 // TLS 1.1 // TLS 1.0 // SSL 3.0 // TLS 1.3 or higher // TLS 1.2 or higher // TLS 1.1 or higher // TLS 1.0 or higher // // // The default value is default which will choose the, which allows for the // protocol to be selected dynamically at runtime based on the requirements of the // server. Choosing an exact protocol will cause the connection to fail unless that // exact protocol is negotiated. It is better to choose X or higher than an exact // protocol. The default is effectively SSL 3.0 or higher . void get_SslProtocol(CkString &str); // Selects the secure protocol to be used for secure (SSL/TLS) connections. // Possible values are: // // default // TLS 1.3 // TLS 1.2 // TLS 1.1 // TLS 1.0 // SSL 3.0 // TLS 1.3 or higher // TLS 1.2 or higher // TLS 1.1 or higher // TLS 1.0 or higher // // // The default value is default which will choose the, which allows for the // protocol to be selected dynamically at runtime based on the requirements of the // server. Choosing an exact protocol will cause the connection to fail unless that // exact protocol is negotiated. It is better to choose X or higher than an exact // protocol. The default is effectively SSL 3.0 or higher . const wchar_t *sslProtocol(void); // Selects the secure protocol to be used for secure (SSL/TLS) connections. // Possible values are: // // default // TLS 1.3 // TLS 1.2 // TLS 1.1 // TLS 1.0 // SSL 3.0 // TLS 1.3 or higher // TLS 1.2 or higher // TLS 1.1 or higher // TLS 1.0 or higher // // // The default value is default which will choose the, which allows for the // protocol to be selected dynamically at runtime based on the requirements of the // server. Choosing an exact protocol will cause the connection to fail unless that // exact protocol is negotiated. It is better to choose X or higher than an exact // protocol. The default is effectively SSL 3.0 or higher . void put_SslProtocol(const wchar_t *newVal); // Read-only property that returns true if the IMAP server's digital certificate // was verified when connecting via SSL / TLS. bool get_SslServerCertVerified(void); // If true, then the Connect method will (internallly) convert the connection to // TLS/SSL via the STARTTLS IMAP command. This is called explict SSL/TLS because // the client explicitly requests the connection be transformed into a TLS/SSL // secure channel. The alternative is implicit SSL/TLS where the Ssl property is // set to true and the IMAP client connects to the well-known TLS/SSL IMAP port // of 993. bool get_StartTls(void); // If true, then the Connect method will (internallly) convert the connection to // TLS/SSL via the STARTTLS IMAP command. This is called explict SSL/TLS because // the client explicitly requests the connection be transformed into a TLS/SSL // secure channel. The alternative is implicit SSL/TLS where the Ssl property is // set to true and the IMAP client connects to the well-known TLS/SSL IMAP port // of 993. void put_StartTls(bool newVal); // Contains the current or last negotiated TLS cipher suite. If no TLS connection // has yet to be established, or if a connection as attempted and failed, then this // will be empty. A sample cipher suite string looks like this: // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256. void get_TlsCipherSuite(CkString &str); // Contains the current or last negotiated TLS cipher suite. If no TLS connection // has yet to be established, or if a connection as attempted and failed, then this // will be empty. A sample cipher suite string looks like this: // TLS_DHE_RSA_WITH_AES_256_CBC_SHA256. const wchar_t *tlsCipherSuite(void); // Specifies a set of pins for Public Key Pinning for TLS connections. This // property lists the expected SPKI fingerprints for the server certificates. If // the server's certificate (sent during the TLS handshake) does not match any of // the SPKI fingerprints, then the TLS handshake is aborted and the connection // fails. The format of this string property is as follows:hash_algorithm, encoding, SPKI_fingerprint_1, SPKI_fingerprint_2, ... // For example, the following string specifies a single sha256 base64-encoded SPKI // fingerprint:"sha256, base64, lKg1SIqyhPSK19tlPbjl8s02yChsVTDklQpkMCHvsTE=" // This example specifies two SPKI fingerprints:"sha256, base64, 4t37LpnGmrMEAG8HEz9yIrnvJV2euVRwCLb9EH5WZyI=, 68b0G5iqMvWVWvUCjMuhLEyekM5729PadtnU5tdXZKs=" // Any of the following hash algorithms are allowed:.sha1, sha256, sha384, sha512, // md2, md5, haval, ripemd128, ripemd160,ripemd256, or ripemd320. // // The following encodings are allowed: base64, hex, and any of the encodings // indicated in the link below. // void get_TlsPinSet(CkString &str); // Specifies a set of pins for Public Key Pinning for TLS connections. This // property lists the expected SPKI fingerprints for the server certificates. If // the server's certificate (sent during the TLS handshake) does not match any of // the SPKI fingerprints, then the TLS handshake is aborted and the connection // fails. The format of this string property is as follows:hash_algorithm, encoding, SPKI_fingerprint_1, SPKI_fingerprint_2, ... // For example, the following string specifies a single sha256 base64-encoded SPKI // fingerprint:"sha256, base64, lKg1SIqyhPSK19tlPbjl8s02yChsVTDklQpkMCHvsTE=" // This example specifies two SPKI fingerprints:"sha256, base64, 4t37LpnGmrMEAG8HEz9yIrnvJV2euVRwCLb9EH5WZyI=, 68b0G5iqMvWVWvUCjMuhLEyekM5729PadtnU5tdXZKs=" // Any of the following hash algorithms are allowed:.sha1, sha256, sha384, sha512, // md2, md5, haval, ripemd128, ripemd160,ripemd256, or ripemd320. // // The following encodings are allowed: base64, hex, and any of the encodings // indicated in the link below. // const wchar_t *tlsPinSet(void); // Specifies a set of pins for Public Key Pinning for TLS connections. This // property lists the expected SPKI fingerprints for the server certificates. If // the server's certificate (sent during the TLS handshake) does not match any of // the SPKI fingerprints, then the TLS handshake is aborted and the connection // fails. The format of this string property is as follows:hash_algorithm, encoding, SPKI_fingerprint_1, SPKI_fingerprint_2, ... // For example, the following string specifies a single sha256 base64-encoded SPKI // fingerprint:"sha256, base64, lKg1SIqyhPSK19tlPbjl8s02yChsVTDklQpkMCHvsTE=" // This example specifies two SPKI fingerprints:"sha256, base64, 4t37LpnGmrMEAG8HEz9yIrnvJV2euVRwCLb9EH5WZyI=, 68b0G5iqMvWVWvUCjMuhLEyekM5729PadtnU5tdXZKs=" // Any of the following hash algorithms are allowed:.sha1, sha256, sha384, sha512, // md2, md5, haval, ripemd128, ripemd160,ripemd256, or ripemd320. // // The following encodings are allowed: base64, hex, and any of the encodings // indicated in the link below. // void put_TlsPinSet(const wchar_t *newVal); // Contains the current or last negotiated TLS protocol version. If no TLS // connection has yet to be established, or if a connection as attempted and // failed, then this will be empty. Possible values are SSL 3.0 , TLS 1.0 , TLS 1.1 // , TLS 1.2 , and TLS 1.3 . void get_TlsVersion(CkString &str); // Contains the current or last negotiated TLS protocol version. If no TLS // connection has yet to be established, or if a connection as attempted and // failed, then this will be empty. Possible values are SSL 3.0 , TLS 1.0 , TLS 1.1 // , TLS 1.2 , and TLS 1.3 . const wchar_t *tlsVersion(void); // A positive integer value containing the UIDNEXT of the currently selected // folder, or 0 if it's not available or no folder is selected. unsigned long get_UidNext(void); // An integer value containing the UIDVALIDITY of the currently selected mailbox, // or 0 if no mailbox is selected. // // A client can save the UidValidity value for a mailbox and then compare it with // the UidValidity on a subsequent session. If the new value is larger, the IMAP // server is not keeping UID's unchanged between sessions. Most IMAP servers // maintain UID's between sessions. // unsigned long get_UidValidity(void); // This is a catch-all property to be used for uncommon needs. This property // defaults to the empty string and should typically remain empty. Can be set to a // list of the following comma separated keywords: // * ProtectFromVpn - Introduced in v9.5.0.80. On Android systems, will bypass // any VPN that may be installed or active. // * EnableTls13 - Introduced in v9.5.0.82. Causes TLS 1.3 to be offered in the // ClientHello of the TLS protocol, allowing the server to select TLS 1.3 for the // session. Future versions of Chilkat will enable TLS 1.3 by default. This option // is only necessary in v9.5.0.82 if TLS 1.3 is desired. void get_UncommonOptions(CkString &str); // This is a catch-all property to be used for uncommon needs. This property // defaults to the empty string and should typically remain empty. Can be set to a // list of the following comma separated keywords: // * ProtectFromVpn - Introduced in v9.5.0.80. On Android systems, will bypass // any VPN that may be installed or active. // * EnableTls13 - Introduced in v9.5.0.82. Causes TLS 1.3 to be offered in the // ClientHello of the TLS protocol, allowing the server to select TLS 1.3 for the // session. Future versions of Chilkat will enable TLS 1.3 by default. This option // is only necessary in v9.5.0.82 if TLS 1.3 is desired. const wchar_t *uncommonOptions(void); // This is a catch-all property to be used for uncommon needs. This property // defaults to the empty string and should typically remain empty. Can be set to a // list of the following comma separated keywords: // * ProtectFromVpn - Introduced in v9.5.0.80. On Android systems, will bypass // any VPN that may be installed or active. // * EnableTls13 - Introduced in v9.5.0.82. Causes TLS 1.3 to be offered in the // ClientHello of the TLS protocol, allowing the server to select TLS 1.3 for the // session. Future versions of Chilkat will enable TLS 1.3 by default. This option // is only necessary in v9.5.0.82 if TLS 1.3 is desired. void put_UncommonOptions(const wchar_t *newVal); // ---------------------- // Methods // ---------------------- // Adds a PFX file to the object's list of sources for locating certificates and // private keys during decryption or signing. To add multiple PFX sources, call // this method for each file. bd should contain the bytes of a PFX file (also // known as PKCS12 or .p12). bool AddPfxSourceBd(CkBinDataW &bd, const wchar_t *password); // Adds a PFX file to the object's list of sources for locating certificates and // private keys during decryption or signing. To add multiple PFX sources, call // this method for each file. pfxBytes should contain the bytes of a PFX file (also // known as PKCS12 or .p12). bool AddPfxSourceData(CkByteData &pfxBytes, const wchar_t *pfxPassword); // Adds a PFX file to the object's internal list of sources to be searched for // certificates and private keys when decrypting. Multiple PFX files can be added // by calling this method once for each. (On the Windows operating system, the // registry-based certificate stores are also automatically searched, so it is // commonly not required to explicitly add PFX sources.) // // The pfxFilePath contains the bytes of a PFX file (also known as PKCS12 or .p12). // bool AddPfxSourceFile(const wchar_t *pfxFilePath, const wchar_t *pfxPassword); // Appends an email to an IMAP mailbox. bool AppendMail(const wchar_t *mailbox, CkEmailW &email); // Creates an asynchronous task to call the AppendMail method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *AppendMailAsync(const wchar_t *mailbox, CkEmailW &email); // Appends an email (represented as MIME text) to an IMAP mailbox. bool AppendMime(const wchar_t *mailbox, const wchar_t *mimeText); // Creates an asynchronous task to call the AppendMime method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *AppendMimeAsync(const wchar_t *mailbox, const wchar_t *mimeText); // The same as AppendMime, but with an extra argument to allow the internal date of // the email on the server to be explicitly specified. The date/time is provided in // RFC822 string format, such as Wed, 18 Oct 2017 09:08:21 GMT . bool AppendMimeWithDateStr(const wchar_t *mailbox, const wchar_t *mimeText, const wchar_t *internalDateStr); // Creates an asynchronous task to call the AppendMimeWithDateStr method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *AppendMimeWithDateStrAsync(const wchar_t *mailbox, const wchar_t *mimeText, const wchar_t *internalDateStr); // Same as AppendMime, but allows the flags associated with the email to be set at // the same time. A flag is on if true, and off if false. bool AppendMimeWithFlags(const wchar_t *mailbox, const wchar_t *mimeText, bool seen, bool flagged, bool answered, bool draft); // Creates an asynchronous task to call the AppendMimeWithFlags method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *AppendMimeWithFlagsAsync(const wchar_t *mailbox, const wchar_t *mimeText, bool seen, bool flagged, bool answered, bool draft); // Same as AppendMimeWithFlags, but the MIME to be uploaded to the IMAP server is // passed in a StringBuilder object. bool AppendMimeWithFlagsSb(const wchar_t *mailbox, CkStringBuilderW &sbMime, bool seen, bool flagged, bool answered, bool draft); // Creates an asynchronous task to call the AppendMimeWithFlagsSb method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *AppendMimeWithFlagsSbAsync(const wchar_t *mailbox, CkStringBuilderW &sbMime, bool seen, bool flagged, bool answered, bool draft); // Sends a CAPABILITY command to the IMAP server and returns the raw response. bool Capability(CkString &outStr); // Sends a CAPABILITY command to the IMAP server and returns the raw response. const wchar_t *capability(void); // Creates an asynchronous task to call the Capability method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *CapabilityAsync(void); // Returns true if the underlying TCP socket is connected to the IMAP server. // // Internally, this method makes a lower-level socket system call to check if the // TCP socket is still connected. // bool CheckConnection(void); // This method is deprecated. Applications should instead call QueryMbx . // // Checks for new email that has arrived since the mailbox was selected (via the // SelectMailbox or ExamineMailbox methods), or since the last call to // CheckForNewEmail (whichever was most recent). This method works by closing and // re-opening the currently selected mailbox, and then sending a SEARCH command for // either RECENT emails, or emails having a UID greater than the UIDNEXT value. A // message set object containing the UID's of the new emails is returned, and this // may be passed to methods such as FetchBundle to download the new emails. // // The caller is responsible for deleting the object returned by this method. CkMessageSetW *CheckForNewEmail(void); // Creates an asynchronous task to call the CheckForNewEmail method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *CheckForNewEmailAsync(void); // Clears the contents of the SessionLog property. void ClearSessionLog(void); // Closes the currently selected mailbox. // // Note: The term mailbox and folder are synonymous. Whenever the word mailbox is // used, it has the same meaning as folder . // bool CloseMailbox(const wchar_t *mailbox); // Creates an asynchronous task to call the CloseMailbox method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *CloseMailboxAsync(const wchar_t *mailbox); // Connects to an IMAP server, but does not login. The domainName is the domain name of // the IMAP server. (May also use the IPv4 or IPv6 address in string format.) // // Important: All TCP-based Internet communications, regardless of the protocol // (such as HTTP, FTP, SSH, IMAP, POP3, SMTP, etc.), and regardless of SSL/TLS, // begin with establishing a TCP connection to a remote host:port. External // security-related infrastructure such as software firewalls (Windows Firewall), // hardware firewalls, anti-virus, at either source or destination (or both) can // block the connection. If the connection fails, make sure to check all potential // external causes of blockage. // bool Connect(const wchar_t *domainName); // Creates an asynchronous task to call the Connect method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *ConnectAsync(const wchar_t *domainName); // Copies a message from the selected mailbox to copyToMailbox. If bUid is true, then msgId // represents a UID. If bUid is false, then msgId represents a sequence number. bool Copy(unsigned long msgId, bool bUid, const wchar_t *copyToMailbox); // Creates an asynchronous task to call the Copy method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *CopyAsync(unsigned long msgId, bool bUid, const wchar_t *copyToMailbox); // Same as the Copy method, except an entire set of emails is copied at once. The // set of emails is specified in messageSet. bool CopyMultiple(CkMessageSetW &messageSet, const wchar_t *copyToMailbox); // Creates an asynchronous task to call the CopyMultiple method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *CopyMultipleAsync(CkMessageSetW &messageSet, const wchar_t *copyToMailbox); // Copies one or more emails from one mailbox to another. The emails are specified // as a range of sequence numbers. The 1st email in a mailbox is always at sequence // number 1. bool CopySequence(int startSeqNum, int count, const wchar_t *copyToMailbox); // Creates an asynchronous task to call the CopySequence method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *CopySequenceAsync(int startSeqNum, int count, const wchar_t *copyToMailbox); // Creates a new mailbox. // // Note: The term mailbox and folder are synonymous. Whenever the word mailbox is // used, it has the same meaning as folder . // bool CreateMailbox(const wchar_t *mailbox); // Creates an asynchronous task to call the CreateMailbox method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *CreateMailboxAsync(const wchar_t *mailbox); // Deletes an existing mailbox. // // Note: The term mailbox and folder are synonymous. Whenever the word mailbox is // used, it has the same meaning as folder . // bool DeleteMailbox(const wchar_t *mailbox); // Creates an asynchronous task to call the DeleteMailbox method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *DeleteMailboxAsync(const wchar_t *mailbox); // Disconnects cleanly from the IMAP server. A non-success return from this method // only indicates that the disconnect was not clean -- and this can typically be // ignored. bool Disconnect(void); // Creates an asynchronous task to call the Disconnect method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *DisconnectAsync(void); // Selects a mailbox such that only read-only transactions are allowed. This method // would be called instead of SelectMailbox if the logged-on user has read-only // permission. // // Note: The term mailbox and folder are synonymous. Whenever the word mailbox is // used, it has the same meaning as folder . // bool ExamineMailbox(const wchar_t *mailbox); // Creates an asynchronous task to call the ExamineMailbox method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *ExamineMailboxAsync(const wchar_t *mailbox); // Permanently removes from the currently selected mailbox all messages that have // the Deleted flag set. bool Expunge(void); // Creates an asynchronous task to call the Expunge method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *ExpungeAsync(void); // Permanently removes from the currently selected mailbox all messages that have // the Deleted flag set, and closes the mailbox. bool ExpungeAndClose(void); // Creates an asynchronous task to call the ExpungeAndClose method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *ExpungeAndCloseAsync(void); // Downloads one of an email's attachments and saves it to a file. If the emailObject // already contains the full email (including the attachments), then no // communication with the IMAP server is necessary because the attachment data is // already contained within the emailObject. In this case, the attachment is simply // extracted and saved to saveToPath. (As with all Chilkat methods, indexing begins at 0. // The 1st attachment is at attachmentIndex 0.) // // Additional Notes: // // If the AutoDownloadAttachments property is set to false, then emails // downloaded via any of the Fetch* methods will not include attachments. // // Note: related items are not considered attachments and are downloaded. These are // images, style sheets, etc. that are embedded within the HTML body of an email. // // Also: All signed and/or encrypted emails must be downloaded in full. // // When an email is downloaded without attachments, the attachment information is // included in header fields. The header fields have names beginning with ckx-imap- // . The attachment information can be obtained via the following methods: // // imap.GetMailNumAttach // imap.GetMailAttachFilename // imap.GetMailAttachSize // // bool FetchAttachment(CkEmailW &emailObject, int attachmentIndex, const wchar_t *saveToPath); // Creates an asynchronous task to call the FetchAttachment method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchAttachmentAsync(CkEmailW &emailObject, int attachmentIndex, const wchar_t *saveToPath); // Downloads one of an email's attachments and returns the attachment data in a // BinData object. ***See the FetchAttachment method description for more // information about fetching attachments. bool FetchAttachmentBd(CkEmailW &email, int attachmentIndex, CkBinDataW &binData); // Creates an asynchronous task to call the FetchAttachmentBd method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchAttachmentBdAsync(CkEmailW &email, int attachmentIndex, CkBinDataW &binData); // Downloads one of an email's attachments and returns the attachment data as // in-memory bytes that may be accessed by an application. ***See the // FetchAttachment method description for more information about fetching // attachments. bool FetchAttachmentBytes(CkEmailW &email, int attachIndex, CkByteData &outBytes); // Creates an asynchronous task to call the FetchAttachmentBytes method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchAttachmentBytesAsync(CkEmailW &email, int attachIndex); // Downloads one of an email's attachments and returns the attachment data in a // StringBuilder. It only makes sense to call this method for attachments that // contain text data. The charset indicates the character encoding of the text, such // as utf-8 or windows-1252 . ***See the FetchAttachment method description for // more information about fetching attachments. bool FetchAttachmentSb(CkEmailW &email, int attachmentIndex, const wchar_t *charset, CkStringBuilderW &sb); // Creates an asynchronous task to call the FetchAttachmentSb method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchAttachmentSbAsync(CkEmailW &email, int attachmentIndex, const wchar_t *charset, CkStringBuilderW &sb); // Downloads one of an email's attachments and returns the attachment data as a // string. It only makes sense to call this method for attachments that contain // text data. The charset indicates the character encoding of the text, such as utf-8 // or windows-1252 . ***See the FetchAttachment method description for more // information about fetching attachments. bool FetchAttachmentString(CkEmailW &emailObject, int attachmentIndex, const wchar_t *charset, CkString &outStr); // Downloads one of an email's attachments and returns the attachment data as a // string. It only makes sense to call this method for attachments that contain // text data. The charset indicates the character encoding of the text, such as utf-8 // or windows-1252 . ***See the FetchAttachment method description for more // information about fetching attachments. const wchar_t *fetchAttachmentString(CkEmailW &emailObject, int attachmentIndex, const wchar_t *charset); // Creates an asynchronous task to call the FetchAttachmentString method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchAttachmentStringAsync(CkEmailW &emailObject, int attachmentIndex, const wchar_t *charset); // This method is deprecated. Applications should instead call FetchMsgSet . // // Retrieves a set of messages from the IMAP server and returns them in an email // bundle object. If the method fails, it may return a NULL reference. // // The caller is responsible for deleting the object returned by this method. CkEmailBundleW *FetchBundle(CkMessageSetW &messageSet); // Creates an asynchronous task to call the FetchBundle method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchBundleAsync(CkMessageSetW &messageSet); // This method is deprecated and will be removed in a future major version release. // MIME can potentially include non-encoded binary data and mixed character // encodings, so downloading emails as a simple MIME string often requires // processing and modifications, making it impractical. Instead, applications // should use FetchSingleBd or methods that download emails to email objects. // // Retrieves a set of messages from the IMAP server and returns the MIME sources in // a string array object. // // The caller is responsible for deleting the object returned by this method. CkStringArrayW *FetchBundleAsMime(CkMessageSetW &messageSet); // Creates an asynchronous task to call the FetchBundleAsMime method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchBundleAsMimeAsync(CkMessageSetW &messageSet); // This method is deprecated. Applications should instead call FetchRange . // // Fetches a chunk of emails starting at a specific sequence number. A bundle of // fetched emails is returned. The last two arguments are message sets that are // updated with the ids of messages successfully/unsuccessfully fetched. // // The caller is responsible for deleting the object returned by this method. CkEmailBundleW *FetchChunk(int startSeqNum, int count, CkMessageSetW &failedSet, CkMessageSetW &fetchedSet); // Creates an asynchronous task to call the FetchChunk method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchChunkAsync(int startSeqNum, int count, CkMessageSetW &failedSet, CkMessageSetW &fetchedSet); // Downloads a range of full emails based on a starting sequence number ( seqnum ) // and count . The failed sequence numbers are recorded in failedSet. The fetched // sequence numbers are recorded in fetchedSet. The downloaded emails are returned in // bundle. bool FetchChunk2(int seqnum, int count, CkMessageSetW &failedSet, CkMessageSetW &fetchedSet, CkEmailBundleW &bundle); // Creates an asynchronous task to call the FetchChunk2 method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchChunk2Async(int seqnum, int count, CkMessageSetW &failedSet, CkMessageSetW &fetchedSet, CkEmailBundleW &bundle); // Downloads an email or its header based on provided arguments. If headerOnly is true, // only the email header is downloaded. The email is identified by msgId, which can // be either a UID or sequence number. bUid determines the type: if true, msgId is // a UID; otherwise, it's a sequence number. The result is stored in email. If // downloading the full email and AutoDownloadAttachments is true, attachments // are included. bool FetchEmail(bool headerOnly, unsigned long msgId, bool bUid, CkEmailW &email); // Creates an asynchronous task to call the FetchEmail method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchEmailAsync(bool headerOnly, unsigned long msgId, bool bUid, CkEmailW &email); // Fetches the flags for an email. The bUid argument determines whether the msgId is // a UID or sequence number. // // Returns the SPACE separated list of flags set for the email, such as \Flagged // \Seen $label1 . // // If an empty string is returned, then it could be that the email referenced by // msgId does not exist in the currently selected mailbox, or it simply has no flags // that are set. To determine the difference, examine the contents of the // LastResponse property. For the case where the message does not exist, the // LastResponse will contain a NO and will look something like this:aaah NO The specified message set is invalid. // For the case where the message exists, but no flags are set, the LastResponse // will contain an OK in the last response line. For example:... // aaah OK FETCH completed. // bool FetchFlags(unsigned long msgId, bool bUid, CkString &outStrFlags); // Fetches the flags for an email. The bUid argument determines whether the msgId is // a UID or sequence number. // // Returns the SPACE separated list of flags set for the email, such as \Flagged // \Seen $label1 . // // If an empty string is returned, then it could be that the email referenced by // msgId does not exist in the currently selected mailbox, or it simply has no flags // that are set. To determine the difference, examine the contents of the // LastResponse property. For the case where the message does not exist, the // LastResponse will contain a NO and will look something like this:aaah NO The specified message set is invalid. // For the case where the message exists, but no flags are set, the LastResponse // will contain an OK in the last response line. For example:... // aaah OK FETCH completed. // const wchar_t *fetchFlags(unsigned long msgId, bool bUid); // Creates an asynchronous task to call the FetchFlags method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchFlagsAsync(unsigned long msgId, bool bUid); // This method is deprecated. Applications should instead call FetchMsgSet . // // Retrieves a set of message headers from the IMAP server and returns them in an // email bundle object. If the method fails, it may return a NULL reference. The // following methods are useful for retrieving information about attachments and // flags after email headers are retrieved: GetMailNumAttach, GetMailAttachSize, // GetMailAttachFilename, GetMailFlag. // // The caller is responsible for deleting the object returned by this method. CkEmailBundleW *FetchHeaders(CkMessageSetW &messageSet); // Creates an asynchronous task to call the FetchHeaders method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchHeadersAsync(CkMessageSetW &messageSet); // Downloads messages or their headers from the IMAP server based on the given // arguments. If headersOnly is true, only the message headers specified by msgSet are // downloaded. The retrieved messages are then stored in bundle. // // Note: Downloaded emails are appended to bundle. (bundle is not cleared prior to // downloading email.) // bool FetchMsgSet(bool headersOnly, CkMessageSetW &msgSet, CkEmailBundleW &bundle); // Creates an asynchronous task to call the FetchMsgSet method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchMsgSetAsync(bool headersOnly, CkMessageSetW &msgSet, CkEmailBundleW &bundle); // Downloads a range of full emails or email headers based on a starting sequence // number ( seqnum ) and count . The downloaded emails are returned in bundle. // // Important: The 1st email is at sequence number 1 . This method will fail and // return false if your application accidentally passes 0 for the seqnum. // bool FetchRange(bool headersOnly, int seqnum, int count, CkEmailBundleW &bundle); // Creates an asynchronous task to call the FetchRange method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchRangeAsync(bool headersOnly, int seqnum, int count, CkEmailBundleW &bundle); // This method is deprecated. Applications should instead call FetchRange . // // Downloads email for a range of sequence numbers. The 1st email in a mailbox is // always at sequence number 1. The total number of emails in the currently // selected mailbox is available in the NumMessages property. If the numMessages is too // large, the method will still succeed, but will return a bundle of emails from // startSeqNum to the last email in the mailbox. // // Important: The startSeqNum is a number between 1 and the number of messages in the // currently selected folder. Sequence numbers can change during your IMAP session // when a message is removed from a folder, either by your session or another one. // // The caller is responsible for deleting the object returned by this method. CkEmailBundleW *FetchSequence(int startSeqNum, int numMessages); // Creates an asynchronous task to call the FetchSequence method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchSequenceAsync(int startSeqNum, int numMessages); // This method is deprecated and will be removed in a future major version release. // MIME can potentially include non-encoded binary data and mixed character // encodings, so downloading emails as a simple MIME string often requires // processing and modifications, making it impractical. Instead, applications // should use FetchSingleBd or methods that download emails to email objects. // // Same as FetchSequence, but instead of returning email objects in a bundle, the // raw MIME of each email is returned. // // Important: The startSeqNum is a number between 1 and the number of messages in the // currently selected folder. Sequence numbers can change during your IMAP session // when a message is removed from a folder, either by your session or another one. // // The caller is responsible for deleting the object returned by this method. CkStringArrayW *FetchSequenceAsMime(int startSeqNum, int numMessages); // Creates an asynchronous task to call the FetchSequenceAsMime method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchSequenceAsMimeAsync(int startSeqNum, int numMessages); // This method is deprecated. Applications should instead call FetchRange . // // Same as FetchSequence, but only the email headers are returned. The email // objects within the bundle will be lacking bodies and attachments. // // Note: For any method call using sequence numbers, an application must make sure // the sequence numbers are within the valid range. When a mailbox is selected, the // NumMessages property will have been set, and the valid range of sequence numbers // is from 1 to NumMessages. An attempt to fetch sequence numbers outside this // range will result in an error. // // Important: The startSeqNum is a number between 1 and the number of messages in the // currently selected folder. Sequence numbers can change during your IMAP session // when a message is removed from a folder, either by your session or another one. // // The caller is responsible for deleting the object returned by this method. CkEmailBundleW *FetchSequenceHeaders(int startSeqNum, int numMessages); // Creates an asynchronous task to call the FetchSequenceHeaders method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchSequenceHeadersAsync(int startSeqNum, int numMessages); // This method is deprecated. Applications should instead call FetchEmail . // // Retrieves a single message from the IMAP server, including attachments if the // AutoDownloadAttachments property is true. If bUid is true, then msgId // represents a UID. If bUid is false, then msgId represents a sequence number. // // The caller is responsible for deleting the object returned by this method. CkEmailW *FetchSingle(unsigned long msgId, bool bUid); // Creates an asynchronous task to call the FetchSingle method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchSingleAsync(unsigned long msgId, bool bUid); // Retrieves a single message from the IMAP server and returns a string containing // the complete MIME source of the email, including attachments if the // AutoDownloadAttachments property is true. If bUid is true, then msgId // represents a UID. If bUid is false, then msgId represents a sequence number. bool FetchSingleAsMime(unsigned long msgId, bool bUid, CkString &outStrMime); // Retrieves a single message from the IMAP server and returns a string containing // the complete MIME source of the email, including attachments if the // AutoDownloadAttachments property is true. If bUid is true, then msgId // represents a UID. If bUid is false, then msgId represents a sequence number. const wchar_t *fetchSingleAsMime(unsigned long msgId, bool bUid); // Creates an asynchronous task to call the FetchSingleAsMime method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchSingleAsMimeAsync(unsigned long msgId, bool bUid); // Retrieves a single message from the IMAP server into the sbMime object. If bUid is // true, then msgId represents a UID. If bUid is false, then msgId represents a // sequence number. If successful, the sbMime will contain the complete MIME of the // email, including attachments if the AutoDownloadAttachments property is true. bool FetchSingleAsMimeSb(unsigned long msgId, bool bUid, CkStringBuilderW &sbMime); // Creates an asynchronous task to call the FetchSingleAsMimeSb method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchSingleAsMimeSbAsync(unsigned long msgId, bool bUid, CkStringBuilderW &sbMime); // Retrieves a single message from the IMAP server into the mimeData object.. If bUid // is true, then msgId represents a UID. If bUid is false, then msgId represents // a sequence number. If successful, the mimeData will contain the complete MIME of the // email, including attachments if the AutoDownloadAttachments property is true. bool FetchSingleBd(unsigned long msgId, bool bUid, CkBinDataW &mimeData); // Creates an asynchronous task to call the FetchSingleBd method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchSingleBdAsync(unsigned long msgId, bool bUid, CkBinDataW &mimeData); // This method is deprecated. Applications should instead call FetchEmail . // // Retrieves a single message header from the IMAP server. If the method fails, it // may return a NULL reference. The following methods are useful for retrieving // information about attachments and flags after an email header is retrieved: // GetMailNumAttach, GetMailAttachSize, GetMailAttachFilename, GetMailFlag. If bUid // is true, then msgID represents a UID. If bUid is false, then msgID represents a // sequence number. // // The caller is responsible for deleting the object returned by this method. CkEmailW *FetchSingleHeader(unsigned long msgId, bool bUid); // Creates an asynchronous task to call the FetchSingleHeader method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchSingleHeaderAsync(unsigned long msgId, bool bUid); // Fetches and returns the MIME of a single email header. bool FetchSingleHeaderAsMime(unsigned long msgId, bool bUID, CkString &outStr); // Fetches and returns the MIME of a single email header. const wchar_t *fetchSingleHeaderAsMime(unsigned long msgId, bool bUID); // Creates an asynchronous task to call the FetchSingleHeaderAsMime method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *FetchSingleHeaderAsMimeAsync(unsigned long msgId, bool bUID); // This method is deprecated. Applications should instead call QueryMbx . // // Returns a message set object containing all the UIDs in the currently selected // mailbox. A NULL object reference is returned on failure. // // The caller is responsible for deleting the object returned by this method. CkMessageSetW *GetAllUids(void); // Creates an asynchronous task to call the GetAllUids method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *GetAllUidsAsync(void); // Returns the Nth attachment filename. Indexing begins at 0. bool GetMailAttachFilename(CkEmailW &email, int attachIndex, CkString &outStrFilename); // Returns the Nth attachment filename. Indexing begins at 0. const wchar_t *getMailAttachFilename(CkEmailW &email, int attachIndex); // Returns the Nth attachment filename. Indexing begins at 0. const wchar_t *mailAttachFilename(CkEmailW &email, int attachIndex); // Returns the Nth attachment size in bytes. Indexing begins at 0. int GetMailAttachSize(CkEmailW &email, int attachIndex); // Sends a Status command to get the status of a mailbox. Returns an XML string // containing the status values as named attributes. Possible status values are: // * messages: The number of messages in the mailbox. // * recent: The number of messages with the \Recent flag set. // * uidnext: The next unique identifier value of the mailbox. // * uidvalidity: The unique identifier validity value of the mailbox. // * unseen: The number of messages which do not have the \Seen flag set. // // An example of the string returned by this method is: _LT_status messages= 240 // recent= 0 uidnext= 3674 uidvalidity= 3 unseen= 213 /_GT_ // bool GetMailboxStatus(const wchar_t *mailbox, CkString &outStr); // Sends a Status command to get the status of a mailbox. Returns an XML string // containing the status values as named attributes. Possible status values are: // * messages: The number of messages in the mailbox. // * recent: The number of messages with the \Recent flag set. // * uidnext: The next unique identifier value of the mailbox. // * uidvalidity: The unique identifier validity value of the mailbox. // * unseen: The number of messages which do not have the \Seen flag set. // // An example of the string returned by this method is: _LT_status messages= 240 // recent= 0 uidnext= 3674 uidvalidity= 3 unseen= 213 /_GT_ // const wchar_t *getMailboxStatus(const wchar_t *mailbox); // Sends a Status command to get the status of a mailbox. Returns an XML string // containing the status values as named attributes. Possible status values are: // * messages: The number of messages in the mailbox. // * recent: The number of messages with the \Recent flag set. // * uidnext: The next unique identifier value of the mailbox. // * uidvalidity: The unique identifier validity value of the mailbox. // * unseen: The number of messages which do not have the \Seen flag set. // // An example of the string returned by this method is: _LT_status messages= 240 // recent= 0 uidnext= 3674 uidvalidity= 3 unseen= 213 /_GT_ // const wchar_t *mailboxStatus(const wchar_t *mailbox); // Creates an asynchronous task to call the GetMailboxStatus method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *GetMailboxStatusAsync(const wchar_t *mailbox); // Returns the value of a flag (1 = yes, 0 = no) for an email. Both standard system // flags as well as custom flags may be set. Standard system flags typically begin // with a backslash character, such as \Seen , \Answered , \Flagged , \Draft , // \Deleted , and \Answered . Custom flags can be anything, such as NonJunk , // $label1 , $MailFlagBit1 , etc. . int GetMailFlag(CkEmailW &email, const wchar_t *flagName); // Returns the number of email attachments. int GetMailNumAttach(CkEmailW &email); // Returns the size (in bytes) of the entire email including attachments. int GetMailSize(CkEmailW &email); // Sends the GETQUOTA command and returns the response in JSON format. This feature // is only possible with IMAP servers that support the QUOTA extension/capability. bool GetQuota(const wchar_t *quotaRoot, CkString &outStr); // Sends the GETQUOTA command and returns the response in JSON format. This feature // is only possible with IMAP servers that support the QUOTA extension/capability. const wchar_t *getQuota(const wchar_t *quotaRoot); // Sends the GETQUOTA command and returns the response in JSON format. This feature // is only possible with IMAP servers that support the QUOTA extension/capability. const wchar_t *quota(const wchar_t *quotaRoot); // Creates an asynchronous task to call the GetQuota method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *GetQuotaAsync(const wchar_t *quotaRoot); // Sends the GETQUOTAROOT command and returns the response in JSON format. This // feature is only possible with IMAP servers that support the QUOTA // extension/capability. bool GetQuotaRoot(const wchar_t *mailboxName, CkString &outStr); // Sends the GETQUOTAROOT command and returns the response in JSON format. This // feature is only possible with IMAP servers that support the QUOTA // extension/capability. const wchar_t *getQuotaRoot(const wchar_t *mailboxName); // Sends the GETQUOTAROOT command and returns the response in JSON format. This // feature is only possible with IMAP servers that support the QUOTA // extension/capability. const wchar_t *quotaRoot(const wchar_t *mailboxName); // Creates an asynchronous task to call the GetQuotaRoot method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *GetQuotaRootAsync(const wchar_t *mailboxName); // Returns the IMAP server's digital certificate (for SSL / TLS connections). bool GetServerCert(CkCertW &cert); // This method is deprecated. Applications should instead call GetServerCert . // // Returns the IMAP server's digital certificate (for SSL / TLS connections). // // The caller is responsible for deleting the object returned by this method. CkCertW *GetSslServerCert(void); // Returns true if the capability indicated by name is found in the capabilityResponse. // Otherwise returns false. bool HasCapability(const wchar_t *name, const wchar_t *capabilityResponse); // Polls the connection to see if any real-time updates are available. The timeoutMs // indicates how long to wait for incoming updates. This method does not send a // command to the IMAP server, it simply checks the connection for already-arrived // messages that the IMAP server sent. This method would only be called after IDLE // has already been started via the IdleStart method. // // If updates are available, they are returned in an XML string having the format // as shown below. There is one child node for each notification. The possible // notifcations are: // 1. flags -- lists flags that have been set or unset for an email. // 2. expunge -- provides the sequence number for an email that has been // deleted. // 3. exists -- reports the new number of messages in the currently selected // mailbox. // 4. recent -- reports the new number of messages with the /RECENT flag set. // 5. raw -- reports an unanticipated response line that was not parsed by // Chilkat. This should be reported to support@chilkatoft.com // // A sample showing all possible notifications (except for raw ) is shown below._LT_idle_GT_ // _LT_flags seqnum="59" uid="11876"_GT_ // _LT_flag_GT_\Deleted_LT_/flag_GT_ // _LT_flag_GT_\Seen_LT_/flag_GT_ // _LT_/flags_GT_ // _LT_flags seqnum="69" uid="11889"_GT_ // _LT_flag_GT_\Seen_LT_/flag_GT_ // _LT_/flags_GT_ // _LT_expunge_GT_58_LT_/expunge_GT_ // _LT_expunge_GT_58_LT_/expunge_GT_ // _LT_expunge_GT_67_LT_/expunge_GT_ // _LT_exists_GT_115_LT_/exists_GT_ // _LT_recent_GT_0_LT_/recent_GT_ // _LT_/idle_GT_ // // // If no updates have been received, the returned XML string has the following // format, as shown below. The_LT_idle_GT__LT_/idle_GT_ // // // NOTE:Once IdleStart has been called, this method can and should be called // frequently to see if any updates have arrived. This is NOT the same as polling // the IMAP server because it does not send any requests to the IMAP server. It // simply checks to see if any messages (i.e. updates) from the IMAP server are // available and waiting to be read. // bool IdleCheck(int timeoutMs, CkString &outStr); // Polls the connection to see if any real-time updates are available. The timeoutMs // indicates how long to wait for incoming updates. This method does not send a // command to the IMAP server, it simply checks the connection for already-arrived // messages that the IMAP server sent. This method would only be called after IDLE // has already been started via the IdleStart method. // // If updates are available, they are returned in an XML string having the format // as shown below. There is one child node for each notification. The possible // notifcations are: // 1. flags -- lists flags that have been set or unset for an email. // 2. expunge -- provides the sequence number for an email that has been // deleted. // 3. exists -- reports the new number of messages in the currently selected // mailbox. // 4. recent -- reports the new number of messages with the /RECENT flag set. // 5. raw -- reports an unanticipated response line that was not parsed by // Chilkat. This should be reported to support@chilkatoft.com // // A sample showing all possible notifications (except for raw ) is shown below._LT_idle_GT_ // _LT_flags seqnum="59" uid="11876"_GT_ // _LT_flag_GT_\Deleted_LT_/flag_GT_ // _LT_flag_GT_\Seen_LT_/flag_GT_ // _LT_/flags_GT_ // _LT_flags seqnum="69" uid="11889"_GT_ // _LT_flag_GT_\Seen_LT_/flag_GT_ // _LT_/flags_GT_ // _LT_expunge_GT_58_LT_/expunge_GT_ // _LT_expunge_GT_58_LT_/expunge_GT_ // _LT_expunge_GT_67_LT_/expunge_GT_ // _LT_exists_GT_115_LT_/exists_GT_ // _LT_recent_GT_0_LT_/recent_GT_ // _LT_/idle_GT_ // // // If no updates have been received, the returned XML string has the following // format, as shown below. The_LT_idle_GT__LT_/idle_GT_ // // // NOTE:Once IdleStart has been called, this method can and should be called // frequently to see if any updates have arrived. This is NOT the same as polling // the IMAP server because it does not send any requests to the IMAP server. It // simply checks to see if any messages (i.e. updates) from the IMAP server are // available and waiting to be read. // const wchar_t *idleCheck(int timeoutMs); // Creates an asynchronous task to call the IdleCheck method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *IdleCheckAsync(int timeoutMs); // Sends a command to the IMAP server to stop receiving real-time updates. bool IdleDone(void); // Creates an asynchronous task to call the IdleDone method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *IdleDoneAsync(void); // Sends an IDLE command to the IMAP server to begin receiving real-time updates. bool IdleStart(void); // Creates an asynchronous task to call the IdleStart method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *IdleStartAsync(void); // Returns the last known connected state with the IMAP server. IsConnected does // not send a message to the IMAP server to determine if it is still connected. The // Noop method may be called to specifically send a no-operation message to // determine actual connectivity. // // The IsConnected method is useful for checking to see if the component is already // in a known disconnected state. // bool IsConnected(void); // Returns true if already logged into an IMAP server, otherwise returns false. bool IsLoggedIn(void); // This method is deprecated. Applications should instead call MbxList . // // Returns a subset of the complete list of mailboxes available on the IMAP server. // This method has the side-effect of setting the SeparatorChar property to the // correct character used by the IMAP server, which is typically / or . . // // Note: The term mailbox and folder are synonymous. Whenever the word mailbox is // used, it has the same meaning as folder . // // The reference and wildcardedMailbox parameters are passed unaltered to the IMAP // LIST command:FROM RFC 3501 (IMAP Protocol) // // The LIST command returns a subset of names from the complete set // of all names available to the client. Zero or more untagged LIST // replies are returned, containing the name attributes, hierarchy // delimiter, and name; see the description of the LIST reply for // more detail. // // An empty ("" string) reference name argument indicates that the // mailbox name is interpreted as by SELECT. The returned mailbox // names MUST match the supplied mailbox name pattern. A non-empty // reference name argument is the name of a mailbox or a level of // mailbox hierarchy, and indicates the context in which the mailbox // name is interpreted. // // An empty ("" string) mailbox name argument is a special request to // return the hierarchy delimiter and the root name of the name given // in the reference. The value returned as the root MAY be the empty // string if the reference is non-rooted or is an empty string. In // all cases, a hierarchy delimiter (or NIL if there is no hierarchy) // is returned. This permits a client to get the hierarchy delimiter // (or find out that the mailbox names are flat) even when no // mailboxes by that name currently exist. // // The reference and mailbox name arguments are interpreted into a // canonical form that represents an unambiguous left-to-right // hierarchy. The returned mailbox names will be in the interpreted // form. // // Note: The interpretation of the reference argument is // implementation-defined. It depends upon whether the // server implementation has a concept of the "current // working directory" and leading "break out characters", // which override the current working directory. // // For example, on a server which exports a UNIX or NT // filesystem, the reference argument contains the current // working directory, and the mailbox name argument would // contain the name as interpreted in the current working // directory. // // If a server implementation has no concept of break out // characters, the canonical form is normally the reference // name appended with the mailbox name. Note that if the // server implements the namespace convention (section // 5.1.2), "#" is a break out character and must be treated // as such. // // If the reference argument is not a level of mailbox // hierarchy (that is, it is a \NoInferiors name), and/or // the reference argument does not end with the hierarchy // delimiter, it is implementation-dependent how this is // interpreted. For example, a reference of "foo/bar" and // mailbox name of "rag/baz" could be interpreted as // "foo/bar/rag/baz", "foo/barrag/baz", or "foo/rag/baz". // A client SHOULD NOT use such a reference argument except // at the explicit request of the user. A hierarchical // browser MUST NOT make any assumptions about server // interpretation of the reference unless the reference is // a level of mailbox hierarchy AND ends with the hierarchy // delimiter. // // Any part of the reference argument that is included in the // interpreted form SHOULD prefix the interpreted form. It SHOULD // also be in the same form as the reference name argument. This // rule permits the client to determine if the returned mailbox name // is in the context of the reference argument, or if something about // the mailbox argument overrode the reference argument. Without // this rule, the client would have to have knowledge of the server's // naming semantics including what characters are "breakouts" that // override a naming context. // // For example, here are some examples of how references // and mailbox names might be interpreted on a UNIX-based // server: // // Reference Mailbox Name Interpretation // ------------ ------------ -------------- // ~smith/Mail/ foo.* ~smith/Mail/foo.* // archive/ % archive/% // #news. comp.mail.* #news.comp.mail.* // ~smith/Mail/ /usr/doc/foo /usr/doc/foo // archive/ ~fred/Mail/* ~fred/Mail/* // // The first three examples demonstrate interpretations in // the context of the reference argument. Note that // "~smith/Mail" SHOULD NOT be transformed into something // like "/u2/users/smith/Mail", or it would be impossible // for the client to determine that the interpretation was // in the context of the reference. // // The character "*" is a wildcard, and matches zero or more // characters at this position. The character "%" is similar to "*", // but it does not match a hierarchy delimiter. If the "%" wildcard // is the last character of a mailbox name argument, matching levels // of hierarchy are also returned. If these levels of hierarchy are // not also selectable mailboxes, they are returned with the // \Noselect mailbox name attribute (see the description of the LIST // response for more details). // // Server implementations are permitted to "hide" otherwise // accessible mailboxes from the wildcard characters, by preventing // certain characters or names from matching a wildcard in certain // situations. For example, a UNIX-based server might restrict the // interpretation of "*" so that an initial "/" character does not // match. // // The special name INBOX is included in the output from LIST, if // INBOX is supported by this server for this user and if the // uppercase string "INBOX" matches the interpreted reference and // mailbox name arguments with wildcards as described above. The // criteria for omitting INBOX is whether SELECT INBOX will return // failure; it is not relevant whether the user's real INBOX resides // on this or some other server. // // The caller is responsible for deleting the object returned by this method. CkMailboxesW *ListMailboxes(const wchar_t *reference, const wchar_t *wildcardedMailbox); // Creates an asynchronous task to call the ListMailboxes method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *ListMailboxesAsync(const wchar_t *reference, const wchar_t *wildcardedMailbox); // This method is deprecated. Applications should instead call MbxList . // // The same as ListMailboxes, but returns only the subscribed mailboxes. (See // ListMailboxes for more information.) // // The caller is responsible for deleting the object returned by this method. CkMailboxesW *ListSubscribed(const wchar_t *reference, const wchar_t *wildcardedMailbox); // Creates an asynchronous task to call the ListSubscribed method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *ListSubscribedAsync(const wchar_t *reference, const wchar_t *wildcardedMailbox); // Loads the caller of the task's async method. bool LoadTaskCaller(CkTaskW &task); // Logs into the IMAP server. The component must first be connected to an IMAP // server by calling Connect. If XOAUTH2 authentication is required, pass the // XOAUTH2 access token in place of the password. (For GMail, the Chilkat HTTP // class/object's G_SvcOauthAccessToken method can be called to obtain an XOAUTH2 // access token.) // // To authenticate using XOAUTH2, make sure the AuthMethod property is set to // XOAUTH2 . The XOAUTH2 authentication functionality was added in version // 9.5.0.44. // bool Login(const wchar_t *loginName, const wchar_t *password); // Creates an asynchronous task to call the Login method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *LoginAsync(const wchar_t *loginName, const wchar_t *password); // The same as Login, except the login name and password are passed as secure // strings. bool LoginSecure(CkSecureStringW &loginName, CkSecureStringW &password); // Creates an asynchronous task to call the LoginSecure method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *LoginSecureAsync(CkSecureStringW &loginName, CkSecureStringW &password); // Logs out of the IMAP server. bool Logout(void); // Creates an asynchronous task to call the Logout method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *LogoutAsync(void); // Queries the IMAP server to retrieve the mailboxes in mboxes. If subscribed is true, // only subscribed mailboxes are included. // // The reference acts as a base path or context for interpreting the second argument. It // is typically set to (empty string) or the current directory. It allows for // relative mailbox naming. // // The mbxPattern is a wildcard pattern (similar to globbing) that defines which // mailboxes to return. It uses wildcards. // * * matches zero or more levels of hierarchy (e.g., * or INBOX/*) // * % matches one level of hierarchy (e.g., INBOX/%) // // For example: // * If reference = and mbxPattern = * then lists all mailboxes from the root (absolute // path). // * If reference = and mbxPattern = % then lists only top-level mailboxes (one level // deep). // * If reference = INBOX. and mbxPattern = * then lists all folders under INBOX. (e.g., // INBOX.Sent, INBOX.Archive) // // Note: This method has the side-effect of setting the SeparatorChar property to // the correct character used by the IMAP server, which is typically / or . . // bool MbxList(bool subscribed, const wchar_t *reference, const wchar_t *mbxPattern, CkMailboxesW &mboxes); // Creates an asynchronous task to call the MbxList method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *MbxListAsync(bool subscribed, const wchar_t *reference, const wchar_t *mbxPattern, CkMailboxesW &mboxes); // Moves a set of messages from one mailbox to another. Note: This is only possible // if the IMAP server supports the MOVE extension. The messageSet contains message UIDs // or sequence numbers for messages in the currently selected mailbox. The destFolder is // the destination mailbox/folder. bool MoveMessages(CkMessageSetW &messageSet, const wchar_t *destFolder); // Creates an asynchronous task to call the MoveMessages method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *MoveMessagesAsync(CkMessageSetW &messageSet, const wchar_t *destFolder); // Sends a NOOP command to the IMAP server and receives the response. The component // must be connected and authenticated for this to succeed. Sending a NOOP is a // good way of determining whether the connection to the IMAP server is up and // active. bool Noop(void); // Creates an asynchronous task to call the Noop method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *NoopAsync(void); // Searches the selected mailbox for messages matching criteria and returns a message // set of all matches. If bUid is true, UIDs are returned; otherwise, sequence // numbers are returned. // // See the information at the link below which explains the IMAP search criteria // // The criteria can be set to a special value new-email to check for new messages. When // the criteria equals new-email , this method detects new emails received since the // mailbox was last selected or since the previous QueryMbx call, whichever is more // recent. It operates by closing and reopening the current mailbox and issuing a // SEARCH command for recent emails or those with a UID greater than the UIDNEXT // value. It then returns a message set object containing the UIDs of the new // emails, which can be used with methods like FetchMsgSet to download them. // // If the SortCriteria property is non-empty, then this method sends a SORT command // instead of a SEARCH command. It can be used to request search results in a // specific order. However only IMAP servers that include SORT in the CAPABILITY // list have this feature. // // Note: The SearchCharset property applies to IMAP searches. // bool QueryMbx(const wchar_t *criteria, bool bUid, CkMessageSetW &msgSet); // Creates an asynchronous task to call the QueryMbx method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *QueryMbxAsync(const wchar_t *criteria, bool bUid, CkMessageSetW &msgSet); // Sends the THREAD command to search the already selected mailbox for messages // that match bUid. // // The following explanation is from RFC 5256 : // // The THREAD command is a variant of SEARCH with threading semantics // for the results. Thread has two arguments before the searching // criteria argument: a threading algorithm and the searching // charset. // // The THREAD command first searches the mailbox for messages that // match the given searching criteria using the charset argument for // the interpretation of strings in the searching criteria. It then // returns the matching messages in an untagged THREAD response, // threaded according to the specified threading algorithm. // // All collation is in ascending order. Earlier dates collate before // later dates and strings are collated according to ascending values. // // The defined threading algorithms are as follows: // // ORDEREDSUBJECT // // The ORDEREDSUBJECT threading algorithm is also referred to as // "poor man's threading". The searched messages are sorted by // base subject and then by the sent date. The messages are then // split into separate threads, with each thread containing // messages with the same base subject text. Finally, the threads // are sorted by the sent date of the first message in the thread. // // The top level or "root" in ORDEREDSUBJECT threading contains // the first message of every thread. All messages in the root // are siblings of each other. The second message of a thread is // the child of the first message, and subsequent messages of the // thread are siblings of the second message and hence children of // the message at the root. Hence, there are no grandchildren in // ORDEREDSUBJECT threading. // // Children in ORDEREDSUBJECT threading do not have descendents. // Client implementations SHOULD treat descendents of a child in a // server response as being siblings of that child. // // REFERENCES // // The REFERENCES threading algorithm threads the searched // messages by grouping them together in parent/child // relationships based on which messages are replies to others. // The parent/child relationships are built using two methods: // reconstructing a message's ancestry using the references // contained within it; and checking the original (not base) // subject of a message to see if it is a reply to (or forward of) // another message. // // // See RFC 5256 for more details: // // The searchCriteria is passed through to the low-level IMAP protocol unmodified, and // therefore the rules for the IMAP SEARCH command (RFC 3501) apply. See the // documentation for the Search method for more details (and also see RFC 3501). // // The results are returned in a JSON object to make it easy to parse the // parent/child relationships. See the example below for details. // // // References: // 1: https://tools.ietf.org/html/rfc5256 bool QueryThread(const wchar_t *threadAlg, const wchar_t *searchCriteria, bool bUid, CkJsonObjectW &json); // Creates an asynchronous task to call the QueryThread method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *QueryThreadAsync(const wchar_t *threadAlg, const wchar_t *searchCriteria, bool bUid, CkJsonObjectW &json); // Sends the raw command contained in bdCmd and returns the response in bdResp. bool RawCommandBd(CkBinDataW &bdCmd, CkBinDataW &bdResp); // Creates an asynchronous task to call the RawCommandBd method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *RawCommandBdAsync(CkBinDataW &bdCmd, CkBinDataW &bdResp); // Fetches the flags for an email and updates the flags in the email's header. When // an email is retrieved from the IMAP server, it embeds the flags into the header // in fields beginning with ckx- . Methods such as GetMailFlag read these header // fields. bool RefetchMailFlags(CkEmailW &email); // Creates an asynchronous task to call the RefetchMailFlags method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *RefetchMailFlagsAsync(CkEmailW &email); // Renames a mailbox. Can also be used to move a mailbox from one location to // another. For example, from Inbox.parent.test to Inbox.newParent.test , or from // abc.xyz to def.qrs . bool RenameMailbox(const wchar_t *fromMailbox, const wchar_t *toMailbox); // Creates an asynchronous task to call the RenameMailbox method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *RenameMailboxAsync(const wchar_t *fromMailbox, const wchar_t *toMailbox); // This method is deprecated. Applications should instead call QueryMbx . // // Searches the already selected mailbox for messages that match criteria and returns a // message set of all matching messages. If bUid is true, then UIDs are returned // in the message set, otherwise sequence numbers are returned. // // Note: It seems that Microsoft IMAP servers, such as outlook.office365.com and // imap-mail.outlook.com do not support anything other than 7bit us-ascii chars in // the search criteria string, regardless of the SEARCH charset that might be // specified. // // The criteria is passed through to the low-level IMAP protocol unmodified, so the // rules for the IMAP SEARCH command (RFC 3501) apply and are reproduced here:FROM RFC 3501 (IMAP Protocol) // // The SEARCH command searches the mailbox for messages that match // the given searching criteria. Searching criteria consist of one // or more search keys. The untagged SEARCH response from the server // contains a listing of message sequence numbers corresponding to // those messages that match the searching criteria. // // When multiple keys are specified, the result is the intersection // (AND function) of all the messages that match those keys. For // example, the criteria DELETED FROM "SMITH" SINCE 1-Feb-1994 refers // to all deleted messages from Smith that were placed in the mailbox // since February 1, 1994. A search key can also be a parenthesized // list of one or more search keys (e.g., for use with the OR and NOT // keys). // // Server implementations MAY exclude [MIME-IMB] body parts with // terminal content media types other than TEXT and MESSAGE from // consideration in SEARCH matching. // // The OPTIONAL [CHARSET] specification consists of the word // "CHARSET" followed by a registered [CHARSET]. It indicates the // [CHARSET] of the strings that appear in the search criteria. // [MIME-IMB] content transfer encodings, and [MIME-HDRS] strings in // [RFC-2822]/[MIME-IMB] headers, MUST be decoded before comparing // text in a [CHARSET] other than US-ASCII. US-ASCII MUST be // supported; other [CHARSET]s MAY be supported. // // If the server does not support the specified [CHARSET], it MUST // return a tagged NO response (not a BAD). This response SHOULD // contain the BADCHARSET response code, which MAY list the // [CHARSET]s supported by the server. // // In all search keys that use strings, a message matches the key if // the string is a substring of the field. The matching is // case-insensitive. // // The defined search keys are as follows. Refer to the Formal // Syntax section for the precise syntactic definitions of the // arguments. // // // Messages with message sequence numbers corresponding to the // specified message sequence number set. // // ALL // All messages in the mailbox; the default initial key for // ANDing. // // ANSWERED // Messages with the \Answered flag set. // // BCC // Messages that contain the specified string in the envelope // structure's BCC field. // // BEFORE // Messages whose internal date (disregarding time and timezone) // is earlier than the specified date. // // BODY // Messages that contain the specified string in the body of the // message. // // CC // Messages that contain the specified string in the envelope // structure's CC field. // // DELETED // Messages with the \Deleted flag set. // // DRAFT // Messages with the \Draft flag set. // // FLAGGED // Messages with the \Flagged flag set. // // FROM // Messages that contain the specified string in the envelope // structure's FROM field. // // HEADER // Messages that have a header with the specified field-name (as // defined in [RFC-2822]) and that contains the specified string // in the text of the header (what comes after the colon). If the // string to search is zero-length, this matches all messages that // have a header line with the specified field-name regardless of // the contents. // // KEYWORD // Messages with the specified keyword flag set. // // LARGER // Messages with an [RFC-2822] size larger than the specified // number of octets. // // NEW // Messages that have the \Recent flag set but not the \Seen flag. // This is functionally equivalent to "(RECENT UNSEEN)". // // NOT // Messages that do not match the specified search key. // // OLD // Messages that do not have the \Recent flag set. This is // functionally equivalent to "NOT RECENT" (as opposed to "NOT // NEW"). // // ON // Messages whose internal date (disregarding time and timezone) // is within the specified date. // // OR // Messages that match either search key. // // RECENT // Messages that have the \Recent flag set. // // SEEN // Messages that have the \Seen flag set. // // SENTBEFORE // Messages whose [RFC-2822] Date: header (disregarding time and // timezone) is earlier than the specified date. // // SENTON // Messages whose [RFC-2822] Date: header (disregarding time and // timezone) is within the specified date. // // SENTSINCE // Messages whose [RFC-2822] Date: header (disregarding time and // timezone) is within or later than the specified date. // // SINCE // Messages whose internal date (disregarding time and timezone) // is within or later than the specified date. // // SMALLER // Messages with an [RFC-2822] size smaller than the specified // number of octets. // // SUBJECT // Messages that contain the specified string in the envelope // structure's SUBJECT field. // // TEXT // Messages that contain the specified string in the header or // body of the message. // // TO // Messages that contain the specified string in the envelope // structure's TO field. // // UID // Messages with unique identifiers corresponding to the specified // unique identifier set. Sequence set ranges are permitted. // // UNANSWERED // Messages that do not have the \Answered flag set. // // UNDELETED // Messages that do not have the \Deleted flag set. // // UNDRAFT // Messages that do not have the \Draft flag set. // // UNFLAGGED // Messages that do not have the \Flagged flag set. // // UNKEYWORD // Messages that do not have the specified keyword flag set. // // UNSEEN // Messages that do not have the \Seen flag set. // // The caller is responsible for deleting the object returned by this method. CkMessageSetW *Search(const wchar_t *criteria, bool bUid); // Creates an asynchronous task to call the Search method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SearchAsync(const wchar_t *criteria, bool bUid); // Selects a mailbox. A mailbox must be selected before some methods, such as // Search or FetchSingle, can be called. If the logged-on user does not have // write-access to the mailbox, call ExamineMailbox instead. // // Calling this method updates the NumMessages property. // // Note: The term mailbox and folder are synonymous. Whenever the word mailbox is // used, it has the same meaning as folder . // bool SelectMailbox(const wchar_t *mailbox); // Creates an asynchronous task to call the SelectMailbox method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SelectMailboxAsync(const wchar_t *mailbox); // Allows for the sending of arbitrary commands to the IMAP server. bool SendRawCommand(const wchar_t *cmd, CkString &outRawResponse); // Allows for the sending of arbitrary commands to the IMAP server. const wchar_t *sendRawCommand(const wchar_t *cmd); // Creates an asynchronous task to call the SendRawCommand method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SendRawCommandAsync(const wchar_t *cmd); // The same as SendRawCommand, but instead of returning the response as a string, // the binary bytes of the response are returned. bool SendRawCommandB(const wchar_t *cmd, CkByteData &outBytes); // Creates an asynchronous task to call the SendRawCommandB method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SendRawCommandBAsync(const wchar_t *cmd); // The same as SendRawCommandB, except that the command is provided as binary bytes // rather than a string. bool SendRawCommandC(CkByteData &cmd, CkByteData &outBytes); // Creates an asynchronous task to call the SendRawCommandC method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SendRawCommandCAsync(CkByteData &cmd); // Explicitly specifies the certificate to be used for decrypting encrypted email. bool SetDecryptCert(CkCertW &cert); // Used to explicitly specify the certificate and associated private key to be used // for decrypting S/MIME (PKCS7) email. bool SetDecryptCert2(CkCertW &cert, CkPrivateKeyW &key); // Sets a flag for a single message on the IMAP server. If value = 1, the flag is // turned on, if value = 0, the flag is turned off. Standard system flags such as // \Deleted , \Seen , \Answered , \Flagged , \Draft , and \Answered may be set. // Custom flags such as NonJunk , $label1 , $MailFlagBit1 , etc. may also be set. // // If bUid is true, then msgId represents a UID. If bUid is false, then msgId // represents a sequence number. // bool SetFlag(unsigned long msgId, bool bUid, const wchar_t *flagName, int value); // Creates an asynchronous task to call the SetFlag method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SetFlagAsync(unsigned long msgId, bool bUid, const wchar_t *flagName, int value); // Sets a flag for each message in the message set on the IMAP server. If value = 1, // the flag is turned on, if value = 0, the flag is turned off. Standard system // flags such as \Deleted , \Seen , \Answered , \Flagged , \Draft , and \Answered // may be set. Custom flags such as NonJunk , $label1 , $MailFlagBit1 , etc. may // also be set. bool SetFlags(CkMessageSetW &messageSet, const wchar_t *flagName, int value); // Creates an asynchronous task to call the SetFlags method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SetFlagsAsync(CkMessageSetW &messageSet, const wchar_t *flagName, int value); // Sets a flag for a single message on the IMAP server. The UID of the email object // is used to find the message on the IMAP server that is to be affected. If value = // 1, the flag is turned on, if value = 0, the flag is turned off. // // Both standard system flags as well as custom flags may be set. Standard system // flags typically begin with a backslash character, such as \Deleted , \Seen , // \Answered , \Flagged , \Draft , and \Answered . Custom flags can be anything, // such as NonJunk , $label1 , $MailFlagBit1 , etc. . // // Note: When the Chilkat IMAP component downloads an email from an IMAP server, it // inserts a ckx-imap-uid header field in the email object. This is subsequently // used by this method to get the UID associated with the email. The ckx-imap-uid // header must be present for this method to be successful. // // Note: Calling this method is identical to calling the SetFlag method, except the // UID is automatically obtained from the email object. // // Important: Setting the Deleted flag does not remove the email from the mailbox. // Emails marked Deleted are removed when the Expunge method is called. // bool SetMailFlag(CkEmailW &email, const wchar_t *flagName, int value); // Creates an asynchronous task to call the SetMailFlag method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SetMailFlagAsync(CkEmailW &email, const wchar_t *flagName, int value); // Sets the quota for a quotaRoot. The resource should be one of two keywords: STORAGE or // MESSAGE . Use STORAGE to set the maximum capacity of the combined messages in // quotaRoot. Use MESSAGE to set the maximum number of messages allowed. // // If setting a STORAGE quota, the quota is in units of 1024 octets. For example, to // specify a limit of 500,000,000 bytes, set quota equal to 500,000. // // This feature is only possible with IMAP servers that support the QUOTA // extension/capability. If an IMAP server supports the QUOTA extension, it likely // supports the STORAGE resource. The MESSAGE resource is less commonly supported. // bool SetQuota(const wchar_t *quotaRoot, const wchar_t *resource, int quota); // Creates an asynchronous task to call the SetQuota method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SetQuotaAsync(const wchar_t *quotaRoot, const wchar_t *resource, int quota); // Specifies a client-side certificate to be used for the SSL / TLS connection. In // most cases, servers do not require client-side certificates for SSL/TLS. A // client-side certificate is typically used in high-security situations where the // certificate is an additional means to indentify the client to the server. bool SetSslClientCert(CkCertW &cert); // (Same as SetSslClientCert, but allows a .pfx/.p12 file to be used directly) // Specifies a client-side certificate to be used for the SSL / TLS connection. In // most cases, servers do not require client-side certificates for SSL/TLS. A // client-side certificate is typically used in high-security situations where the // certificate is an additional means to indentify the client to the server. // // The pemDataOrFilename may contain the actual PEM data, or it may contain the path of the PEM // file. This method will automatically recognize whether it is a path or the PEM // data itself. // bool SetSslClientCertPem(const wchar_t *pemDataOrFilename, const wchar_t *pemPassword); // (Same as SetSslClientCert, but allows a .pfx/.p12 file to be used directly) // Specifies a client-side certificate to be used for the SSL / TLS connection. In // most cases, servers do not require client-side certificates for SSL/TLS. A // client-side certificate is typically used in high-security situations where the // certificate is an additional means to indentify the client to the server. bool SetSslClientCertPfx(const wchar_t *pfxFilename, const wchar_t *pfxPassword); // This method is deprecated. Applications should instead call QueryMbx . // // Searches the already selected mailbox for messages that match searchCriteria and returns a // message set of all matching messages in the order specified by sortCriteria. If bUid is // true, then UIDs are returned in the message set, otherwise sequence numbers // are returned. // // The sortCriteria is a string of SPACE separated keywords to indicate sort order (default // is ascending). The keyword REVERSE can precede a keyword to reverse the sort // order (i.e. make it descending). Possible sort keywords are: // * ARRIVAL // * CC // * DATE // * FROM // * SIZE // * SUBJECT // * TO // // Some examples of sortCriteria are: // * SUBJECT REVERSE DATE // * REVERSE SIZE // * ARRIVAL // // * The searchCriteria is passed through to the low-level IMAP protocol unmodified, and // therefore the rules for the IMAP SEARCH command (RFC 3501) apply. See the // documentation for the Search method for more details (and also see RFC 3501). // // The caller is responsible for deleting the object returned by this method. CkMessageSetW *Sort(const wchar_t *sortCriteria, const wchar_t *charset, const wchar_t *searchCriteria, bool bUid); // Creates an asynchronous task to call the Sort method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SortAsync(const wchar_t *sortCriteria, const wchar_t *charset, const wchar_t *searchCriteria, bool bUid); // Authenticates with the SSH server using public-key authentication. The // corresponding public key must have been installed on the SSH server for the // sshLogin. Authentication will succeed if the matching privateKey is provided. // // Important: When reporting problems, please send the full contents of the // LastErrorText property to support@chilkatsoft.com. // bool SshAuthenticatePk(const wchar_t *sshLogin, CkSshKeyW &privateKey); // Creates an asynchronous task to call the SshAuthenticatePk method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SshAuthenticatePkAsync(const wchar_t *sshLogin, CkSshKeyW &privateKey); // Authenticates with the SSH server using a sshLogin and sshPassword. // // An SSH tunneling (port forwarding) session always begins by first calling // SshTunnel to connect to the SSH server, then calling either AuthenticatePw or // AuthenticatePk to authenticate. Following this, your program should call Connect // to connect with the IMAP server (via the SSH tunnel) and then Login to // authenticate with the IMAP server. // // Note: Once the SSH tunnel is setup by calling SshTunnel and SshAuthenticatePw // (or SshAuthenticatePk), all underlying communcations with the IMAP server use // the SSH tunnel. No changes in programming are required other than making two // initial calls to setup the tunnel. // // Important: When reporting problems, please send the full contents of the // LastErrorText property to support@chilkatsoft.com. // bool SshAuthenticatePw(const wchar_t *sshLogin, const wchar_t *sshPassword); // Creates an asynchronous task to call the SshAuthenticatePw method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SshAuthenticatePwAsync(const wchar_t *sshLogin, const wchar_t *sshPassword); // Closes the SSH tunnel previously opened by SshOpenTunnel. bool SshCloseTunnel(void); // Creates an asynchronous task to call the SshCloseTunnel method with the // arguments provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SshCloseTunnelAsync(void); // Connects to an SSH server and creates a tunnel for IMAP. The sshHostname is the // hostname (or IP address) of the SSH server. The sshPort is typically 22, which is // the standard SSH port number. // // An SSH tunneling (port forwarding) session always begins by first calling // SshOpenTunnel to connect to the SSH server, followed by calling either // SshAuthenticatePw or SshAuthenticatePk to authenticate. Your program would then // call Connect to connect with the IMAP server (via the SSH tunnel) and then Login // to authenticate with the IMAP server. // // Note: Once the SSH tunnel is setup by calling SshOpenTunnel and // SshAuthenticatePw (or SshAuthenticatePk), all underlying communcations with the // IMAP server use the SSH tunnel. No changes in programming are required other // than making two initial calls to setup the tunnel. // // Important: When reporting problems, please send the full contents of the // LastErrorText property to support@chilkatsoft.com. // bool SshOpenTunnel(const wchar_t *sshHostname, int sshPort); // Creates an asynchronous task to call the SshOpenTunnel method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SshOpenTunnelAsync(const wchar_t *sshHostname, int sshPort); // Sets one or more flags to a specific value for an email. The email is indicated // by either a UID or sequence number, depending on whether bUid is true (UID) or // false (sequence number). // // flagNames should be a space separated string of flag names. Both standard and // customer flags may be set. Standard flag names typically begin with a backslash // character. For example: \Seen \Answered . Custom flag names may also be // included. Custom flags often begin with a $ character, such as $label1 , or // $MailFlagBit0 . Other customer flags may begin with any character, such as // NonJunk . // // value should be 1 to turn the flags on, or 0 to turn the flags off. // bool StoreFlags(unsigned long msgId, bool bUid, const wchar_t *flagNames, int value); // Creates an asynchronous task to call the StoreFlags method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *StoreFlagsAsync(unsigned long msgId, bool bUid, const wchar_t *flagNames, int value); // Subscribe to an IMAP mailbox. // // Note: The term mailbox and folder are synonymous. Whenever the word mailbox is // used, it has the same meaning as folder . // bool Subscribe(const wchar_t *mailbox); // Creates an asynchronous task to call the Subscribe method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *SubscribeAsync(const wchar_t *mailbox); // This method is deprecated. Applications should instead call QueryThread . // // Sends the THREAD command to search the already selected mailbox for messages // that match searchCriteria. // // The following explanation is from RFC 5256 : // // The THREAD command is a variant of SEARCH with threading semantics // for the results. Thread has two arguments before the searching // criteria argument: a threading algorithm and the searching // charset. // // The THREAD command first searches the mailbox for messages that // match the given searching criteria using the charset argument for // the interpretation of strings in the searching criteria. It then // returns the matching messages in an untagged THREAD response, // threaded according to the specified threading algorithm. // // All collation is in ascending order. Earlier dates collate before // later dates and strings are collated according to ascending values. // // The defined threading algorithms are as follows: // // ORDEREDSUBJECT // // The ORDEREDSUBJECT threading algorithm is also referred to as // "poor man's threading". The searched messages are sorted by // base subject and then by the sent date. The messages are then // split into separate threads, with each thread containing // messages with the same base subject text. Finally, the threads // are sorted by the sent date of the first message in the thread. // // The top level or "root" in ORDEREDSUBJECT threading contains // the first message of every thread. All messages in the root // are siblings of each other. The second message of a thread is // the child of the first message, and subsequent messages of the // thread are siblings of the second message and hence children of // the message at the root. Hence, there are no grandchildren in // ORDEREDSUBJECT threading. // // Children in ORDEREDSUBJECT threading do not have descendents. // Client implementations SHOULD treat descendents of a child in a // server response as being siblings of that child. // // REFERENCES // // The REFERENCES threading algorithm threads the searched // messages by grouping them together in parent/child // relationships based on which messages are replies to others. // The parent/child relationships are built using two methods: // reconstructing a message's ancestry using the references // contained within it; and checking the original (not base) // subject of a message to see if it is a reply to (or forward of) // another message. // // // See RFC 5256 for more details: // // The searchCriteria is passed through to the low-level IMAP protocol unmodified, and // therefore the rules for the IMAP SEARCH command (RFC 3501) apply. See the // documentation for the Search method for more details (and also see RFC 3501). // // The results are returned in a JSON object to make it easy to parse the // parent/child relationships. See the example below for details. // // // References: // 1: https://tools.ietf.org/html/rfc5256 // The caller is responsible for deleting the object returned by this method. CkJsonObjectW *ThreadCmd(const wchar_t *threadAlg, const wchar_t *charset, const wchar_t *searchCriteria, bool bUid); // Creates an asynchronous task to call the ThreadCmd method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *ThreadCmdAsync(const wchar_t *threadAlg, const wchar_t *charset, const wchar_t *searchCriteria, bool bUid); // Unsubscribe from an IMAP mailbox. bool Unsubscribe(const wchar_t *mailbox); // Creates an asynchronous task to call the Unsubscribe method with the arguments // provided. // The caller is responsible for deleting the object returned by this method. CkTaskW *UnsubscribeAsync(const wchar_t *mailbox); // Adds an XML certificate vault to the object's internal list of sources to be // searched for certificates and private keys when encrypting/decrypting or // signing/verifying. Unlike the AddPfxSourceData and AddPfxSourceFile methods, // only a single XML certificate vault can be used. If UseCertVault is called // multiple times, only the last certificate vault will be used, as each call to // UseCertVault will replace the certificate vault provided in previous calls. bool UseCertVault(CkXmlCertVaultW &vault); // Uses an existing SSH tunnel for the connection to the IMAP server. This method // is identical to the UseSshTunnel method, except the SSH connection is obtained // from an SSH object instead of a Socket object. // // This is useful for sharing an existing SSH tunnel connection wth other objects. // (SSH is a protocol where the tunnel contains many logical channels. IMAP // connections can exist simultaneously with other connection within a single SSH // tunnel as SSH channels.) // bool UseSsh(CkSshW &ssh); // Uses an existing SSH tunnel. This is useful for sharing an existing SSH tunnel // connection wth other objects. (SSH is a protocol where the tunnel contains many // logical channels. IMAP connections can exist simultaneously with other // connection within a single SSH tunnel as SSH channels.) bool UseSshTunnel(CkSocketW &tunnel); // END PUBLIC INTERFACE }; #if !defined(__sun__) && !defined(__sun) #pragma pack (pop) #endif #endif