Sample code for 30+ languages & platforms
DataFlex

OAuth2 for a GMail using a P12 Service Account Key

See more GMail REST API Examples

Demonstrates how to use GMail with OAuth2 for a service account within a Google Workspace Account where your email domain is custom (e.g., @yourcompany.com).

Note: This example does not work for Personal Google Accounts where the email domain is @gmail.com

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoHttp
    Variant vCert
    Handle hoCert
    String sIss
    String sScope
    String sOauth_sub
    Integer iNumSec
    String sAccessToken
    Handle hoMailman
    Variant vEmail
    Handle hoEmail
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

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

    Get Create (RefClass(cComChilkatHttp)) To hoHttp
    If (Not(IsComObjectCreated(hoHttp))) Begin
        Send CreateComObject of hoHttp
    End

    // --------------------------------------------------------------------------------
    // For a step-by-step guide for setting up your Google Workspace service account,
    // see Setup Google Workspace Account for Sending SMTP GMail from a Service Account
    // --------------------------------------------------------------------------------
    // Begin by loading your Google service account key (.p12)
    Get Create (RefClass(cComChilkatCert)) To hoCert
    If (Not(IsComObjectCreated(hoCert))) Begin
        Send CreateComObject of hoCert
    End
    Get ComLoadPfxFile Of hoCert "c:/someDirectory/keys/chilkat25-cbd7b42afbd8.p12" "notasecret" To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoCert To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // The ISS is your service account email address ending in gserviceaccount.com.
    Move "chilkatsvc@chilkat25.iam.gserviceaccount.com" To sIss

    // The scope is always the following string:
    Move "https://mail.google.com/" To sScope

    // The sub is your company email address
    Move "bob@yourcompany.com" To sOauth_sub

    // The access token is valid for this number of seconds.
    Move 3600 To iNumSec

    Get pvComObject of hoCert to vCert
    Get ComG_SvcOauthAccessToken Of hoHttp sIss sScope sOauth_sub iNumSec vCert To sAccessToken
    Get ComLastMethodSuccess Of hoHttp To bTemp1
    If (bTemp1 <> True) Begin
        Get ComLastErrorText Of hoHttp To sTemp1
        Showln sTemp1
        Procedure_Return
    End
    Else Begin
        Showln "access token: " sAccessToken
    End

    // The access token allows us to send unlimited emails while it's valid. Once it expires, we must obtain and use a new one.

    // -----------------------------------------------------------------------
    Get Create (RefClass(cComChilkatMailMan)) To hoMailman
    If (Not(IsComObjectCreated(hoMailman))) Begin
        Send CreateComObject of hoMailman
    End

    // Set the properties for the GMail SMTP server:
    Set ComSmtpHost Of hoMailman To "smtp.gmail.com"
    Set ComSmtpPort Of hoMailman To 587
    Set ComStartTLS Of hoMailman To True

    Set ComSmtpUsername Of hoMailman To "bob@yourcompany.com"
    Set ComOAuth2AccessToken Of hoMailman To sAccessToken

    // Create a new email object
    Get Create (RefClass(cComChilkatEmail)) To hoEmail
    If (Not(IsComObjectCreated(hoEmail))) Begin
        Send CreateComObject of hoEmail
    End

    Set ComSubject Of hoEmail To "This is a test"
    Set ComBody Of hoEmail To "This is a test"
    Set ComFrom Of hoEmail To "Bob <bob@yourcompany.com>"
    Get ComAddTo Of hoEmail "Recipient" "recipient@example.com" To iSuccess
    // To add more recipients, call AddTo, AddCC, or AddBcc once per recipient.

    Get pvComObject of hoEmail to vEmail
    Get ComSendEmail Of hoMailman vEmail To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoMailman To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComCloseSmtpConnection Of hoMailman To iSuccess
    If (iSuccess <> True) Begin
        Showln "Connection to SMTP server not closed cleanly."
    End

    Showln "Successfully sent email using Gmail with a service account key."


End_Procedure