【问题标题】:Sending email via GMail with app specific password使用特定于应用程序的密码通过 GMail 发送电子邮件
【发布时间】:2022-06-10 19:23:44
【问题描述】:

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

到目前为止,发送电子邮件没有任何问题,但几天前,此功能停止使用消息“凭据错误”。我查看了 GMail 的帮助,发现了这个解释/警告/what-have-you:

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

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

我查看了this question 的声明:

我最近的尝试是在 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


【解决方案1】:

您可以将密码替换为应用程序密码。假设您的代码 id 与以下类似。

IdSMTP.Host := 'smtp.gmail.com';
IdSMTP.Port := 25;
IdSMTP.AuthType := satDefault;
IdSMTP.Username := 'username@gmail.com';
IdSMTP.Password := 'AppsPassword';
IdSMTP.Connect;

【讨论】:

  • 您无需在IOHandlerConnect() 上为您设置DestinationHostPortDefaultPort
  • 虽然第一句“你可以用应用程序密码替换密码”在技术上是正确的,但其余的答案是有问题的,因为它给出了下载邮件的说明,不发送邮件。这是我无意的错误。接受的答案是指正确的组件 TIdSMTP。我收到的错误消息提示我使用了错误的端口。
【解决方案2】:

应用程序专用密码只是 Gmail 为您生成的密码,然后您可以使用它代替您的普通密码(即,在 TIdSMTP.Password 属性中)。这在 Gmail 的文档中有解释:

Sign in with App Passwords

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2020-01-06
    • 2011-06-08
    • 2017-05-12
    • 2015-09-28
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多