Delphi + Indy:连接正常关闭

Atl*_*las 8 delphi indy

使用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;
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Lar*_*ens 21

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

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

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

  • @Atlas:这就是为什么它说"在某些情况下......":)该页面还讨论了其他案例. (2认同)