Delphi 11 Indy GMail SMTP 错误“用户名和密码不被接受”

hi *_*llo 6 delphi smtp indy delphi-11-alexandria

我正在使用 Delphi 11 开发 Windows 应用程序,并使用 SMTP 发送邮件,从上周开始,我收到错误 - “用户名和密码不被接受”。但是,早些时候相同的代码运行良好。请提供一些解决方案来解决此问题。

with IdSMTP1 Do
begin

  IOHandler := IdSSLIOHandlerSocketOpenSSL1;
  UseTLS    := utUseImplicitTLS;
  Host      := SMTP;
  Username  := FromUser;
  Password  := FromPassword;
  Port      := StrToIntDef(PortNumber, 0);

  IdMessage1.From.Address := IdSMTP1.Username; // sender
  IdMessage1.From.Name := 'Subject';

  try
    Connect;
    try
      Send(IdMessage1);
      Result := True;
    finally
      Disconnect;
    end;
  except
    on E:Exception do
    begin

    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 10

谷歌不久前发布了以下公告:

\n

安全性较低的应用和您的 Google 帐户

\n
\n

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

\n
\n

因此,您有几种选择可以继续使用 GMail:

\n
    \n
  • 进入您的 Gmail 帐户设置并重新打开“允许安全性较低的应用程序”设置(Google 自动将其关闭)。不建议这样做,但仍然支持(目前),并且不需要更改任何代码。

    \n
  • \n
  • 在您的 Gmail 帐户上启用两步验证,然后生成应用程序专用密码。在变量中使用它代替普通密码FromPassword。不需要更改其他代码。如果您不想更改代码,这是首选解决方案。

    \n
  • \n
  • TIdSMTP根据 Google 文档更新您的代码以使用 OAuth 身份验证: OAuth 2.0 Mechanism。例如,请参阅此 GitHub 存储库,了解与 Indy\'s 一起使用的第 3 方 OAuth 实现TIdSMTP

    \n

    另外,我最近在Indy 的 GitHub 存储库中签入了自己的sasl-oauth分支,其中包含一些与 OAuth 相关的更改。您仍然需要自己与 Gmail 交互以获得必要的身份验证令牌,但您可以将其与集合的新类一起使用(注意:尚未经过测试)。TIdSASLXOAuth2TIdSMTP.SASLMechanisms

    \n
  • \n
  • 重新编写代码以使用Gmail 自己的 API而不是 Indy。

    \n
  • \n
\n