Delphi 11中Indy GMail SMTP出现“用户名和密码不被接受”的错误。

6

我正在使用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;

2
Gmail不再支持SMTP的基本身份验证。请参见,例如,此链接 - Dave Nottage
1
这个问题基本上和我上周问的那个一样:https://dev59.com/MnUOtIcB2Jgan1zn0L92 - No'am Newman
1个回答

10

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

不再支持使用低安全性应用和设备登录您的 Google 帐号

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

因此,您有几个选择继续使用 GMail:

  • 进入您的Gmail帐户设置,打开“允许不安全应用程序”设置(Google已自动关闭)。这不是推荐的方法,但仍然受支持(目前),并且不需要任何代码更改。

  • 在您的Gmail帐户上启用两步验证,然后生成一个应用程序专用密码。在您的FromPassword变量中使用该密码,而不是您的常规密码。不需要其他代码更改。如果您不想更改代码,则这是首选解决方案。

  • 根据Google的文档,使用OAuth身份验证更新您的代码,使用TIdSMTP。例如,请参见此GitHub存储库,其中包含适用于Indy的第三方OAuth实现。

    此外,我最近在Indy的GitHub存储库中检查了自己的{{link5:sasl-oauth分支}},其中包含一些与OAuth相关的更改。您仍然必须自己与Gmail接口以获取必要的身份验证令牌,但然后可以将其与TIdSMTP.SASLMechanisms集合的新TIdSASLXOAuth2类一起使用(注意:尚未测试)。

  • 重写您的代码,使用Gmail自己的API,而不是Indy。


这个年代的答案还有效吗?或者Indy(特别是Rad Studio)现在已经实现了OAuth吗? - Mike Versteeg
1
@MikeVersteeg 今天仍然适用于这个回答中提到的所有内容(除了TIdSASLXOAuth2已经过测试)。sasl-oauth 分支目前仍在等待合并到 Indy 的主要代码中,因此尚未加入 RAD Studio。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接