【问题标题】:Can't fetch email from gmail using Indy无法使用 Indy 从 gmail 获取电子邮件
【发布时间】:2021-05-07 13:53:46
【问题描述】:

我经常使用TIdPOP3,它非常好用,GMail 帐户除外。

不知何故,它永远不会起作用。我尝试了不同的组合和端口,有和没有 SSL,它总是返回不同的错误。

我最近的尝试是在 Gmail 上创建一个“应用程序特定”密码,并尝试在端口 995 上使用此密码进行连接。这次它返回“正常关闭连接”。

Resolving hostname pop.gmail.com.
Connecting to 172.217.192.108.
Connected.
Disconnected.
Connection Closed Gracefully.

我也试过这个:

popb.Host := 'pop.gmail.com';
popb.username := 'myacount@gmail.com';
popb.password := 'mypassword';
popb.Port := 995;
popb.IOHandler := sslpop;
popb.UseTLS := utUseImplicitTLS;
with sslpop do
begin
  Destination := 'pop.gmail.com:995';
  Host := 'pop.gmail.com';
  Port := 995;
  DefaultPort := 0;
end;

在最后一个示例中,它返回此错误:

使用 SSL 连接时出错。错误:00000006:lib(0):func(0):EVP lib

我尝试获取的这个特定帐户有两步验证;这是否使它无法与 Indy 一起使用?

【问题讨论】:

  • 我认为您需要在 GMail 中启用 POP/IMAP 设置。否则,您需要使用 OAuth2 身份验证和 REST API 调用
  • @JohnKouraklis 它已经启用,我的问题是其他问题,正如我的回答所示。还是谢谢!
  • 我知道 GMail 的“应用程序特定密码”功能适用于 Indy,因为我已经对其进行了多次测试。附带说明,不要设置您正在设置的 SSLIOHandler 属性,Connect 会为您处理它们。

标签: delphi indy indy10 delphi-10.4-sydney


【解决方案1】:

我可以通过设置 Ssloptions.Method := sslvSSLv23 来解决这个问题。

这是完整的工作代码:

    pop.Host := 'pop.gmail.com';
    pop.username := 'myemail@gmail.com';
    pop.password := 'mypassword';
    pop.Port := 995;
    pop.IOHandler := sslpop;
    pop.UseTLS := utUseImplicitTLS;
    with sslpop do
    begin
      Destination := 'pop.gmail.com:995';
      Ssloptions.Method := sslvSSLv23;
      Host := 'pop.gmail.com';
      Port := 995;
      DefaultPort := 0;
    end;

【讨论】:

  • 我看到你已经解决了它,但你可以在以下链接上找到来自 Remy Lebeau 的更多信息:stackoverflow.com/questions/27261199/… 他说 SSLOption.Method 不应该再使用了,@应使用 987654324@ 属性。
  • 是的,请将SSSLOptions.Method := sslvSSLv23; 替换为SSLOptions.SSLVersion := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 2020-09-02
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
相关资源
最近更新 更多