Rust
Rust
OAuth2 for a GMail using a P12 Service Account Key
See more GMail REST API Examples
Demonstrates how to use GMail with OAuth2 for aservice 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 Rust Downloads
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
let 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)
let cert = chilkat::Cert::new();
if cert.load_pfx_file("c:/someDirectory/keys/chilkat25-cbd7b42afbd8.p12", "notasecret").is_err() {
println!("{}", cert.last_error_text());
return;
}
// The ISS is your service account email address ending in gserviceaccount.com.
let iss = "chilkatsvc@chilkat25.iam.gserviceaccount.com".to_string();
// The scope is always the following string:
let scope = "https://mail.google.com/".to_string();
// The sub is your company email address
let oauth_sub = "bob@yourcompany.com".to_string();
// The access token is valid for this number of seconds.
let num_sec = 3600;
let access_token = http.g_svc_oauth_access_token(&iss, &scope, &oauth_sub, num_sec, &cert).unwrap_or_default();
if !http.last_method_success() {
println!("{}", http.last_error_text());
return;
} else {
println!("access token: {}", access_token);
}
// The access token allows us to send unlimited emails while it's valid. Once it expires, we must obtain and use a new one.
// -----------------------------------------------------------------------
let mailman = chilkat::MailMan::new();
// Set the properties for the GMail SMTP server:
mailman.set_smtp_host("smtp.gmail.com");
mailman.set_smtp_port(587);
mailman.set_start_tls(true);
mailman.set_smtp_username("bob@yourcompany.com");
mailman.set_o_auth2_access_token(&access_token);
// Create a new email object
let email = chilkat::Email::new();
email.set_subject("This is a test");
email.set_body("This is a test");
email.set_from("Bob <bob@yourcompany.com>");
let _ = email.add_to("Recipient", "recipient@example.com").is_ok();
// To add more recipients, call AddTo, AddCC, or AddBcc once per recipient.
if mailman.send_email(&email).is_err() {
println!("{}", mailman.last_error_text());
return;
}
if mailman.close_smtp_connection().is_err() {
println!("Connection to SMTP server not closed cleanly.");
}
println!("Successfully sent email using Gmail with a service account key.");