Sample code for 30+ languages & platforms
Delphi DLL

SMTP GMail Send using App Password

See more GMail SMTP/IMAP/POP Examples

Demonstrates how to authenticate using an app password with GMail for SMTP (port 465 using implicit SSL/TLS).

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MailMan;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
mailman: HCkMailMan;

begin
success := False;

// 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.

mailman := CkMailMan_Create();

CkMailMan_putSmtpHost(mailman,'smtp.gmail.com');

CkMailMan_putSmtpUsername(mailman,'user@gmail.com');
CkMailMan_putSmtpPassword(mailman,'srnyyvqajocnsvdp');

CkMailMan_putSmtpSsl(mailman,True);
CkMailMan_putSmtpPort(mailman,465);

success := CkMailMan_SmtpConnect(mailman);
if (success = False) then
  begin
    Memo1.Lines.Add(CkMailMan__lastErrorText(mailman));
    Exit;
  end;

success := CkMailMan_SmtpAuthenticate(mailman);
if (success = False) then
  begin
    Memo1.Lines.Add(CkMailMan__lastErrorText(mailman));
    Exit;
  end;

Memo1.Lines.Add('SMTP Success!');

CkMailMan_Dispose(mailman);

end;