使用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;
有什么建议吗?
5条答案
按热度按时间azpvetkf1#
请在http://www.swissdelphicenter.ch/en/showarticle.php?id=1上阅读所有相关信息
EIdConnClosedGracefully是一个异常,表示连接已被另一端有意关闭.这与断开得连接不同,断开得连接会导致连接重置错误.如果另一端已关闭连接,并且正在读取或写入套接字,则Indy将引发EIdConnClosedGracefully.这类似于尝试读取或写入已在您不知情得情况下关闭得文件.
在某些情况下,这是一个真正的异常,您的代码需要处理它。(通常是服务器)这是协议正常运行的一部分,Indy将为您处理此异常。即使Indy捕获了此异常,当在IDE中运行时,调试器也将首先被触发。您只需按F9继续,Indy将处理此异常,但是在调试过程中不断地停止可能会很烦人。在Indy捕获异常的情况下,用户将永远不会在程序中看到异常,除非从IDE运行程序。
6bc51xsx2#
在我的例子中,错误是因为我使用了一个来自不同域的发件人电子邮件地址,而不是由smtp服务器托管的电子邮件地址,这就是为什么smtp服务器拒绝连接。
nvbavucw3#
根据我的经验,在AT&T服务器的情况下,它拒绝一个电子邮件地址,这不是
MAIL FROM
中的@att.net
地址。更多的信息可以通过记录错误使用TIdLogEvent
为这些用户接收它,否则错误报告相当模糊-如果断开连接(Connection closed gracefully)发生在MAIL FROM
之后,则它可能表示服务器策略拒绝其不托管的域的电子邮件,如Toni所解释的。否则,“连接正常关闭”错误意味着试图读/写已被对等端故意关闭的套接字-在您的情况下,对等端是您连接到的SMTP服务器。它与“连接重置”错误不同,后者表示连接断开。在这两种情况下,连接不再存在,您无法再读/写它。
nlejzf6q4#
当客户端站点未安装OpenSSL库时,我们收到此错误
nukf8bse5#
我知道它是旧的,但我已经做了这个例外。
在我的例子中,服务器阻止发送邮件是因为我超过了托管服务的每日发送限制。在测试某些东西时很容易超过这些限制。异常本身是不明确的,所以可能有更多的原因,但我会首先检查这个问题。它为我解决了这个问题。