AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Mailversand mit Indy geht nur einmal
Thema durchsuchen
Ansicht
Themen-Optionen

Mailversand mit Indy geht nur einmal

Ein Thema von HPB · begonnen am 1. Aug 2012 · letzter Beitrag vom 8. Aug 2012
Antwort Antwort
Seite 1 von 2  1 2      
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#1

Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 16:48
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:
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;
Wo kann nur der Fehler liegen?
Vielen Dank im voraus für die Hilfe.
HPB

Geändert von mkinzler ( 1. Aug 2012 um 16:50 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 16:54
Das pBody.Clear; brauchst gar nicht aufrufen, da du ja die Liste direkt davor erzeugst. Und neu erzeugte Listen sind von Haus aus leer.

Du solltest auch den Fehler selbst abfangen und dir ausgeben lassen. Würdest du das tun, würdest du sehen, warum es wohl kein zweites Mal klappt.

Delphi-Quellcode:
try
  // ...
except on Ex : Exception do
  ShowMessage(Ex.Message);
end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 16:58
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:
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;
Und eventuell um Alles noch ein Try-Except drumrum.
Delphi-Quellcode:
try

  ...

except
  on E: Exception do begin
    //ShowMessage(E.Message);
    E := 'Fehler beim Versenden der Mail.' + sLineBreak + sLineBreak + E.Message;
    raise;
  end;
end;
PS: Was mag wohl passieren, wenn es zwischen dem Try und Except, bei einem der Free knallt?
$2B or not $2B

Geändert von himitsu ( 1. Aug 2012 um 17:05 Uhr) Grund: Wie konnte ich nur [quote] statt [delphi] schreiben?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 16:59
Hallo,

mache mal aus

Delphi-Quellcode:
try
   idsmtp1.Connect;
   idsmtp1.Send(idmsg1);
   idsmtp1.Disconnect();
   pBody.Free;
   pAttachment.Free;
  except
   ShowMessage('Fehler bei der Verbindung!');
   pBody.Free;
   pAttachment.Free;
  end;
end;
dieses hier:

Delphi-Quellcode:
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;
Hilfe eventuell beim Fehlerfinden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 17:06
Ähhhm, ich bin mir grade nicht sicher, ob indy nicht die Freigabe des Attachments übernimmt.
Laß mal probehalber das pAttachment.Free weg, bzw. entferne gleich die ganze pAttachment-Variable (wenn Ersteres was half).
$2B or not $2B
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#6

AW: Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 17:22
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:
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;
Kann ich sonst noch etwas tun?
Mit Gruß
HPB

Geändert von HPB (19. Dez 2013 um 11:46 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 17:28
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
Klaus
  Mit Zitat antworten Zitat
HPB

Registriert seit: 2. Jun 2008
365 Beiträge
 
Delphi XE7 Professional
 
#8

AW: Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 17:45
Hallo,

vielleicht solltest Du das Verbinden mit dem MailServer und dem Verschicken der Mails trennen.

Grüße
Klaus
Ja Klaus, da scheint was dran zu sein.
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

Geändert von HPB (19. Dez 2013 um 11:46 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 17:55
.. dann bohre mal Dein Exception handling auf:

Delphi-Quellcode:
 
 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;
code von hier

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Mailversand mit Indy geht nur einmal

  Alt 1. Aug 2012, 18:05
Irgendetwas scheint da nicht zu stimmen:
Delphi-Quellcode:
ShowMessage('Fehler beim Versenden der Mail!' + sLineBreak + sLineBreak +
       E.Message);
was kommt:
"Fehler bei der Verbindung"

Zitat:
Allem zu Trotz die Fehlermeldung bleibt die Selbe.
"EIdSMTPReplayErrorFehler"

Das legt für mich den Schluß nahe, das der Fehler ganz irgendwo anders auftritt.
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz