![]() |
Mailversand mit Indy geht nur einmal
Guten Tag Delphianer,
mit nachfolgender Procedure kann ich einmal eine Mail versenden. Ein erneutes Aufrufen der Procedure erzeugt eine Fehlermeldung (Fehler bei der Verbindung). wenn ich den try except-Block auskommentiere wird nur ein Fehlerbildschirm ohne Angabe des Fehlers angezeigt.
Delphi-Quellcode:
Wo kann nur der Fehler liegen?
procedure TMSFmDruckeUndExport.MailmitIndy;
var pBody: TStringList; pAttachment: TIdAttachmentFile; begin pBody := TStringList.Create; pBody.Clear; pBody.Add('Hallo'); idsmtp1.Host := 'XXXXXX.XXXXXXX.de'; idsmtp1.Username := 'XXX@XXXXXXXX.de'; idsmtp1.Password := 'XXXXXXXX'; idsmtp1.Port := 25; idmsg1.Clear; idmsg1.ClearBody; idmsg1.ClearHeader; idmsg1.From.Text := 'bps@bps-nienburg.de'; idmsg1.Sender.Text := 'ich bins'; idmsg1.Recipients.EMailAddresses := 'verkauf@bps-nienburg.de'; idmsg1.Subject := 'testmail'; idmsg1.Body := pBody; pAttachment := TIdAttachmentFile.Create(idmsg1.MessageParts, 'd:\erntetag2012.jpg'); try idsmtp1.Connect; idsmtp1.Send(idmsg1); idsmtp1.Disconnect(); pBody.Free; pAttachment.Free; except ShowMessage('Fehler bei der Verbindung!'); pBody.Free; pAttachment.Free; end; end; Vielen Dank im voraus für die Hilfe. HPB |
AW: Mailversand mit Indy geht nur einmal
Das
Delphi-Quellcode:
brauchst gar nicht aufrufen, da du ja die Liste direkt davor erzeugst. Und neu erzeugte Listen sind von Haus aus leer.
pBody.Clear;
Du solltest auch den ![]()
Delphi-Quellcode:
try
// ... except on Ex : Exception do ShowMessage(Ex.Message); end; |
AW: Mailversand mit Indy geht nur einmal
Es hat wohl keiner Lust uns den Inhalt der Fehlermeldung zu nennen?
Aber was ist das bitte für eine Speicherschutzbehandulng, mit dem Try Except?
Delphi-Quellcode:
Und eventuell um Alles noch ein Try-Except drumrum.
procedure TMSFmDruckeUndExport.MailmitIndy;
var pBody: TStringList; pAttachment: TIdAttachmentFile; begin pBody := TStringList.Create; try //pBody.Clear; ist noch leer pBody.Add('Hallo'); idsmtp1.Host := 'XXXXXX.XXXXXXX.de'; idsmtp1.Username := 'XXX@XXXXXXXX.de'; idsmtp1.Password := 'XXXXXXXX'; idsmtp1.Port := 25; idmsg1.Clear; idmsg1.ClearBody; idmsg1.ClearHeader; idmsg1.From.Text := 'bps@bps-nienburg.de'; idmsg1.Sender.Text := 'ich bins'; idmsg1.Recipients.EMailAddresses := 'verkauf@bps-nienburg.de'; idmsg1.Subject := 'testmail'; idmsg1.Body := pBody; pAttachment := TIdAttachmentFile.Create(idmsg1.MessageParts, 'd:\erntetag2012.jpg'); try idsmtp1.Connect; idsmtp1.Send(idmsg1); idsmtp1.Disconnect(); finally pAttachment.Free; end; finally pBody.Free; end; end;
Delphi-Quellcode:
PS: Was mag wohl passieren, wenn es zwischen dem Try und Except, bei einem der Free knallt?
try
... except on E: Exception do begin //ShowMessage(E.Message); E := 'Fehler beim Versenden der Mail.' + sLineBreak + sLineBreak + E.Message; raise; end; end; |
AW: Mailversand mit Indy geht nur einmal
Hallo,
mache mal aus
Delphi-Quellcode:
dieses hier:
try
idsmtp1.Connect; idsmtp1.Send(idmsg1); idsmtp1.Disconnect(); pBody.Free; pAttachment.Free; except ShowMessage('Fehler bei der Verbindung!'); pBody.Free; pAttachment.Free; end; end;
Delphi-Quellcode:
Hilfe eventuell beim Fehlerfinden.
try
try idsmtp1.Connect; idsmtp1.Send(idmsg1); idsmtp1.Disconnect(); except on E:Exception do ShowMessage('Fehler bei der Verbindung! ' +E.Message); end; finally pBody.Free; pAttachment.Free; end; Grüße Klaus |
AW: Mailversand mit Indy geht nur einmal
Ähhhm, ich bin mir grade nicht sicher, ob indy nicht die Freigabe des Attachments übernimmt.
Laß mal probehalber das
Delphi-Quellcode:
weg, bzw. entferne gleich die ganze pAttachment-Variable (wenn Ersteres was half).
pAttachment.Free
|
AW: Mailversand mit Indy geht nur einmal
Vielen Dank für die Antworten.
Ich habe nun den Fehler im try except-Block, wie vorgeschlagen, abgefangen. Aber es wird keine Fehlercode oder sonst etwas ausgegeben. Siehe hierzu auch den Screenshot-Anhang. Kann es sein dass ich den Port in der Firewall freigeben muß? Aber nein, sonst hätte ich ja nicht das Erstemal senden können!?
Delphi-Quellcode:
Kann ich sonst noch etwas tun?
try
idsmtp1.Connect; idsmtp1.Send(idmsg1); idsmtp1.Disconnect(); except on E : Exception do begin ShowMessage('Fehler beim Versenden der Mail!' + sLineBreak + sLineBreak + E.Message); raise; end; end; Mit Gruß HPB |
AW: Mailversand mit Indy geht nur einmal
Hallo,
vielleicht solltest Du das Verbinden mit dem MailServer und dem Verschicken der Mails trennen. In etwa so: - zum Mailserver verbinden - alle Mails verschicken - Verbindung zum Mailserver trennen. Du machst es zur Zeit so: - zum Mailserver verbinden - eine Mail verschicken - Verbindung zum Mailserver trennen. - zum Mailserver verbinden - eine Mail verschicken - Verbindung zum Mailserver trennen. - zum Mailserver verbinden - eine Mail verschicken - Verbindung zum Mailserver trennen. Vielleicht mag der Server es nicht innerhalb von kurzer Zeit vom gleichen User kontaktiert zu werden? Grüße Klaus |
AW: Mailversand mit Indy geht nur einmal
Zitat:
Ich habe nun den Fehler näher eingegrenzt. Siehe hierzu den Anhang (EIdSMTPReplayErrorFehler). Ich habe die Verbindung zum Server in das FormCreate-Ereignis gelegt. Die Verbindung schliessen im FormDeactivate-Ereignis. Allem zu Trotz die Fehlermeldung bleibt die Selbe. Mit Gruß HPB |
AW: Mailversand mit Indy geht nur einmal
.. dann bohre mal Dein Exception handling auf:
Delphi-Quellcode:
code von on e: EIdSMTPReplyError do begin if e.EnhancedCode.Available then begin ShowMessage(e.Message + #13#10 + '--' + #13#10 + e.EnhancedCode.ReplyAsStr); end else begin showMessage(e.Message); end; end; on e: Exception do begin showMessage(e.Message); end; ![]() Grüße Klaus |
AW: Mailversand mit Indy geht nur einmal
Irgendetwas scheint da nicht zu stimmen:
Delphi-Quellcode:
was kommt:
ShowMessage('Fehler beim Versenden der Mail!' + sLineBreak + sLineBreak +
E.Message); "Fehler bei der Verbindung" Zitat:
Das legt für mich den Schluß nahe, das der Fehler ganz irgendwo anders auftritt. Gruß K-H |
AW: Mailversand mit Indy geht nur einmal
Zitat:
Mit Gruß HPB |
AW: Mailversand mit Indy geht nur einmal
Zitat:
Und was sagt der Debugger, also wo kommst du alles vorbei und wird wirklich dieses ShowMessage ausgeführt, bzw. bei welchem Befehl knallt es denn nun genau? PS: Bei derartigen MessageBoxen funktioniert oftmals das Strg+C, womit man den Text rauskopieren kann. |
AW: Mailversand mit Indy geht nur einmal
Zitat:
Ich habe nun den Mailversand mal in XE2 geschrieben und getestet. Der Debugger hält an der richtigen Stelle an. Für Debugfehler siehe begefügte Grafik. Scheinbar stimmt etwas bei meinem Provider nicht, oder wass soll sonst die Meldung "qq trouble in home directory" bedeuten? Vielen Dank für die bisherigen Hilfestellungen. HPB Mit Gruß HPB |
AW: Mailversand mit Indy geht nur einmal
|
AW: Mailversand mit Indy geht nur einmal
Zitat:
Vielen Dank für die Hinweise. HPB |
AW: Mailversand mit Indy geht nur einmal
Hallo,
gerade von meinem Provider bekommen: Zitat:
eine Zeitlang warten und diese Mail nochmals schicken. Grüße Klaus |
AW: Mailversand mit Indy geht nur einmal
Wenn ich mich richtig erinnere ist es genau umgekehrt, aber wer kann sich schon auf sein Gedächtnis verlassen.
Gruß K-H |
AW: Mailversand mit Indy geht nur einmal
vielleicht:
procedure var Att : TIdAttachment; begin .. idsmtp1.Disconnect; try FreeAndNil(Att); except .. end; end; Bei "Free" wird einfach der Speicher freigegeben und das Object zerstört;die Objektvariable beinhaltet abr noch eine "gültige" Zeiger-Adresse, die aber nach dem Free je doch auf einen ungültigen Speicherbereich verweist. Bei "FreeAndNil" wird das Object auch freigegeben und der zeiger auf nil gesetzt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz