Sample code for 30+ languages & platforms
C

Check for IMAP IDLE Mailbox Updates

See more IMAP Examples

Demonstrates the Chilkat Imap.IdleCheck method, which waits for mailbox updates after IdleStart has entered IDLE mode. The only argument is a timeout in milliseconds; 0 performs a non-blocking poll of notifications already received. This example waits up to 30 seconds.

Background: IdleCheck consumes the notifications already waiting on the connection rather than sending a new polling command. A typical monitoring loop repeatedly calls IdleCheck with a timeout and reacts when updates arrive. Because servers usually drop an idle connection after about 29 minutes, long-lived monitors periodically call IdleDone and then IdleStart again to refresh it.

Chilkat C Downloads

C
#include <C_CkImap.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkImap imap;
    int timeoutMs;
    const char *updates;

    success = FALSE;

    //  Demonstrates the Imap.IdleCheck method, which waits for IMAP IDLE mailbox updates and returns
    //  them.  The only argument is a timeout in milliseconds.  Use 0 for a non-blocking poll.

    imap = CkImap_Create();

    CkImap_putSsl(imap,TRUE);
    CkImap_putPort(imap,993);

    success = CkImap_Connect(imap,"imap.example.com");
    if (success == FALSE) {
        printf("%s\n",CkImap_lastErrorText(imap));
        CkImap_Dispose(imap);
        return;
    }

    success = CkImap_Login(imap,"user@example.com","myPassword");
    if (success == FALSE) {
        printf("%s\n",CkImap_lastErrorText(imap));
        CkImap_Dispose(imap);
        return;
    }

    success = CkImap_SelectMailbox(imap,"Inbox");
    if (success == FALSE) {
        printf("%s\n",CkImap_lastErrorText(imap));
        CkImap_Dispose(imap);
        return;
    }

    success = CkImap_IdleStart(imap);
    if (success == FALSE) {
        printf("%s\n",CkImap_lastErrorText(imap));
        CkImap_Dispose(imap);
        return;
    }

    //  Wait up to 30 seconds for mailbox updates.  IdleCheck returns a string, so assign it to a
    //  string variable and check for success.
    timeoutMs = 30000;
    updates = CkImap_idleCheck(imap,timeoutMs);
    if (CkImap_getLastMethodSuccess(imap) == FALSE) {
        printf("%s\n",CkImap_lastErrorText(imap));
        CkImap_Dispose(imap);
        return;
    }

    printf("%s\n",updates);

    success = CkImap_IdleDone(imap);
    if (success == FALSE) {
        printf("%s\n",CkImap_lastErrorText(imap));
        CkImap_Dispose(imap);
        return;
    }

    success = CkImap_Disconnect(imap);
    if (success == FALSE) {
        printf("%s\n",CkImap_lastErrorText(imap));
        CkImap_Dispose(imap);
        return;
    }



    CkImap_Dispose(imap);

    }