Imap C Library Reference

Imap

IMAP email C library.

Create/Dispose

HCkImap CkImap_Create(void);

Creates an instance of the CkImap object and returns a handle (i.e. a "void *" pointer). The handle is passed in the 1st argument for the functions listed on this page.

void CkImap_Dispose(HCkImap handle);

Objects created by calling CkImap_Create must be freed by calling this method. A memory leak occurs if a handle is not disposed by calling this function.

C "Properties"

BOOL CkImap_getAppendSeen(HCkImap cHandle);
void CkImap_putAppendSeen(HCkImap cHandle, 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.

int CkImap_getAppendUid(HCkImap cHandle);

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.)

void CkImap_getAuthMethod(HCkImap cHandle, HCkString retval);
void CkImap_putAuthMethod(HCkImap cHandle, const char *newVal);

Can be set to "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.

void CkImap_getAuthzId(HCkImap cHandle, HCkString retval);
void CkImap_putAuthzId(HCkImap cHandle, const char *newVal);

Applies to the PLAIN authentication methods. May be set to an authorization ID that is to be sent along with the Login and Password for authentication.

BOOL CkImap_getAutoUnwrapSecurity(HCkImap cHandle);
void CkImap_putAutoUnwrapSecurity(HCkImap cHandle, BOOL newVal);

When set to true, which is the default, security envelopes are automatically "unwrapped" when a message is retrieved from the server. Signed emails are automatically verified, and encrypted emails are automatically decrypted, restoring the email to the original state before signing and/or encrypting. Information about the signing and encrypting certificates can be retrieved from the Email object (methods: GetSignedByCert, GetEncryptedByCert; properties: SignedBy, EncryptedBy, SignaturesValid, Decrypted, ReceivedSigned, ReceivedEncrypted).

int CkImap_getConnectTimeout(HCkImap cHandle);
void CkImap_putConnectTimeout(HCkImap cHandle, int newVal);

Maximum number of seconds to wait when connecting to an IMAP server. The default value is 30 (units are in seconds).

void CkImap_getConnectedToHost(HCkImap cHandle, HCkString retval);

Return true if currently connected to an IMAP server.

void CkImap_getDomain(HCkImap cHandle, HCkString retval);
void CkImap_putDomain(HCkImap cHandle, const char *newVal);

The Windows Domain to use for Windows Integrated Authentication (also known as NTLM). This may be empty.

long CkImap_getHeartbeatMs(HCkImap cHandle);
void CkImap_putHeartbeatMs(HCkImap cHandle, long newVal);

This is the number of milliseconds between each AbortCheck event callback. The AbortCheck callback allows an application to abort any IMAP operation prior to completion. If HeartbeatMs is 0, no AbortCheck event callbacks will occur.

void CkImap_getHttpProxyAuthMethod(HCkImap cHandle, HCkString retval);
void CkImap_putHttpProxyAuthMethod(HCkImap cHandle, const char *newVal);

If an HTTP proxy requiring authentication is to be used, set this property to the HTTP proxy authentication method name. Valid choices are "LOGIN" or "NTLM".

