Sample code for 30+ languages & platforms
Lua

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 Lua Downloads

Lua
local chilkat = require("chilkat")

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

local http = chilkat.Http.new()

-- --------------------------------------------------------------------------------
-- 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)
local cert = chilkat.Cert.new()
local success = cert:load_pfx_file("c:/someDirectory/keys/chilkat25-cbd7b42afbd8.p12", "notasecret")
if not success then
    print(cert.last_error_text)
    return
end

-- The ISS is your service account email address ending in gserviceaccount.com.
local iss = "chilkatsvc@chilkat25.iam.gserviceaccount.com"

-- The scope is always the following string:
local scope = "https://mail.google.com/"

-- The sub is your company email address
local oauth_sub = "bob@yourcompany.com"

-- The access token is valid for this number of seconds.
local numSec = 3600

local accessToken = http:g_svc_oauth_access_token(iss, scope, oauth_sub, numSec, cert)
if not http.last_method_success then
    print(http.last_error_text)
    return
else
    print("access token: " .. accessToken)
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.

-- -----------------------------------------------------------------------
local mailman = chilkat.MailMan.new()

-- Set the properties for the GMail SMTP server:
mailman.smtp_host = "smtp.gmail.com"
mailman.smtp_port = 587
mailman.start_tls = true

mailman.smtp_username = "bob@yourcompany.com"
mailman.oauth2_access_token = accessToken

-- Create a new email object
local email = chilkat.Email.new()

email.subject = "This is a test"
email.body = "This is a test"
email.from = "Bob <bob@yourcompany.com>"
success = email:add_to("Recipient", "recipient@example.com")
-- To add more recipients, call AddTo, AddCC, or AddBcc once per recipient.

success = mailman:send_email(email)
if not success then
    print(mailman.last_error_text)
    return
end

success = mailman:close_smtp_connection()
if not success then
    print("Connection to SMTP server not closed cleanly.")
end

print("Successfully sent email using Gmail with a service account key.")