8

使用 D7 + Indy 10 最新版本。

我的代码使用 TIdSMTP 发送电子邮件。我一直在某些最终用户处收到“正常关闭连接”,并且从未发送过电子邮件。

代码如下:

try
~~~~
~~~~
_idSMTP := TIdSmtp.Create;
with _idSMTP do
begin
  Host := 'myhost';
  Connect;
  try
    Send(_EmailMsg);
    Result := True;
  except
    on E: Exception do
    begin
      MsgDlgErr(Self.Handle, E.Message)
    end
  end;
end;
finally
 _idSMTP.Disconnect;
 _idSMTP.Free;
end;

有什么建议吗?

4

4 回答 4

21

在http://www.swissdelphicenter.ch/en/showarticle.php?id=1上阅读所有相关信息

EIdConnClosedGracefully 是一个异常,表明连接已被另一方故意关闭。这与会导致连接重置错误的断开连接不同。如果对方关闭了连接并且套接字被读取或写入,EIdConnClosedGracefully 将由 Indy 引发。这类似于尝试读取或写入在您不知情的情况下已关闭的文件。

在某些情况下,这是一个真正的异常,您的代码需要处理它。在其他情况下(通常是服务器),这是协议功能的正常部分,Indy 会为您处理此异常。即使 Indy 捕捉到它,当在 IDE 中运行时,调试器也会首先被触发。您可以简单地按 F9 继续,Indy 将处理异常,但是在调试期间不断停止可能会很烦人。在 Indy 捕获异常的情况下,除非从 IDE 运行,否则您的用户将永远不会在您的程序中看到异常。

于 2009-07-06T08:17:58.707 回答
2

在我的情况下,错误是因为我使用了来自与 smtp 服务器托管的不同域的发件人电子邮件地址,这就是 smtp 服务器拒绝连接的原因。

于 2013-06-13T12:38:32.150 回答
1

@att.net根据我的经验,在 AT&T 服务器的情况下,它会拒绝不在MAIL FROM. 更多信息可以通过TIdLogEvent为这些接收它的用户记录错误来确定,否则错误报告相当模糊 - 如果断开连接(连接正常关闭)发生在之后,MAIL FROM那么它可能表明服务器策略拒绝使用域的电子邮件正如托尼所解释的那样,它也没有托管。

否则,“连接正常关闭”错误意味着正在尝试读取/写入已被对等方有意关闭的套接字- 在您的情况下,对等方是您连接到的 SMTP 服务器。它不同于指示连接断开的“连接重置”错误。在这两种情况下,连接都不再存在,您无法再对其进行读/写。

于 2014-01-28T02:06:14.213 回答
0

当客户端站点上未安装 OpenSSL 库时,我们收到此错误

于 2021-09-07T08:19:53.270 回答