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

nafvub8i  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(140)

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

qgzx9mmu1#

谷歌不久前发布了以下声明:
Less secure apps & your Google Account
为确保您的账户安全,自2022年5月30日起, Google不再支持使用要求您仅使用用户名和密码登录Google帐户的第三方应用程序或设备。
因此,您有几个选择继续使用GMail:

  • 进入Gmail帐户设置,重新打开“允许不太安全的应用程序”设置(Google自动关闭)。不建议这样做,但仍然支持(目前),并且不需要任何代码更改。
  • 在Gmail帐户中输入Enable 2-Step Verification,然后输入generate an App-Specific Password。在FromPassword变量中使用该变量代替普通密码。无需更改其他代码。如果您不想更改代码,这是首选解决方案。
  • 根据Google文档,更新您的代码以使用带有TIdSMTP的OAuth身份验证:OAuth 2.0 Mechanism。例如,参见this GitHub repo,了解与Indy的TIdSMTP一起工作的第三方OAuth实现。

此外,我最近将我自己的sasl-oauth branch签入到Indy's GitHub repo,其中包含一些与OAuthor相关的更改。您仍然需要自己与Gmail交互以获得必要的身份验证令牌,但您可以将其与TIdSMTP.SASLMechanisms集合的新TIdSASLXOAuth2类一起使用(注意:它还没有被测试)。

相关问题