void CkImap_getHttpProxyHostname(HCkImap cHandle, HCkString retval);
void CkImap_putHttpProxyHostname(HCkImap cHandle, const char *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 CkImap_getHttpProxyPassword(HCkImap cHandle, HCkString retval);
void CkImap_putHttpProxyPassword(HCkImap cHandle, const char *newVal);

If an HTTP proxy requiring authentication is to be used, set this property to the HTTP proxy password.

int CkImap_getHttpProxyPort(HCkImap cHandle);
void CkImap_putHttpProxyPort(HCkImap cHandle, int 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.)

void CkImap_getHttpProxyUsername(HCkImap cHandle, HCkString retval);
void CkImap_putHttpProxyUsername(HCkImap cHandle, const char *newVal);

If an HTTP proxy requiring authentication is to be used, set this property to the HTTP proxy login name.

BOOL CkImap_getKeepSessionLog(HCkImap cHandle);
void CkImap_putKeepSessionLog(HCkImap cHandle, BOOL 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.

void CkImap_getLastAppendedMime(HCkImap cHandle, HCkString retval);

The MIME source of the email last appended during a call to AppendMail, or AppendMime.

void CkImap_getLastCommand(HCkImap cHandle, HCkString retval);

The last raw command sent to the IMAP server. (This information can be used for debugging if problems occur.)

void CkImap_getLastErrorHtml(HCkImap cHandle, HCkString retval);

Returns the error log in HTML format for the last method called.Error information in HTML format for the last method called.

void CkImap_getLastErrorText(HCkImap cHandle, HCkString retval);

Returns the error log in plain-text format for the last method called.Error information in plain-text format for the last method called.

void CkImap_getLastErrorXml(HCkImap cHandle, HCkString retval);

Returns the error log in XML format for the last method called.Error information in XML format for the last method called.

void CkImap_getLastIntermediateResponse(HCkImap cHandle, HCkString retval);

The last intermediate response received from the IMAP server. (This information can be used for debugging if problems occur.)

void CkImap_getLastResponse(HCkImap cHandle, HCkString retval);

The raw data of the last response from the IMAP server. (Useful for debugging if problems occur.)

void CkImap_getLoggedInUser(HCkImap cHandle, HCkString retval);

If logged into an IMAP server, the logged-in username.

long CkImap_getNumMessages(HCkImap cHandle);

After selecting a mailbox (by calling SelectMailbox), this property will be updated to reflect the total number of emails in the mailbox.

BOOL CkImap_getPeekMode(HCkImap cHandle);
void CkImap_putPeekMode(HCkImap cHandle, BOOL newVal);

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.

int CkImap_getPort(HCkImap cHandle);
void CkImap_putPort(HCkImap cHandle, 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 CkImap_getReadTimeout(HCkImap cHandle);
void CkImap_putReadTimeout(HCkImap cHandle, int newVal);

The amount of time in seconds to wait during a stall before timing out when reading from an IMAP server. The ReadTimeout is the amount of time that needs to elapse while no additional data is forthcoming. During a long data transfer, if the data stream halts for more than this amount, it will timeout.

The default value is 30 seconds.

void CkImap_getSelectedMailbox(HCkImap cHandle, HCkString retval);

To be documented soon...

int CkImap_getSendBufferSize(HCkImap cHandle);
void CkImap_putSendBufferSize(HCkImap cHandle, int newVal);

The buffer size to be used with the underlying TCP/IP socket for sending. The default value is 32767.

char CkImap_getSeparatorChar(HCkImap cHandle);
void CkImap_putSeparatorChar(HCkImap cHandle, char newVal);

The separator character used by the IMAP server for the mailbox hierarchy.

void CkImap_getSessionLog(HCkImap cHandle, HCkString retval);

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 CkImap_getSocksHostname(HCkImap cHandle, HCkString retval);
void CkImap_putSocksHostname(HCkImap cHandle, const char *newVal);

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 CkImap_getSocksPassword(HCkImap cHandle, HCkString retval);
void CkImap_putSocksPassword(HCkImap cHandle, const char *newVal);

The SOCKS5 password (if required). The SOCKS4 protocol does not include the use of a password, so this does not apply to SOCKS4.

int CkImap_getSocksPort(HCkImap cHandle);
void CkImap_putSocksPort(HCkImap cHandle, int 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).

void CkImap_getSocksUsername(HCkImap cHandle, HCkString retval);
void CkImap_putSocksUsername(HCkImap cHandle, const char *newVal);

The SOCKS4/SOCKS5 proxy username. This property is only used if the SocksVersion property is set to 4 or 5).

int CkImap_getSocksVersion(HCkImap cHandle);
void CkImap_putSocksVersion(HCkImap cHandle, int 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.

BOOL CkImap_getSsl(HCkImap cHandle);
void CkImap_putSsl(HCkImap cHandle, BOOL newVal);

true if the IMAP connection should be SSL.

Note: The typical IMAP SSL port number is 993. If you set this property = true, it is likely that you should also set the Port property = 993.

void CkImap_getSslProtocol(HCkImap cHandle, HCkString retval);
void CkImap_putSslProtocol(HCkImap cHandle, const char *newVal);

Selects the secure protocol to be used for secure (SSL/TLS) implicit and explicit (StartTls) connections . Possible values are:

TLS 1.0
SSL 3.0
SSL 2.0
PCT 1.0
The default value is "TLS 1.0".

BOOL CkImap_getSslServerCertVerified(HCkImap cHandle);

Read-only property that returns true if the IMAP server's digital certificate was verified when connecting via SSL / TLS.

BOOL CkImap_getStartTls(HCkImap cHandle);
void CkImap_putStartTls(HCkImap cHandle, BOOL newVal);

To be documented soon...

int CkImap_getUidNext(HCkImap cHandle);

A positive integer value containing the UIDNEXT of the currently selected folder, or 0 if it's not available or no folder is selected.

BOOL CkImap_getUtf8(HCkImap cHandle);
void CkImap_putUtf8(HCkImap cHandle, BOOL newVal);

When set to true, all "const char *" arguments are expected to be utf-8 strings. If set to false, the "const char *" arguments are expected to be ANSI strings.

void CkImap_getVersion(HCkImap cHandle, HCkString retval);

The version of the component, such as "1.0.0".

C "Methods"

BOOL CkImap_AppendMail(HCkImap cHandle, const char *mailbox, HCkEmail email);

Appends an email to an IMAP mailbox.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_AppendMime(HCkImap cHandle, const char *mailbox, const char *mimeText);

Appends an email (represented as MIME text) to an IMAP mailbox.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_AppendMimeWithDate(HCkImap cHandle, const char *mailbox, const char *mimeText, SYSTEMTIME *internalDate);

To be documented soon.

BOOL CkImap_AppendMimeWithFlags(HCkImap cHandle, const char *mailbox, const char *mimeText, BOOL seen, BOOL flagged, BOOL answered, BOOL draft);

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.

Returns TRUE for success, FALSE for failure.

void CkImap_ClearSessionLog(HCkImap cHandle);

Clears the contents of the SessionLog property.

BOOL CkImap_Connect(HCkImap cHandle, const char *hostname);

Connects to an IMAP server, but does not login.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_Copy(HCkImap cHandle, long msgId, BOOL bUid, const char *copyToMailbox);

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.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_CopyMultiple(HCkImap cHandle, HCkMessageSet messageSet, const char *copyToMailbox);

Same as the Copy method, except an entire set of emails is copied at once. The set of emails is specified in messageSet.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_CopySequence(HCkImap cHandle, int startSeqNum, int count, const char *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.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_CreateMailbox(HCkImap cHandle, const char *mailbox);

Creates a new mailbox.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_DeleteMailbox(HCkImap cHandle, const char *mailbox);

Deletes an existing mailbox.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_Disconnect(HCkImap cHandle);

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.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_ExamineMailbox(HCkImap cHandle, const char *mailbox);

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.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_Expunge(HCkImap cHandle);

Permanently removes from the currently selected mailbox all messages that have the Deleted flag set.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_ExpungeAndClose(HCkImap cHandle);

Permanently removes from the currently selected mailbox all messages that have the Deleted flag set, and closes the mailbox.

Returns TRUE for success, FALSE for failure.

HCkEmailBundle CkImap_FetchBundle(HCkImap cHandle, HCkMessageSet messageSet);

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.

Returns a null reference on failure

HCkStringArray CkImap_FetchBundleAsMime(HCkImap cHandle, HCkMessageSet messageSet);

Retrieves a set of messages from the IMAP server and returns them in a string array object (NOTE: it does not return a string array, but an object that represents a string array.) Each string within the returned object is the complete MIME source of an email. On failure, a NULL object reference is returned.

Returns a null reference on failure

HCkEmailBundle CkImap_FetchChunk(HCkImap cHandle, int startSeqNum, int count, HCkMessageSet failedSet, HCkMessageSet fetchedSet);

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.

Returns a null reference on failure

BOOL CkImap_FetchFlags(HCkImap cHandle, long msgId, BOOL bUid, HCkString strFlags);

Fetches the flags for an email. The bUid argument determines whether the msgId argument is a UID or sequence number.

HCkEmailBundle CkImap_FetchHeaders(HCkImap cHandle, HCkMessageSet messageSet);

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.

Returns a null reference on failure

HCkEmailBundle CkImap_FetchSequence(HCkImap cHandle, int startSeqNum, int numMessages);

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.

Returns a null reference on failure

HCkStringArray CkImap_FetchSequenceAsMime(HCkImap cHandle, int startSeqNum, int count);

Same as FetchSequence, but instead of returning email objects in a bundle, the raw MIME of each email is returned.

Returns a null reference on failure

HCkEmailBundle CkImap_FetchSequenceHeaders(HCkImap cHandle, int startSeqNum, int numMessages);

Same as FetchSequence, but only the email headers are returned. The email objects within the bundle will be lacking bodies and attachments.

Returns a null reference on failure

HCkEmail CkImap_FetchSingle(HCkImap cHandle, long msgId, BOOL bUid);

Retrieves a single message from the IMAP server. If the method fails, it may return a NULL reference. If bUid is true, then msgID represents a UID. If bUid is false, then msgID represents a sequence number.

Returns a null reference on failure

BOOL CkImap_FetchSingleAsMime(HCkImap cHandle, long msgId, BOOL bUid, HCkString strMime);

Retrieves a single message from the IMAP server and returns a string containing the complete MIME source of the email. If the method fails, it returns a NULL reference. If bUid is true, then msgID represents a UID. If bUid is false, then msgID represents a sequence number.

HCkEmail CkImap_FetchSingleHeader(HCkImap cHandle, long msgId, BOOL bUid);

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.

Returns a null reference on failure

BOOL CkImap_FetchSingleHeaderAsMime(HCkImap cHandle, int msgId, BOOL bUID, HCkString outStr);

Fetches and returns the MIME of a single email header.

HCkMessageSet CkImap_GetAllUids(HCkImap cHandle);

Returns a message set object containing all the UIDs in the currently selected mailbox. A NULL object reference is returned on failure.

Returns a null reference on failure

BOOL CkImap_GetMailAttachFilename(HCkImap cHandle, HCkEmail email, long attachIndex, HCkString strFilename);

Returns the Nth attachment filename. Indexing begins at 0.

long CkImap_GetMailAttachSize(HCkImap cHandle, HCkEmail email, long attachIndex);

Returns the Nth attachment size in bytes. Indexing begins at 0.

long CkImap_GetMailFlag(HCkImap cHandle, HCkEmail email, const char *flagName);

Returns the value of a flag (true = yes, false = no) for an email. Valid flag names are "Seen", "Answered", "Draft", "Flagged", and "Deleted".

long CkImap_GetMailNumAttach(HCkImap cHandle, HCkEmail email);

Returns the number of email attachments.

long CkImap_GetMailSize(HCkImap cHandle, HCkEmail email);

Returns the size (in bytes) of the entire email including attachments.

HCkCert CkImap_GetSslServerCert(HCkImap cHandle);

Returns the IMAP server's digital certificate (for SSL / TLS connections).

BOOL CkImap_IsConnected(HCkImap cHandle);

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 CkImap_IsLoggedIn(HCkImap cHandle);

Returns true if already logged into an IMAP server, otherwise returns false.

BOOL CkImap_IsUnlocked(HCkImap cHandle);

Returns true if the component is unlocked, false if not.

void CkImap_LastResponse(HCkImap cHandle, HCkString str);

The raw data of the last response from the IMAP server. (Useful for debugging.)

HCkMailboxes CkImap_ListMailboxes(HCkImap cHandle, const char *reference, const char *wildcardedMailbox);

Returns a subset of the complete list of mailboxes available on the IMAP server. 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.

Returns a null reference on failure

BOOL CkImap_Login(HCkImap cHandle, const char *login, const char *password);

Logs into the IMAP server. The component must first be connected to an IMAP server by calling Connect.

BOOL CkImap_Logout(HCkImap cHandle);

Logs out of the IMAP server.

BOOL CkImap_Noop(HCkImap cHandle);

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.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_RefetchMailFlags(HCkImap cHandle, HCkEmail emailInOut);

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 and GetWebMailFlag read these header fields.

BOOL CkImap_RenameMailbox(HCkImap cHandle, const char *fromMailbox, const char *toMailbox);

Renames a mailbox.

BOOL CkImap_SaveLastError(HCkImap cHandle, const char *filename);

Saves the last error information to an XML formatted file.

HCkMessageSet CkImap_Search(HCkImap cHandle, const char *criteria, BOOL bUid);

Searches the selected mailbox for messages that meet a given 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. 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.

Returns a null reference on failure

BOOL CkImap_SelectMailbox(HCkImap cHandle, const char *mailbox);

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.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_SendRawCommand(HCkImap cHandle, const char *rawCommand, HCkString rawResponse);

Allows for the sending of arbitrary commands to the IMAP server.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_SetDecryptCert2(HCkImap cHandle, HCkCert cert, HCkPrivateKey key);

To be documented soon...

BOOL CkImap_SetFlag(HCkImap cHandle, long msgId, BOOL bUid, const char *flagName, long value);

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. Valid flag names are "Seen", "Answered", "Draft", "Flagged", and "Deleted".

If bUid is true, then msgId represents a UID. If bUid is false, then msgId represents a sequence number.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_SetFlags(HCkImap cHandle, HCkMessageSet messageSet, const char *flagName, long 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. Valid flag names are "Seen", "Answered", "Draft", "Flagged", and "Deleted".

Returns TRUE for success, FALSE for failure.

BOOL CkImap_SetMailFlag(HCkImap cHandle, HCkEmail email, const char *flagName, long 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.

Valid flag names are "Seen", "Answered", "Draft", "Flagged", and "Deleted".

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.

Returns TRUE for success, FALSE for failure.

void CkImap_SetSslClientCert(HCkImap cHandle, HCkCert cert);

Allows for a client-side certificate to be used for the SSL / TLS connection.

BOOL CkImap_SetSslClientCertPfx(HCkImap cHandle, const char *pfxFilename, const char *pfxPassword, const char *certSubjectCN);

To be documented soon...

BOOL CkImap_SshAuthenticatePk(HCkImap cHandle, const char *sshLogin, HCkSshKey privateKey);

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.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_SshAuthenticatePw(HCkImap cHandle, const char *sshLogin, const char *sshPassword);

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.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_SshTunnel(HCkImap cHandle, const char *sshServerHostname, int sshServerPort);

Connects to an SSH server and creates a tunnel for IMAP. The sshServerHostname 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 SshTunnel to connect to the SSH server, followed by calling either AuthenticatePw or AuthenticatePk 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 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.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_StoreFlags(HCkImap cHandle, long msgId, BOOL bUid, const char *flagName, long value);

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, where each flag name begins with a backslash character. For example: "\Seen \Answered". Possible flag names are \Seen, \Answered, \Flagged, \Deleted, and \Draft.

Note: The other methods, such as SetFlag, SetFlags, and SetMailFlag, require flag names without the leading backslash.

value should be 1 to turn the flags on, or 0 to turn the flags off.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_Subscribe(HCkImap cHandle, const char *mailbox);

Subscribe to an IMAP mailbox.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_UnlockComponent(HCkImap cHandle, const char *unlockCode);

Unlocks the component. This must be called once at the beginning of your program to unlock the component. A permanent unlock code is provided when the IMAP component is licensed. Any string, such as "Hello World", may be passed to this method to automatically begin a fully-functional 30-day trial.

Returns TRUE for success, FALSE for failure.

BOOL CkImap_Unsubscribe(HCkImap cHandle, const char *mailbox);

Unsubscribe from an IMAP mailbox.

Returns TRUE for success, FALSE for failure.

const char *CkImap_authMethod(HCkImap cHandle);

Can be set to "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.

const char *CkImap_authzId(HCkImap cHandle);

Applies to the PLAIN authentication methods. May be set to an authorization ID that is to be sent along with the Login and Password for authentication.

const char *CkImap_connectedToHost(HCkImap cHandle);

Return true if currently connected to an IMAP server.

const char *CkImap_domain(HCkImap cHandle);

The Windows Domain to use for Windows Integrated Authentication (also known as NTLM). This may be empty.

const char *CkImap_fetchFlags(HCkImap cHandle, long msgId, BOOL bUid);

Fetches the flags for an email. The bUid argument determines whether the msgId argument is a UID or sequence number.

const char *CkImap_fetchSingleAsMime(HCkImap cHandle, long msgId, BOOL bUid);

Retrieves a single message from the IMAP server and returns a string containing the complete MIME source of the email. If the method fails, it returns a NULL reference. If bUid is true, then msgID represents a UID. If bUid is false, then msgID represents a sequence number.

const char *CkImap_fetchSingleHeaderAsMime(HCkImap cHandle, int msgId, BOOL bUID);

Fetches and returns the MIME of a single email header.

const char *CkImap_getMailAttachFilename(HCkImap cHandle, HCkEmail email, long attachIndex);

Returns the Nth attachment filename. Indexing begins at 0.

const char *CkImap_httpProxyAuthMethod(HCkImap cHandle);

If an HTTP proxy requiring authentication is to be used, set this property to the HTTP proxy authentication method name. Valid choices are "LOGIN" or "NTLM".

const char *CkImap_httpProxyHostname(HCkImap cHandle);

If an HTTP proxy is to be used, set this property to the HTTP proxy hostname or IPv4 address (in dotted decimal notation).

const char *CkImap_httpProxyPassword(HCkImap cHandle);

If an HTTP proxy requiring authentication is to be used, set this property to the HTTP proxy password.

const char *CkImap_httpProxyUsername(HCkImap cHandle);

If an HTTP proxy requiring authentication is to be used, set this property to the HTTP proxy login name.

const char *CkImap_lastAppendedMime(HCkImap cHandle);

The MIME source of the email last appended during a call to AppendMail, or AppendMime.

const char *CkImap_lastCommand(HCkImap cHandle);

The last raw command sent to the IMAP server. (This information can be used for debugging if problems occur.)

const char *CkImap_lastErrorHtml(HCkImap cHandle);

Error information in HTML format for the last method called.

const char *CkImap_lastErrorText(HCkImap cHandle);

Error information in plain-text format for the last method called.

const char *CkImap_lastErrorXml(HCkImap cHandle);

Error information in XML format for the last method called.

const char *CkImap_lastIntermediateResponse(HCkImap cHandle);

The last intermediate response received from the IMAP server. (This information can be used for debugging if problems occur.)

const char *CkImap_lastResponse(HCkImap cHandle);

The raw data of the last response from the IMAP server. (Useful for debugging.)

const char *CkImap_loggedInUser(HCkImap cHandle);

If logged into an IMAP server, the logged-in username.

const char *CkImap_selectedMailbox(HCkImap cHandle);

To be documented soon...

const char *CkImap_sendRawCommand(HCkImap cHandle, const char *rawCommand);

Allows for the sending of arbitrary commands to the IMAP server.

Returns TRUE for success, FALSE for failure.

const char *CkImap_sessionLog(HCkImap cHandle);

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 char *CkImap_socksHostname(HCkImap cHandle);

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 char *CkImap_socksPassword(HCkImap cHandle);

The SOCKS5 password (if required). The SOCKS4 protocol does not include the use of a password, so this does not apply to SOCKS4.

const char *CkImap_socksUsername(HCkImap cHandle);

The SOCKS4/SOCKS5 proxy username. This property is only used if the SocksVersion property is set to 4 or 5).

const char *CkImap_sslProtocol(HCkImap cHandle);

Selects the secure protocol to be used for secure (SSL/TLS) implicit and explicit (StartTls) connections . Possible values are:

TLS 1.0
SSL 3.0
SSL 2.0
PCT 1.0
The default value is "TLS 1.0".

const char *CkImap_version(HCkImap cHandle);

The version of the component, such as "1.0.0".

Returns TRUE for success, FALSE for failure.