Also zum einen würde ich das
smtp.connect nicht schon im FormCreate machen.
Dafür könntest du dir eine function (z.B. ConnectSMTP) anlegen, in der auch alle Werte, die jetzt im FormCreate stehen, gesetzt werden.
Mir fallen nur sehr wenige Fälle ein, in denen es Sinn machen würde die
SMTP-Verbindung während der ganzen Programmlaufzeit aufrecht zu halten. (Von den Problemen mal ganz abgesehen, wenn den Provider die zwischendurch kappt).
Diese Funktion sollte dann als Rückgabewert ein Boolean zurückgeben, je nachdem ob connected werden konnte oder nicht.
Zum anderen würde ich TIdMessage nicht mit Owner Application erzeugen.
Und die ButtonClick-Routine sollte dann so aussehen:
Delphi-Quellcode:
procedure ButtonClick(Sender: TObject);
var
m: TIdMessage;
begin
if connectSMTP
then
Try
m:=TIdMessage.Create(
nil);
//mit nil als Owner erzeugen.
.
.
.
SMTP.send(m);
finally
SMTP.disconnect;
//oder SMTP.Connected:=false; das weiß ich jetzt aus dem Kopf nicht.
m.free;
end;
end;
Das hilft dir jetzt zwar nicht bei deinem Problem, ist aber sinnvoller.