Para ser exactos... si ocurre un error distinto de EIdSocketError tampoco se desconectaría... puesto que la excepción sigue saltantose el stack...
lo correcto, sería:
Código:
try
smtp.Connect();
try
smtp.Send(msg);
finally
smtp.Disconnect; // no es necesario chequear si está conectado... pues se ejecuta
// solo si fue posible conectarse (y siempre que se haya conectado)
end;
except
// Aqui capturas las excepciones, osea los errores que te da,
// por ejemplo:
// capturará todas las excepciones, ocurridas durante la conexión, el envio del
// mensaje y la desconección.
on E: EIdSocketError do begin
Showmessage('No se ha podido enviar el email.'+ #13 +
'Ha ocurrido el error de socket No. ' + IntToStr(e.LastError));
// esto debido a que el error de sockets no puede darse solo porque
// el host sea desconocido o incorrecto.
// mas info siguiendo este enlace
end
Hasta luego.
