Sample code for 30+ languages & platforms
PureBasic Requires Chilkat v11.0.0+

Subscribe to Mailboxes and List Subscribed Mailboxes

See more IMAP Examples

Demonstrates how to list subscribed mailboxes, and unsubscribe/subscribe to a mailbox.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkMailboxes.pb"
IncludeFile "CkImap.pb"

Procedure ChilkatExample()

    success.i = 0

    ;  This example assumes the Chilkat API to have been previously unlocked.
    ;  See Global Unlock Sample for sample code.

    imap.i = CkImap::ckCreate()
    If imap.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ;  Connect to an IMAP server.
    ;  Use TLS
    CkImap::setCkSsl(imap, 1)
    CkImap::setCkPort(imap, 993)
    success = CkImap::ckConnect(imap,"imap.example.com")
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        ProcedureReturn
    EndIf

    ;  Login
    success = CkImap::ckLogin(imap,"myLogin","myPassword")
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        ProcedureReturn
    EndIf

    ;  First examine the already subscribed mailboxes.
    refName.s = ""
    wildcardedMailbox.s = "*"
    subscribed.i = 1

    mboxes.i = CkMailboxes::ckCreate()
    If mboxes.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkImap::ckMbxList(imap,subscribed,refName,wildcardedMailbox,mboxes)
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        CkMailboxes::ckDispose(mboxes)
        ProcedureReturn
    EndIf

    i.i = 0
    While i < CkMailboxes::ckCount(mboxes)
        Debug CkMailboxes::ckGetName(mboxes,i)
        i = i + 1
    Wend
    Debug "----"

    ;  Sample output.

    ;  INBOX
    ;  INBOX/recent
    ;  INBOX/misc
    ;  INBOX/misc/solutions
    ;  ...
    ;  Outbox
    ;  Deleted Items
    ;  Sent Items
    ;  Drafts
    ;  Junk E-mail
    ;  Trash
    ;  Sent
    ;  Templates

    ;  Let's unsubscribe to "INBOX/misc/solutions".
    success = CkImap::ckUnsubscribe(imap,"INBOX/misc/solutions")
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        CkMailboxes::ckDispose(mboxes)
        ProcedureReturn
    EndIf

    ;  Get the list of subscribed mailboxes again to verify that "INBOX/misc/solutions" is missing.
    success = CkImap::ckMbxList(imap,subscribed,"","INBOX/misc*",mboxes)
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        CkMailboxes::ckDispose(mboxes)
        ProcedureReturn
    EndIf

    i = 0
    While i < CkMailboxes::ckCount(mboxes)
        Debug CkMailboxes::ckGetName(mboxes,i)
        i = i + 1
    Wend
    Debug "----"

    ;  Re-subscribe to "INBOX/misc/solutions".
    success = CkImap::ckSubscribe(imap,"INBOX/misc/solutions")
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        CkMailboxes::ckDispose(mboxes)
        ProcedureReturn
    EndIf

    ;  Get the list of subscribed mailboxes again to verify that "INBOX/misc/solutions" is back in the list.
    success = CkImap::ckMbxList(imap,subscribed,"","INBOX/misc*",mboxes)
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkImap::ckDispose(imap)
        CkMailboxes::ckDispose(mboxes)
        ProcedureReturn
    EndIf

    i = 0
    While i < CkMailboxes::ckCount(mboxes)
        Debug CkMailboxes::ckGetName(mboxes,i)
        i = i + 1
    Wend
    Debug "----"

    ;  Disconnect from the IMAP server.
    success = CkImap::ckDisconnect(imap)


    CkImap::ckDispose(imap)
    CkMailboxes::ckDispose(mboxes)


    ProcedureReturn
EndProcedure