Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) POP3 Auto-Refresh Office365 Access TokenSee more Office365 ExamplesDemonstrates how to automatically recover from an expired OAuth2 access token when OAuth2 authentication fails in the POP3 protocol. If the server responds with "-ERR Authentication failure: unknown user name or bad password.", then we refresh the access token and retry.
Use ChilkatAx-win32.pkg Procedure Test Handle hoMailman Handle hoJsonToken Boolean iSuccess Handle hoOauth2 Variant vSbJson Handle hoSbJson Integer iNumEmails String sTemp1 Boolean bTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Get Create (RefClass(cComChilkatMailMan)) To hoMailman If (Not(IsComObjectCreated(hoMailman))) Begin Send CreateComObject of hoMailman End Set ComMailHost Of hoMailman To "outlook.office365.com" Set ComMailPort Of hoMailman To 995 Set ComPopSsl Of hoMailman To True // Use your O365 email address here. Set ComPopUsername Of hoMailman To "OFFICE365_EMAIL_ADDRESS" // When using OAuth2 authentication, leave the password empty. Set ComPopPassword Of hoMailman To "" // Load our previously obtained OAuth2 access token. Get Create (RefClass(cComChilkatJsonObject)) To hoJsonToken If (Not(IsComObjectCreated(hoJsonToken))) Begin Send CreateComObject of hoJsonToken End Get ComLoadFile Of hoJsonToken "qa_data/tokens/office365.json" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoJsonToken To sTemp1 Showln sTemp1 Procedure_Return End Get ComStringOf Of hoJsonToken "access_token" To sTemp1 Set ComOAuth2AccessToken Of hoMailman To sTemp1 // Make the TLS connection to the outlook.office365.com POP3 server. Get ComPop3Connect Of hoMailman To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoMailman To sTemp1 Showln sTemp1 Procedure_Return End // Authenticate using XOAUTH2 Get ComPop3Authenticate Of hoMailman To iSuccess If (iSuccess <> True) Begin // If we're still connected to the mail server, then it means the server sent a non-success response, // Such as: -ERR Authentication failure: unknown user name or bad password. Get ComIsPop3Connected Of hoMailman To bTemp1 If (bTemp1 = True) Begin // Refresh the OAuth2 access token, and if successful, save the new (refreshed) access token and try authenticating again. Get Create (RefClass(cComChilkatOAuth2)) To hoOauth2 If (Not(IsComObjectCreated(hoOauth2))) Begin Send CreateComObject of hoOauth2 End // Use your actual Directory (tenant) ID instead of "112d7ed6-71bf-4eba-a866-738364321bfc" Set ComTokenEndpoint Of hoOauth2 To "https://login.microsoftonline.com/112d7ed6-71bf-4eba-a866-738364321bfc/oauth2/v2.0/token" // Replace these with your Azure App Registration's actual values. Set ComClientId Of hoOauth2 To "CLIENT_ID" Set ComClientSecret Of hoOauth2 To "CLIENT_SECRET" // Get the "refresh_token" Get ComStringOf Of hoJsonToken "refresh_token" To sTemp1 Set ComRefreshToken Of hoOauth2 To sTemp1 // Send the HTTP POST to refresh the access token.. Get ComRefreshAccessToken Of hoOauth2 To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoOauth2 To sTemp1 Showln sTemp1 Procedure_Return End Get ComAccessToken Of hoOauth2 To sTemp1 Showln "New access token: " sTemp1 Get ComRefreshToken Of hoOauth2 To sTemp1 Showln "New refresh token: " sTemp1 // Update the JSON with the new tokens. Get ComAccessToken Of hoOauth2 To sTemp1 Get ComUpdateString Of hoJsonToken "access_token" sTemp1 To iSuccess Get ComRefreshToken Of hoOauth2 To sTemp1 Get ComUpdateString Of hoJsonToken "refresh_token" sTemp1 To iSuccess // Save the new JSON access token response to a file. Get Create (RefClass(cComChilkatStringBuilder)) To hoSbJson If (Not(IsComObjectCreated(hoSbJson))) Begin Send CreateComObject of hoSbJson End Set ComEmitCompact Of hoJsonToken To False Get pvComObject of hoSbJson to vSbJson Get ComEmitSb Of hoJsonToken vSbJson To iSuccess Get ComWriteFile Of hoSbJson "qa_data/tokens/office365.json" "utf-8" False To iSuccess Get ComAccessToken Of hoOauth2 To sTemp1 Showln "New Access Token = " sTemp1 // Update the mailman with the new access token. Get ComAccessToken Of hoOauth2 To sTemp1 Set ComOAuth2AccessToken Of hoMailman To sTemp1 // Retry the authentication. Get ComPop3Authenticate Of hoMailman To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoMailman To sTemp1 Showln sTemp1 Procedure_Return End End Else Begin Get ComLastErrorText Of hoMailman To sTemp1 Showln sTemp1 Procedure_Return End End // Find out how many emails are on the server.. Get ComCheckMail Of hoMailman To iNumEmails If (iNumEmails < 0) Begin Get ComLastErrorText Of hoMailman To sTemp1 Showln sTemp1 Procedure_Return End // Examine the POP3 session log: Get ComPop3SessionLog Of hoMailman To sTemp1 Showln sTemp1 // The POP3 session log will look something like this: // **** Connected to outlook.office365.com:995 // < +OK The Microsoft Exchange POP3 service is ready. [QwBIADIAUABSADEANgBDAEEAMAAwADEAMgAuAG4AYQBtAHAAcgBkADEANgAuAHAAcgBvAGQALgBvAHUAdABsAG8AbwBrAC4AYwBvAG0A] // > AUTH XOAUTH2 // < + // > <base64 string in XOAUTH2 format> // < -ERR Authentication failure: unknown user name or bad password. // > AUTH XOAUTH2 // < + // > <base64 string in XOAUTH2 format> // < +OK User successfully authenticated. // > STAT // < +OK 248 46637086 // End the POP3 session and close the connection to the GMail server. Get ComPop3EndSession Of hoMailman To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoMailman To sTemp1 Showln sTemp1 Procedure_Return End Showln "Finished." End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.