Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SendMail mit Anhang (https://www.delphipraxis.net/164597-sendmail-mit-anhang.html)

Ykcim 21. Nov 2011 08:57

SendMail mit Anhang
 
Hallo Zusammen,

zu diesem Thema findet man eine Menge und ich habe stundenlang gesucht, aber mein Problem nicht lösen können. Daher frage ich Euch jetzt direkt, in der Hoffnung auf Hilfe.

Ich möchte eine Excel-Datei per HTML Mail verschicken.

Der Mailversand ohne Anhang funktioniert wunderbar, aber wenn ich den Anhang mit dem nachfolgenden Code hinzufügen möchte, wird statt der Datei meiner Mail nur der Text
"This is a multi-part message in MIME format --kY0d7MlcKs6drZEFnrME2Wo=_AYnzRxoH1 Content-Type: text/plain Content-Transfer-Encoding: 8bit "
voran gestellt.

Delphi-Quellcode:
function SendEmail(Recipient:string;CCList:string;sSubject:string;Body:TStringList; Pfad: string):boolean;
var
  nAlarmnr:integer;
  Attachment: TIdAttachment;

begin

 idSMTP:=TidSMTP.Create;
 idMessage:=TidMessage.Create;
 idSMTP.Host  := 'XXX';
 idSMTP.Username := 'XXXXXXXX';
 idSMTP.Password := 'XXXXX';
 idSMTP.Port  := XX;


 idMessage.From.text :='XXX@XXXX.de';
 idMessage.Sender.text:=idMessage.From.text;


 idMessage.Recipients.EMailAddresses:= Recipient;
 idMessage.CCList.EMailAddresses := CCList;
 idMessage.Subject:=sSubject;

 idMessage.ContentType := 'text/html';

 idMessage.Body.Clear;
 idMessage.Body := Body;
 Attachment := TIdAttachmentFile.Create(IdMessage.MessageParts, Pfad);
 idMessage.ContentType := 'text/html';
 try
   idSMTP.Connect;
   idSMTP.Send(idMessage);
   idSMTP.Disconnect;
   result:=True;
   except on E : Exception do
     begin
       if idSMTP.connected then try idSMTP.disconnect; except end;
       result := false;
     end;
 end;

end;
Hat jemand eine Idee, warum das bei mir nicht klappt??

Vielen Dank

Ykcim

Bummi 21. Nov 2011 09:09

AW: SendMail mit Anhang
 
ist eine Weile her bei mir, AFAIK musst Du die Mail

ContentType:='multipart/*';

erstellen und den HTML Teil per
Code:
with TIdText.Create(Msg.MessageParts, DEINTEXT) do
     begin
        ContentType:='text/html';
     end;

with TIdAttachmentFile.Create(msg.MessageParts, DEINFILE) do .....
...
Msg.MessageParts.Add();
erstellen, wenn es nicht stimmt bitte ich um Verzeihung, ich verwende die INDY's seit längerem nicht mehr...

Ykcim 21. Nov 2011 09:38

AW: SendMail mit Anhang
 
Hallo, !TEILERFOLG!

vielen Dnak für die Antwort - ein echter Teilerfolg:

Jetzt wird die Datei mitgeschickt, aber die Mail ist nicht mehr im HTML-Format und es wird der HTML-Code gezeigt... Hat dafür jemand eine Lösung?

Vielen Dank

Ykcim

Ykcim 21. Nov 2011 11:09

AW: SendMail mit Anhang
 
Hallo,

so funktioniert es jetzt:
Delphi-Quellcode:
function SendEmail(Recipient:string;CCList:string;sSubject:string;Body:TStringList; Pfad: string):boolean;
var
  nAlarmnr:integer;
  Attachment: TIdAttachment;

begin

 idSMTP:=TidSMTP.Create;
 idMessage:=TidMessage.Create;
 idSMTP.Host  := 'XXX.XXX.XXX.XXX';
 idSMTP.Username := 'XXXXXX';
 idSMTP.Password := 'XXXX';
 idSMTP.Port  := XX;


 idMessage.From.text :='XX@XXXXXX.de';
 idMessage.Sender.text:=idMessage.From.text;


 idMessage.Recipients.EMailAddresses:= Recipient;
 idMessage.CCList.EMailAddresses := CCList;
 idMessage.Subject:=sSubject;
 idMessage.ContentType:='multipart/*';

 with TidText.Create(idMessage.MessageParts,body) do
  begin
    contenttype:='text/html';
  end;

 with TIdAttachmentFile.Create(idMessage.MessageParts, Pfad) do
  begin
    idMessage.MessageParts.Add();
  end;

 try
   idSMTP.Connect;
   idSMTP.Send(idMessage);
   idSMTP.Disconnect;
   result:=True;
   except on E : Exception do
     begin
       if idSMTP.connected then try idSMTP.disconnect; except end;
       result := false;
     end;
 end;

end;

Vielen Dank für die Hilfe

DeddyH 21. Nov 2011 12:05

AW: SendMail mit Anhang
 
Hab ich was übersehen, oder erzeugst Du Dir Speicherlecks?

Ykcim 21. Nov 2011 14:45

AW: SendMail mit Anhang
 
Wo und wie?

Bin für jede Anregung zu haben...

Ykcim

Nersgatt 21. Nov 2011 14:48

AW: SendMail mit Anhang
 
Du gibst z.B. IdSMTP nicht frei.
Generell solltest Du Dir angewöhnen IMMER Ressourcenschutzblöcke zu verwenden, wenn Du Instanzen von Klassen erstellst.

Delphi-Quellcode:
Instanz := TMyClass.Create;
Try
... mach was mit der Instanz
Finally
  Instanz.free;
End

DeddyH 21. Nov 2011 14:49

AW: SendMail mit Anhang
 
Ich sehe da 4 mal Create, aber nicht 1 mal Free. Üblicherweise macht man das ja so:
Delphi-Quellcode:
Dings := TDings.Create;
try
  Dings.MachWas;
finally
  Dings.Free;
end;
[edit] :lol: [/edit]

Ykcim 5. Dez 2011 21:27

AW: SendMail mit Anhang
 
Guten Abend,

ich habe auf diesem Gebiet eine ganz große Lücke...
Kann mir jemand das "try" and "finally" mal für meine beschriebene Prozedur zeigen. Ich hoffe, dass ich dann den Zusammenhang verstehe. Ich habe es selber versucht, aber nur Errors bekommen.

Vielen Dank

Ykcim

Luckie 5. Dez 2011 21:35

AW: SendMail mit Anhang
 
DeddyH hat dir doch ein Beispiel gepostet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 Uhr.
Seite 1 von 2  1 2      

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