Using D7 + Indy 10 latest build.
My code is using TIdSMTP to send email.
I keep getting "Connection closed gracefully" at some end-users, and the email is never sent.
The code is like:
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;
Any advice?
Read all about it on http://www.swissdelphicenter.ch/en/showarticle.php?id=1
EIdConnClosedGracefully is an
exception signaling that the
connection has been closed by the
other side intentionally. This is not
the same as a broken connection which
would cause a connection reset error.
If the other side has closed the
connection and the socket is read or
written to, EIdConnClosedGracefully
will be raised by Indy. This is
similar to attempting to read or write
to a file that has been closed without
your knowledge.
In some cases this is a true exception
and your code needs to handle it. In
other cases (typically servers) this
is a normal part of the functioning of
the protocol and Indy handles this
exception for you. Even though Indy
catches it, when running in the IDE
the debugger will be triggered first.
You can simply press F9 to continue
and Indy will handle the exception,
but the constant stopping during
debugging can be quite annoying. In
the cases where Indy catches the
exception, your users will never see
an exception in your program unless it
is run from the IDE.
In my case the error was caused because I used a sender email address from a different domain than the one hosted by the smtp server, that's why the smtp server rejected the connection.
In my experience, in case of AT&T server, it rejects an email address which is not @att.net
address in the MAIL FROM
. More info can be determined by logging the error using TIdLogEvent
for these users that receive it, otherwise the error report is rather vague - if the disconnect (Connection closed gracefully) occurs right after the MAIL FROM
then it might indicate a server policy rejecting an email with the domain which it doesn't host as explained by Toni as well.
Otherwise the "Connection closed gracefully" error means that an attempt is being made to read/write to socket that has been closed by the peer intentionally - in your case, peer is the SMTP server you connect to. It is different than the "Connection reset" error which indicates a broken connection. In both cases, the connection is no longer present and you can't read/write anymore to it.