Sample code for 30+ languages & platforms
Zig

GMail App Password

See more GMail SMTP/IMAP/POP Examples

Demonstrates how to authenticate using an app password with GMail for IMAP and SMTP.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

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

    // Starting May 30, 2022, Google will no longer support the use of third-party apps or devices
    // which ask you to sign in to your Google Account using only your username and password.

    // Instead of authenticating with your GMail username/password, a GMail user can create an App Password
    // and then login using their username/app_password.   It's literally the same, except it allows a GMail
    // account owner to isolate passwords to specific applications.

    // The Gmail account owner would first need to make sure she has 2-Step Verification setup for her account.
    // Note: The 2FA verification is not a factor when authenticating with an app password. The 2FA is required
    // to setup app passwords in the Google account console.  See Sign in with App Passwords

    // After the GMail account owner has setup his app password, he simply uses the app password instead of his GMail account password.

    // For example:
    const imap = try chilkat.Imap.init();
    defer imap.deinit();

    imap.setSsl(true);
    imap.setPort(993);

    imap.connect("imap.gmail.com") catch {
        std.debug.print("{s}\n", .{try imap.getLastErrorText(alloc)});
        return;
    };

    imap.login("user@gmail.com", "srnyyvqajocnsvdp") catch {
        std.debug.print("{s}\n", .{try imap.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("IMAP Success!\n", .{});

    // For SMTP..

    const mailman = try chilkat.MailMan.init();
    defer mailman.deinit();

    mailman.setSmtpHost("smtp.gmail.com");

    mailman.setSmtpUsername("user@gmail.com");
    mailman.setSmtpPassword("srnyyvqajocnsvdp");

    mailman.setSmtpSsl(true);
    mailman.setSmtpPort(465);

    mailman.smtpConnect() catch {
        std.debug.print("{s}\n", .{try mailman.getLastErrorText(alloc)});
        return;
    };

    mailman.smtpAuthenticate() catch {
        std.debug.print("{s}\n", .{try mailman.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("SMTP Success!\n", .{});
}