Piszę program, który wymaga wysłania danych za pomocą e-maila. Zastosowałem do tego celu typowe procedury zaczerpnięte z internetu. Wszystko działa prawidłowo do momentu przesłania pliku powyżej 25kB. Plik jest przesyłany tylko raz. Gdy chcę go przesłać ponownie, to program zatrzymuje się na linijce kodu:
li.Caption := TIdAttachment(Form1.Message.MessageParts.Items[idx]).Filename;
Gdy zamknę program i uruchomię go ponownie, sytuacja powtarza się. Plik może być wysłany tylko raz. Może ktoś wie w czym tkwi problem. Poniżej podaję fragment kodu. Dziękuję za zainteresowanie problemem.procedure ResetListView;
var
li: TListItem;
idx: Integer;
begin
Form1.ListView1.Items.Clear;
for idx := 0 to Pred(Form1.Message.MessageParts.Count) do
begin
li := Form1.ListView1.Items.Add;
if Form1.Message.MessageParts.Items[idx] is TIdAttachment then
begin
li.Caption := TIdAttachment(Form1.Message.MessageParts.Items[idx]).Filename;
Form1.ListBox1.Items.Add(li.Caption);
end;
end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
If Length(Edit8.Text) > 0 then
begin
SMTP.AuthenticationType:= atLogin;
SMTP.UserID:= Edit8.Text;
SMTP.Password:= Edit9.Text;
end;
SMTP.Host:= Edit6.Text;
SMTP.Port:= StrToInt(Edit7.Text);
try
try
SMTP.Connect;
SpeedButton1.Enabled:= False;
Screen.Cursor:= crHourGlass;
StatusBar.SimpleText:= 'Połączony z serwerem.';
Sleep(200);
Message.Subject:= Edit3.Text;
Message.From.Address:= Edit1.Text;
Message.From.Text:= Edit1.Text;
Message.From.Name:= Edit1.Text;
Message.Recipients.Add;
Message.Recipients.Items[0].Address:= Edit2.Text;
Message.Recipients.Items[0].Text:= Edit2.Text;
Message.Recipients.Items[0].Name:= Edit2.Text;
Message.Body.Assign(Memo1.Lines);
sleep(2000);
SMTP.Send(Message);
StatusBar.SimpleText:= 'Dane zostały przesłane.';
Message.Clear;
ResetListView;
sleep(2000);
except
raise Exception.Create('Błąd! Plik nie został wysłany!');
end;
finally
SpeedButton1.Enabled:= TRUE;
Screen.Cursor:= crDefault;
SMTP.Disconnect;
end;
end;

</delphi>