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

Office365 IMAP List Mailboxes

See more Office365 Examples

List the Office365 IMAP mailboxes.

Chilkat PureBasic Downloads

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

Procedure ChilkatExample()

    success.i = 0

    ;  An Office365 OAuth2 access token must first be obtained prior
    ;  to running this code.

    ;  Getting the OAuth2 access token for the 1st time requires the O365 account owner's 
    ;  interactive authorizaition via a web browser.  Afterwards, the access token
    ;  can be repeatedly refreshed automatically.

    ;  See the following examples for getting and refreshing an OAuth2 access token

    ;  Get Office365 SMTP/IMAP/POP3 OAuth2 Access Token
    ;  Refresh Office365 SMTP/IMAP/POP3 OAuth2 Access Token

    ;  First get our previously obtained OAuth2 access token.
    jsonToken.i = CkJsonObject::ckCreate()
    If jsonToken.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckLoadFile(jsonToken,"qa_data/tokens/office365.json")
    If success = 0
        Debug "Failed to open the office365 OAuth JSON file."
        CkJsonObject::ckDispose(jsonToken)
        ProcedureReturn
    EndIf

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

    CkImap::setCkSsl(imap, 1)
    CkImap::setCkPort(imap, 993)

    ;  Connect to the Office365 IMAP server.
    success = CkImap::ckConnect(imap,"outlook.office365.com")
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkJsonObject::ckDispose(jsonToken)
        CkImap::ckDispose(imap)
        ProcedureReturn
    EndIf

    ;  Use OAuth2 authentication.
    CkImap::setCkAuthMethod(imap, "XOAUTH2")

    ;  Login using our username (i.e. email address) and the access token for the password.
    success = CkImap::ckLogin(imap,"OFFICE365_EMAIL_ADDRESS",CkJsonObject::ckStringOf(jsonToken,"access_token"))
    If success = 0
        Debug CkImap::ckLastErrorText(imap)
        CkJsonObject::ckDispose(jsonToken)
        CkImap::ckDispose(imap)
        ProcedureReturn
    EndIf

    Debug "O365 OAuth authentication is successful."

    ;  Get the list of mailboxes.
    refName.s = ""
    wildcardedMailbox.s = "*"
    subscribed.i = 0

    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)
        CkJsonObject::ckDispose(jsonToken)
        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

    ;  Sample output looks like this:
    ;  Archive
    ;  Calendar
    ;  Calendar/Birthdays
    ;  Calendar/United States holidays
    ;  Contacts
    ;  Conversation History
    ;  Deleted Items
    ;  Drafts
    ;  INBOX
    ;  INBOX/abc
    ;  INBOX/misc
    ;  INBOX/misc/birdeye
    ;  INBOX/old
    ;  INBOX/old/large
    ;  INBOX/receipts
    ;  Journal
    ;  Junk Email
    ;  Notes
    ;  Outbox
    ;  RSS Subscriptions
    ;  Sent Items
    ;  Sync Issues
    ;  Sync Issues/Conflicts
    ;  Sync Issues/Local Failures
    ;  Sync Issues/Server Failures
    ;  Tasks
    ;  Trash

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


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


    ProcedureReturn
EndProcedure