【问题标题】:Delphi + Indy: Connection closed gracefullyDelphi + Indy:连接正常关闭
【发布时间】:2010-11-08 07:51:06
【问题描述】:

使用 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;

有什么建议吗?

【问题讨论】:

    标签: delphi indy


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          EIdConnClosedGracefully 是一个 异常信号表明 连接已被关闭 对方故意。这不是 与断开的连接相同 会导致连接重置错误。 如果对方已经关闭 连接和套接字被读取或 写给 EIdConnClosedGracefully 将由印地抚养。这是 类似于尝试读或写 到一个已经关闭的文件 你的知识。

          在某些情况下,这是一个真正的例外 并且您的代码需要处理它。在 其他情况(通常是服务器)这个 是正常运作的一部分 协议和 Indy 处理这个 你例外。尽管印地 在 IDE 中运行时捕获它 调试器将首先被触发。 您只需按 F9 即可继续 Indy 将处理异常, 但在不断的停止 调试可能很烦人。在 印地抓住的案例 例外,您的用户永远不会看到 你的程序中的一个例外,除非它 从 IDE 运行。

          【讨论】:

          • 异常不会发生在 IDE 中,而是在最终用户计算机上。
          • 现在有些病毒扫描程序会阻止 SMTP 端口上的传出连接。这可能会导致连接无响应并引发此错误。
          • @Atlas:这就是为什么它说“在某些情况下......” :) 该页面还讨论了其他情况。
          • 如果在消息数据或发件人/收件人地址中检测到任何错误,服务器也可能会断开连接。
          猜你喜欢
          • 2014-04-26
          • 1970-01-01
          • 2015-03-08
          • 2017-03-03
          • 1970-01-01
          • 2012-02-19
          • 1970-01-01
          • 2014-05-29
          • 1970-01-01
          相关资源
          最近更新 更多