使用应用程序特定密码通过 GMail 发送电子邮件

问题描述 投票:0回答:2

我维护并开发了一个程序(除其他外)通过 GMail 发送电子邮件。

到目前为止,发送电子邮件没有任何问题,但几天前,此功能停止工作,并显示“凭据错误”消息。我查看了 GMail 的帮助,找到了这个解释/警告/你有什么:

为了确保您的帐户安全,从 2022 年 5 月 30 日起,Google 不再支持使用要求您仅使用用户名和密码登录 Google 帐户的第三方应用或设备。

解决方案是使用“应用程序专用”密码。

我查看了这个问题,其中指出:

我最近的尝试是在 Gmail 上创建“应用程序专用”密码

但所附代码实际上并未显示密码是如何发送的。

阅读问题及其答案,我对程序做了一些更改:

Port := 995
UseTLS := utUseImplicitTLS
SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2]

进行这些更改后,在尝试发送测试邮件(仍然没有应用程序特定密码)时,我得到了响应

回复码无效:+OK

这可能意味着我的程序失败,因为它没有发送应用程序特定的密码。

我想知道的是:如何发送该密码?

下面是我作为线程执行的代码,因此所有组件都在代码中定义:

 email:= TIdMessage.Create (nil);
 try
  email.LoadFromFile (FFileName);
  email.OnInitializeISO:= DoInitializeISO;
  //  DeleteFile (FFileName);

  smtp:= TIdSMTP.Create (nil);
  try
   smtp.OnFailedRecipient:= FailedRecipient;
   ssl:= TIdSSLIOHandlerSocketOpenSSL.Create (smtp);
   ssl.SSLOptions.SSLVersions:= [sslvTLSv1];

   smtp.OnStatus := DoStatus;
   smtp.IOHandler:= ssl;
   smtp.Host:= FHost;
   smtp.Password:= FPassword;   // now app passord
   smtp.Username:= FUsername;
   smtp.UseTLS:= utUseExplicitTLS;
   smtp.Port:= 587;

   smtp.Connect;
   try
    smtp.Send (email);
   finally
    smtp.Disconnect;
   end;
  finally
   ssl.free;
   smtp.Free;
  end;
 finally
  email.Free;
 end;
delphi gmail indy
2个回答
3
投票

应用程序专用密码只是 Gmail 为您生成的密码,然后您可以使用它来代替普通密码(即在

TIdSMTP.Password
属性中)。 Gmail 的文档对此进行了解释:

使用应用程序密码登录


2
投票

您只需将普通密码替换为应用程序密码即可。 假设您的代码类似于下面的代码。 请记住,您需要启用 2FA 才能创建应用程序密码。

smtp.OnStatus := DoStatus;
smtp.IOHandler:= ssl;
smtp.Host:= FHost;
smtp.Password:= AppsPassword;   // Password from Apps Password
smtp.Username:= FUsername;
smtp.UseTLS:= utUseExplicitTLS;
smtp.Port:= 587;

另一种选择是使用 XOAuth2。

© www.soinside.com 2019 - 2024. All rights reserved.