6

我正在尝试使用具有以下设置的 gmail 帐户(Delphi 7、Indy 10)发送电子邮件:

TIdSmtp:

Port = 587;
UseTLS := utUseExplicitTLS;

TIdSSLIOHandlerSocketOpenSSL:

SSLOptions.Method := sslvTLSv1;

一切似乎都设置好了。我得到这个回应:

Resolving hostname smtp.gmail.com.
Connecting to 74.125.77.109.
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = RC4-MD5; description = RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
; bits = 128; version = TLSv1/SSLv3;

然后它挂起并且没有完成。不发送电子邮件。可能是什么问题?

4

4 回答 4

4

是的,我已经看到很多关于 indy10 和 tls(通常是 gmail)的问题。

首先确保您拥有来自此处的最新 ssl 库

我已经看到在 indy 的前沿版本(即不稳定版本)中解决了间歇性停顿和错误。见http://www.indyproject.org/sockets/download/svn.DE.aspx

对于 gmail,我通常在端口 465 上使用implicityTLS ..

  idSmtp := TIdSMTP.Create(nil);
  try
    idSmtp.IOHandler := nil;
    idSmtp.ManagedIOHandler := true;

    // try to use SSL
    try
      TIdSSLContext.Create.Free;
      idSmtp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSmtp);
      if (smtpSettings.port = 465) then
        idSmtp.UseTLS := utUseImplicitTLS
      else
        idSmtp.UseTLS := utUseExplicitTLS;
    except
      idSmtp.IOHandler.Free;
      idSmtp.IOHandler := nil;
    end;

    if (idSmtp.IOHandler = nil) then
    begin
      idSmtp.IOHandler := TIdIOHandler.MakeDefaultIOHandler(idSmtp);
      idSmtp.UseTLS := utNoTLSSupport;
    end;

    // send message, etc

  finally
    idSmtp.Free;
  end;
于 2010-01-28T02:51:20.047 回答
3

问题很简单。我没有足够的耐心,应用程序没有挂起,超时时间很长。超时是错误设置的结果。

于 2010-03-17T13:18:29.757 回答
1

首先,您是否验证过代码可以与其他电子邮件服务器一起使用?

前段时间有人提到他们在某些服务器接受带有 Indy TIdHTTP 组件的 http 请求时遇到问题。原因是他们将 Indy 作为用户代理的一部分包含在内:

      Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';

当他们删除印地图书馆时,它起作用了。显然有一些使用 Indy 创建的恶意 Web 服务,因此一些站点会拒绝来自使用它创建的应用程序的连接。

我不确定您使用的组件是否具有任何类型的 UserAgent 属性。但如果是这样,请取消对 Indy 的任何引用。

于 2010-01-27T15:56:53.210 回答
1

在测试 Indy 时,您应该确保选中“停止 Delphi 异常”(工具、调试器选项、语言异常)。

一些例程,特别是 idSMTP.Send,“吃掉”(或隐藏)异常导致挂起。

于 2010-07-24T02:03:51.910 回答