Sample code for 30+ languages & platforms
PureBasic

Office365 IMAP with OAuth2 Authentication

See more Office365 Examples

Demonstrates how to authenticate using OAuth2 with outlook.office365.com.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkImap.pb"
IncludeFile "CkJsonObject.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 <> 1
        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 <> 1
        Debug CkImap::ckLastErrorText(imap)
        CkJsonObject::ckDispose(jsonToken)
        CkImap::ckDispose(imap)
        ProcedureReturn
    EndIf

    Debug "O365 OAuth authentication is successful."

    ; Do something...
    success = CkImap::ckSelectMailbox(imap,"Inbox")
    If success <> 1
        Debug CkImap::ckLastErrorText(imap)
        CkJsonObject::ckDispose(jsonToken)
        CkImap::ckDispose(imap)
        ProcedureReturn
    EndIf

    ; Your application can continue to do other things in the IMAP session....

    ; When finished, logout and close the connection.
    success = CkImap::ckLogout(imap)
    success = CkImap::ckDisconnect(imap)

    Debug "Finished."


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


    ProcedureReturn
EndProcedure