Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Tabelle in e-Mail einbauen (https://www.delphipraxis.net/161739-tabelle-e-mail-einbauen.html)

Ykcim 18. Jul 2011 15:01

Tabelle in e-Mail einbauen
 
Hallo Zusammen,

Ich programmiere mit TurboDelphi und MySQL...
Ich habe in meinem Programm eine Funktion eingebaut, damit bei bestimmten Ereignissen an einen variablen Empfängerkreis eine e-mail automatisch verschickt wird. Das klappt auch ganz gut.

Jetzt kommt die Schwierigkeit. Ich möchte den Inhalt von einem StringGrid in gleicher tabellarischer Form in diese e-Mail einfügen und ich weiß nicht wie das geht. Ich habe heute das erste Mal mit der Mail Funktion gespielt und habe dazu folgenden (zugegebener Maßen geklauten :oops:) Code verwendet:

Delphi-Quellcode:
function SendEmail(Recipient:string;CCList:string;sSubject:string;Body:TStringList):boolean;
var
  nAlarmnr:integer;
begin
 idSMTP:=TidSMTP.Create;
 idMessage:=TidMessage.Create;
 idSMTP.Host  := 'xxx.xx.xx.xxx';
 idSMTP.Username := 'Max.Mustermann';
 idSMTP.Password := 'master';
 idSMTP.Port  := 25;


 idMessage.From.text :='Max@mustermann.de';
 idMessage.Sender.text:=idMessage.From.text;


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


 idMessage.Body.Clear;
 idMessage.Body := Body;


 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;
Der Aufruf sieht so aus:
Delphi-Quellcode:
st := TStringList.Create;
  st.Text := Text;
  SendEmail(empfaenger, '', betreff, st);
  st.Free;
Weil der Text variabel ist, habe ich mir diesen ganz wild zusammengebaut. Allerdings benötige ich für eine Mail eine Tabelle.

Kann mir jemand einen Tip geben (außer, dass man keine Codes klauen soll) wie ich eine automatische Mail mit einem StringGrid in einer Tabelle erstelle?:?:

Vielen Dank:!:

Ykcim

s.h.a.r.k 18. Jul 2011 15:40

AW: Tabelle in e-Mail einbauen
 
Mach den Body halt als HTML. Darin hast ja dann die Möglichkeit das <table>-Tag zu verwenden

xxl1 18. Jul 2011 15:40

AW: Tabelle in e-Mail einbauen
 
Ein Stringgrid ist auch nur eine Tabelle und da in E-Mails HTML Code verwendet werden darf würde ich dir raten diese zu verwenden!
http://de.selfhtml.org/html/tabellen/aufbau.htm

Edit: da war einer schneller, deswegen der reundante inhalt

s.h.a.r.k 18. Jul 2011 15:42

AW: Tabelle in e-Mail einbauen
 
[OT] Ich war schneller :mrgreen: [/OT]

Ykcim 18. Jul 2011 15:45

AW: Tabelle in e-Mail einbauen
 
Hallo Zusammen,

VIELEN DANK für die Antworten.

Wenn ich die Mail via html aufbauen kann, denke ich, dass ich das hinbekommen. Wo mir aber völlig die Idee fehlt, ist die Übernahme des html-Codes in meine Mail.

Könnte Ihr mir da noch einen Tip geben - bin auf dem Gebiet erst seit heute unterwegs...

Vielen Dank
Ykcim

s.h.a.r.k 18. Jul 2011 15:50

AW: Tabelle in e-Mail einbauen
 
Was genau meinst du? Du bekommst doch den Body als StringList geliefert, d.h. an deiner bisherigen Methode musst du nichts ändern. Du musst in die StringList halt nur das HTML schrieben und du bist fertig.

Ykcim 18. Jul 2011 15:52

AW: Tabelle in e-Mail einbauen
 
Okay - vielleicht hilft mir diese Info schon weiter! Ich werde es ausprobieren und mich dann melde!

Vielen Dank

Ykcim 18. Jul 2011 21:56

AW: Tabelle in e-Mail einbauen
 
Hallo,

ich war dann wohl doch ein wenig zu optimistisch... Ich habe meiner StringList über die Textvariable einen kleinen HTML-Code übergeben. Aber daraus wurde dann keine HTML-Mail, sondern der Inhalt der Mail war mein HTML-Code...

Hier eine kleine Veranschaulichung
Delphi-Quellcode:
Text:='<HTML>'+#13#10;
  Text:=Text+'<HEAD>'+#13#10;
  Text:=Text+'</HEAD>'+#13#10;
  Text:=Text+'<body><h1>Hello</h1>'+#13#10;
  Text:=Text+'</BODY>'+#13#10;
  Text:=Text+'</HTML>';
  st := TStringList.Create;
  st.Text := Text;
  SendEmail(empfaenger, '', betreff, st);
  st.Free;
Ich wäre sehr dankbar, wenn mir jemand einen Tip geben könnte - damit ich begreife, was ich tun muss und wie ich was zu ändern habe.

Vielen Dank
Ykcim

s.h.a.r.k 18. Jul 2011 22:03

AW: Tabelle in e-Mail einbauen
 
Setz den ContentType deiner idMessage noch 'text/html'.

Ykcim 18. Jul 2011 22:38

AW: Tabelle in e-Mail einbauen
 
Ja ja, so ist das mit geklauten Codes - wusste erst nicht genau, wo ich das in meiner Umgebung unterzubringen hatte. Aber ich habe es nachvollziehen können und jetzt klappt es. Jedenfalls habe ich jetzt den richtigen Output aus meinem HTML-Code...

Ich mache mich jetzt mal ran und versuche das Ganze mit meiner Tabelle umzusetzen.

Vielen Dank für den hilfreichen Tip zur späten Stunde!

Ykcim

bernerbaer 18. Jul 2011 22:55

AW: Tabelle in e-Mail einbauen
 
ungetestet (hab kein delphi auf dem Netbook)
stringgrid to table
Delphi-Quellcode:
....
sl.add('<table>'>;

for i:=0 to SG.RowCount - 1  do
begin
  sl.add('<tr>');
  for p:= 0 to SG.ColCount - 1 do
  begin
   sl.add('<td>');
   sl.add(SG.Cells[p,i]);
   sl.add('</td>');
  end;
  sl.add('</tr>');
end;
sl.add('</table>');
...
Selbstverständlich kann das ganze noch durch css formatiert werden

(sl = Stringlist
SG = Stringgrid)

Ykcim 19. Jul 2011 16:05

AW: Tabelle in e-Mail einbauen
 
Hallo Zusammen,

das Problem ist nun gelöst - dank Eurer Hilfe.

Also kurze Beschreibung, wie ich vorgegangen bin.
1. Ich habe mir meine Vorlage unter Word erstellt und dann als "gefilterte HTML" Datei abgespeichert.
2. Habe den QuellCode mit dem Texteditor geöffnet und die Vabrialen Einträge durch "Variablen" (Markante eindeutige Wörter) ersetzt
3. Habe mit nachfolgender Zeile den Text in eine TStringList eingelesen
Delphi-Quellcode:
// Programmpfad ermitteln
  Pfad:=ExtractFilePath(ParamStr(0));
  Pfad:=Pfad+'\Temp\KommentarMailVorlage.txt';
.
.
.
st.LoadFromFile(pfad);
4. Dann die einzelnen Variablen mit nachstehender Zeile ersetzt (Text vorher den Variabel-Inhalt zugewiesen)
Delphi-Quellcode:
st.Text:=StringReplace(st.Text, 'AUFTRAGSNR', Text,[rfReplaceAll, rfIgnoreCase]);


5. Dann habe ich mir mit nachstehendem Code meine HTML-Tabelle zusammengebaut
Delphi-Quellcode:
for i:=1 to Kommentare.RowCount - 1 do
    begin
      Text:=Text+'<tr>'+#13#10;
      for j:= 0 to Kommentare.ColCount - 1 do
        begin
          Text:=Text+'<td><p class=MsoPlainText>'+#13#10;
          Text:=Text+Kommentare.Cells[j,i]+#13#10;
          Text:=Text+'</td>'+#13#10;
         end;
      Text:=Text+'</tr>'+#13#10;
    end;
  Text:=Text+'</table>'+#13#10;
6. Und als letztes diesen zusammengebauten Code an die Stelle der Variable TABELLE in meiner Stringlist ersetzt
Delphi-Quellcode:
st.Text:=StringReplace(st.Text, 'TABELLE', Text,[rfReplaceAll, rfIgnoreCase]);


Ich habe aus Euren Antworten diesen Mix als den am besten funktionierenden angesehen.

Vielen Dank für Eure Hilfe - das wäre sonst nie was geworden.

Gruß

Ykcim

bernerbaer 19. Jul 2011 19:51

AW: Tabelle in e-Mail einbauen
 
und wo wird <p> geschlossen (</p>)

Valle 21. Jul 2011 00:29

AW: Tabelle in e-Mail einbauen
 
Außerdem fehlt der Doctype, das Encoding, ein leeres <head> kann man sich sparen, bei der Klasse des Paragraphen fehlen Anführungszeichen und vor allem die ganzen #13#10 solltest du dir schenken, denn diese spielen im HTML-Code absolut keine Rolle und machen nur den Code unleserlich. ;-)

Liebe Grüße,
Valentin


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 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