Entwickler-Ecke

Internet / Netzwerk - Mehrere Anhänge an E-mail


ruewue - Mi 17.11.10 10:45
Titel: Mehrere Anhänge an E-mail
Hallo, habe mal wieder ein kleines Problem.

Ich versende aus einem Programm heraus eine Mail. Dies auch einwandfrei. Nun hänge ich ab und zu eine Datei an. geht auch super. Da nun aber immer wieder mehr als eine Datei angehängt werden muss, habe ich ein Problem. Die Mail wird nicht verschickt, wenn es mehr als 1 Anahng ist.

Hier mein Code dazu:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
Begin  
  idSMTP.Host     := gsSMTPServer;
  idSMTP.Username := gsMailUSR;  
  idSMTP.Password := gsMailPWD;
  idSMTP.Port     := 25;  

  idMessage.From.text   := 'Mail-Server';  
  idMessage.Sender.text := fMail.SendText;  
 
  idMessage.Recipients.EMailAddresses := fMail.Empf;  
  idMessage.CCList.EMailAddresses     := fMail.CC;  
  idMessage.Subject                    := fMail.Subject;  

  Body      := TStringList.Create;
  Body.Text  := fMail.BodyText;
  idMessage.Body.Clear;  
  idMessage.Body := Body; 

  
  if Trim(fMail.FileName) <> '' then begin
    if FindFirst(fMail.Path + fMail.FileName, faAnyFile, DirInfo) = 0 then begin
      repeat
        idMessage.IsEncoded    := true;
        Anhang                := TIdAttachmentFile.Create(idMessage.MessageParts);
        Anhang.StoredPathName  := fMail.Path + DirInfo.Name;
        Anhang.FileName        := DirInfo.Name;
        Anhang.OpenLoadStream;
        Anhang.CloseLoadStream;
      until FindNext(DirInfo) <> 0;
    end;
  end;
  
  try
    idSMTP.Connect;  
    idSMTP.Send(idMessage);  
    idSMTP.Disconnect;  
  except 
    on E : Exception do begin  
      if idSMTP.connected then begin
        try 
          idSMTP.disconnect; 
        except 
        end;
      end;
      SendInfo('Fehler beim Mail Versand : ' + E.Message);
    end;  
  end;  
end;


Irgend wie sehe ich den Fehler nicht. Es läuft ja mit einen Anhang auch super. Der Fehler tritt bei idSMTP.Send(idMessage) auf.

Danke
Rüdiger

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 18.11.2010 um 07:15


buster - Mi 17.11.10 11:32

versuch mal

Delphi-Quelltext
1:
TIdAttachment.Create(idMessage.MessageParts, FileName[i]);                    


Dude566 - Mi 17.11.10 12:40

Alternativ könntest du auch einbauen, dass wenn mehrere Dateien angehängt werden, sie in eine Zip gepackt werden und dann verschickt werden.
Wenn der Aufwand nicht zu groß sein sollte.


ruewue - Mi 17.11.10 14:07

@buster : Habe ich schon als erstes Versucht. Nach ein wenig googl fand ich dann die aktuelle version und damit sollte es eigentlich gehen.

@Dude566 : Es wird bei uns in der Fachabteilung eine Mail mit einzelnen TXT Dateien verlangt.

Aber danke für die Hilfe.


platzwart - Mi 17.11.10 14:11


Delphi-Quelltext
1:
Anhang:= TIdAttachmentFile.Create(idMessage.MessageParts);                    


Das mal vor die Repeat-Schleife setzen? Schaut so aus, als ob sonst bei jedem Durchgang das neu gesetzt wird? (oder wird damit nur ein neuer zusätzlicher Anhang erzeugt?)


ruewue - Mi 17.11.10 14:19

Damit soll angeblich immer ein neuer Anhang erzeugt werden. Habe es aber versucht davor zu setzen, keine Änderung.


platzwart - Mi 17.11.10 14:29

Und was für ein Fehler wird angezeigt?


ruewue - Mi 17.11.10 15:40

@Platzward : keiner. Die Exception EIdSMTPReplyError gibt keine Message zurück. Ist leer.

Ich habe jetzt mal getestet, ob alle Dateien auch mit CREAT erzeugt werden. JA. in einer Schleife konnte ich alle auslesen. Es kann nur keine MAil erzeugt werden, sobald mehr als eine enthalten ist.

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Hallo zusammen und danke für die Hilfe.

Ich habe das Problem gelöst. Unter den Dateien war eine zu große. Bei mehr als 4 MB wird von unserem SMTP Server nichts übertragen. Dumm nur das Keine Message ausgegeben wurde, sondern nur ein Abbruch.

Aber der Test mit mehreren kleinen Dateien und gesamt nicht größer als 4 MB hat gepklappt.