Delphi +印地:连接正常关闭

kzipqqlq  于 2022-12-03  发布在  其他
关注(0)|答案(5)|浏览(185)

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

有什么建议吗?

azpvetkf

azpvetkf1#

请在http://www.swissdelphicenter.ch/en/showarticle.php?id=1上阅读所有相关信息
EIdConnClosedGracefully是一个异常,表示连接已被另一端有意关闭.这与断开得连接不同,断开得连接会导致连接重置错误.如果另一端已关闭连接,并且正在读取或写入套接字,则Indy将引发EIdConnClosedGracefully.这类似于尝试读取或写入已在您不知情得情况下关闭得文件.
在某些情况下,这是一个真正的异常,您的代码需要处理它。(通常是服务器)这是协议正常运行的一部分,Indy将为您处理此异常。即使Indy捕获了此异常,当在IDE中运行时,调试器也将首先被触发。您只需按F9继续,Indy将处理此异常,但是在调试过程中不断地停止可能会很烦人。在Indy捕获异常的情况下,用户将永远不会在程序中看到异常,除非从IDE运行程序。

6bc51xsx

6bc51xsx2#

在我的例子中,错误是因为我使用了一个来自不同域的发件人电子邮件地址,而不是由smtp服务器托管的电子邮件地址,这就是为什么smtp服务器拒绝连接。

nvbavucw

nvbavucw3#

根据我的经验,在AT&T服务器的情况下,它拒绝一个电子邮件地址,这不是MAIL FROM中的@att.net地址。更多的信息可以通过记录错误使用TIdLogEvent为这些用户接收它,否则错误报告相当模糊-如果断开连接(Connection closed gracefully)发生在MAIL FROM之后,则它可能表示服务器策略拒绝其不托管的域的电子邮件,如Toni所解释的。
否则,“连接正常关闭”错误意味着试图读/写已被对等端故意关闭的套接字-在您的情况下,对等端是您连接到的SMTP服务器。它与“连接重置”错误不同,后者表示连接断开。在这两种情况下,连接不再存在,您无法再读/写它。

nlejzf6q

nlejzf6q4#

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

nukf8bse

nukf8bse5#

我知道它是旧的,但我已经做了这个例外。
在我的例子中,服务器阻止发送邮件是因为我超过了托管服务的每日发送限制。在测试某些东西时很容易超过这些限制。异常本身是不明确的,所以可能有更多的原因,但我会首先检查这个问题。它为我解决了这个问题。

相关问题