Autor Beitrag
Gagga
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 03.05.20 18:39 
Hallo!

Aus meiner Anwendung sollen E-Mails verschickt werden können. Ich nutze dafür die INDY-Komponenten IdSMTP und IdMessage. Den Text kann der Anwender im RichEdit-Feld verfassen und theoretisch auch formatieren. Ich würde dem Anwender im Rahmen der Mail-Gestaltung gerne ermöglichen, seinen Text im Fettdruck zu verfassen, den Font in der Größe und Farbe zu variieren und eine Grafik einzufügen.

Ich habe inzwischen einiges probiert, so z. B. den RichText mit Formatierungen gestreamt und verschickt oder in html gewandelt und verschickt. Aber immer kommt eine Mail mit dem Quellcode bei mir an. Sowohl im Online-Webclient, wie auch in Outlook.

Wäre nett, wenn jemand einen Tipp hätte.

Gruß
Gagga
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4230
Erhaltene Danke: 891

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: So 03.05.20 19:25 
Hallo und :welcome:,

welchen Content-Type verwendest du denn beim Senden?
Vllt. hilft dir folgender Link weiter: How do you send HTML messages with Indy?
Gagga Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 03.05.20 19:30 
Hallo!

Danke für deine Antwort. Den Link kenne ich, habe die Snippets auch getestet. Also auch den Content-Typ (natürlich) entsprechend geändert. Kam aber immer zu den geschilderten Ergebnissen.

Gruß
Gagga


Moderiert von user profile iconTh69: Vollzitat entfernt.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4230
Erhaltene Danke: 891

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: So 03.05.20 19:56 
Dann zeig mal deinen (relevanten) Code dazu, sowie den empfangenen Text.
Und welche INDY-Version verwendest du?
Gagga Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: So 03.05.20 20:53 
Ich verwende Indy10. Der empfangene Text war:
ausblenden HTML-Dokument
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:
<html>
<body>
<!DOCTYPE HTML PUBLIC 
"-//W3C//DTD HTML 4.01 
Transitional//EN"
 
"http://www.w3.org/TR/html4/loos
e.dtd"
>
<html>
<head>
<title></title>
<meta name="editor" 
content="html-editor phase 5">
</head>
<body text="#000000" 
bgcolor="#F00FFF" link="#FF0000" 
alink="#FF0000" vlink="#FF0000">
Hallo<br>

<p 
align="center"><b><h2>Hallo</h
2></b></p>
</body>
</html>
</body>
</html>

Wegen des Codes muss ich morgen schauen. Ich habe die Tests vor Wochen in einem "Versuchs-Projekt" parallel zum eigentlichen Projekt gemacht. Immer etwas neues probiert und es am Ende erst einmal gelassen. Muss etwas suchen, mich jetzt aber der Familie widmen. :-)

Gruß
Gagga

Moderiert von user profile iconTh69: HTML-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4230
Erhaltene Danke: 891

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Mo 04.05.20 08:53 
Da scheint ein komplettes HTML innerhalb von HTML-Body versendet zu werden.
Ich denke, du solltest mal der Reihe nach vorgehen und wieder von vorne die Tests machen: zuerst "text/plain", dann "text/html" etc. und jeweils mit einem einfachen Text. Und erst wenn das einwandfrei klappt, dann nach und nach Formatierungen einfügen.
Und wenn du dann eine fehlerhafte Mail erhältst, überprüfen, was du bei Indy entsprechend einstellen (bzw. ändern) mußt.
Gagga Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 04.05.20 12:19 
Genauso bin ich bei meinem erwähnten "Versuchs-Projekt" vorgegangen. Daher funktioniert mein Programm mit unformatiertem Text einwandfrei.
Versucht habe ich mich zunächst mit Formatierungen im RichEdit-Feld mit folgendem Code:

ausblenden volle Höhe 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:
var
  b: TIdMessageBuilderRtf;
  s: TStringStream;
begin
 s := TSTringStream.Create;
  try

    RE1.Lines.SaveToStream(s);
      b := TIdMessageBuilderRtf.Create;
      try
        s.Position := 0;
        b.Rtf.LoadFromStream(s);
        b.FillMessage(IdMessage1);
      finally
        b.Free;
      end;

  finally
    s.Free;
  end;

   try
   IdMessage1.From.Address := edFrom.Text;
    IdMessage1.Subject := eBetreff.Text;
    IdMessage1.ContentType:='application/rtf';

    IdSMTP1.Connect;
   IdMessage1.Recipients.EMailAddresses := edTo.Text;
    IdSMTP1.Send(IdMessage1);
  finally
    IdSMTP1.Disconnect;
  end;


Schaue ich mir die ankommende E-Mail in meinem Web-Client an, sehe ich ein leeres Textfeld und einen mit „Teilstück 1“ bezeichneten Anhang ohne Dateierweiterung. Öffne ich diesen Anhang mit Wordpad, sehe ich meinen formatierten Text.

In Outlook empfange ich eine E-Mail ohne Text mit zwei Anhängen, die beide den Namen des Betreffs tragen und die Dateiendung “dat“. Öffne ich diese Anhänge mit Wordpad, sehe ich jeweils meinen formatierten Text.

Dann habe ich mich mit folgender Funktion (gefunden in einem Forum) am html-Versand versucht:

ausblenden volle Höhe 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:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
function MeinMailVersand(const aAbsender, aMailCopyTo, aUserName, aHost, aPassword, aEmpfaenger, aSubject, aTextBody, aHtmlBody, aDateianlage: stringvar aMsg: string) : boolean;
var
  Html: TStrings;
  HtmPart, TxtPart: TIdText;
  SMTP: TIdSMTP;
  BmpPart: TIdAttachmentFile;
  EMail: TIdMessage;
begin
  aMsg := '';
  Result := false;
  EMail := nil;
  Html := nil;
  SMTP := nil;
  try
    SMTP := TIdSMTP.Create;
    Html := TStringList.Create;
    EMail := TIdMessage.Create(nil);
    {-HTML-Daten-}
    Html.Add('<html>');
    Html.Add('<head>');
    Html.Add('</head>');
    Html.Add('<body>'+aHtmlBody);
    //Html.Add('<img src="cid:us.jpg" />');
    Html.Add('</body>');
    Html.Add('</html>');
    {-Mail-Daten-}
    EMail.From.Address := aAbsender;
    EMail.Recipients.EMailAddresses := aEmpfaenger;
    EMail.Subject := aSubject;
    EMail.ContentType := 'multipart/mixed';
    EMail.Body.Assign(Html);
    {-Lesebestätigung-}
    //EMail.ExtraHeaders.AddValue('Disposition-Notification-To', aAbsender);
    {-Text-Part-}
    if aTextBody <> '' then begin
      TxtPart := TIdText.Create(email.MessageParts);
      TxtPart.ContentType := 'text/plain';
      TxtPart.Body.Text := aTextBody;
    end;
    {-Dateianlage-}
    if aDateianlage <> '' then begin
    HtmPart := TIdText.Create(email.MessageParts, html);
    HtmPart.ContentType := 'text/html';
    BmpPart := TIdAttachmentFile.Create(EMail.MessageParts, aDateianlage);
    BmpPart.ContentType := 'image/jpeg';
    BmpPart.ContentDisposition := 'inline';
    BmpPart.ExtraHeaders.Values['content-id'] := 'us.jpg';
    BmpPart.DisplayName := 'us.jpg';
    end;
    {-Benutzerdaten-}
    SMTP.Username := aUserName;
    SMTP.Host := aHost;
    SMTP.Password := aPassword;
    {-fertig zum Versenden-}
    try
      SMTP.Connect;
      try
        SMTP.Send(EMail);
        if aMailCopyTo <> '' then begin
          EMail.Subject := '[Kopie E-Mail an ' + aEmpfaenger+ '] - ' + EMail.Subject;
          EMail.Recipients.EMailAddresses := aAbsender;
          EMail.ExtraHeaders.Clear;
          SMTP.Send(EMail);
        end;
        aMsg := 'E-Mail an <'+aEmpfaenger+'> erfolgreich gesendet um ' + DateTimeToStr(Now);
        Result := True;
      except
        on E: Exception do aMsg := 'Fehler beim Mail-Versand: ' + E.Message;
      end;
    finally
      SMTP.Disconnect;
    end;
  finally
    EMail.Free;
    Html.Free;
    SMTP.Free;
  end;
end;


Im Web-Client sehe ich das, was ich für aTextBody an die Funktion übergebe von dem, was ich als aHtmlBody übergebe, sehe ich nichts. Es gibt dort auch keinen Anhang.

In Outlook wird der html-Quelltext angezeigt:

ausblenden HTML-Dokument
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<html>
<head>
</head>
<body>Hallo<br>

<p 
align="center"><b><h2>Hallo</h
2></b></p>


</body>
</html>


Vorstehende Zeilen stehen in einem Memo-Feld: Diese Zeilen habe ich als aHtmlBody an die Funktion übergeben.

Mit diesen Ergebnissen habe ich meine Versuche Mitte April beendet. Jetzt bin ich soweit, dass alles andere läuft, Serienmails, Rundmails, aber eben ohne Formatierung.

Gruß
Gagga
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4230
Erhaltene Danke: 891

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Mo 04.05.20 13:26 
Das ist rätselhaft
Beim RTF sehe ich jetzt auch keinen Fehler. Evtl. mal "text/rtf" probieren, aber das sollte eigentlich auch keinen Unterschied machen (und laut Internet unterstützt Outlook auch RTF).

Und beim HTML könntest du mal direkt "text/html" verwenden und den Text sowie den Anhang weglassen.

PS: Ich schreibe dir noch eine PN.

Für diesen Beitrag haben gedankt: Gagga
Gagga Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 04.05.20 14:24 
Ich danke Dir für die Antwort, allerdings sieht so mein Code an einschlägiger Stelle aus:

ausblenden Delphi-Quelltext
1:
 ContentType:='text/richtext';//'text/rtf';// 'text/richtext';//'application/rtf'; //  'text/plain'; //'text/html';					

Text hatte ich auch schon weggelassen. Ohne Erfolg.

Gruß

Gagga

Moderiert von user profile iconTh69: Vollzitat entfernt.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4230
Erhaltene Danke: 891

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Mo 04.05.20 14:54 
OK, Test-Mail ist bei mir erfolgreich angekommen (s. PN-Antwort).

PS: Bitte hier nicht immer Vollzitate (full quotes) verwenden!
Gagga Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 04.05.20 16:18 
Html an Outlook funktioniert, ohne dass ich nachvollziehen kann, was vorher nicht passte. Meinen Webclient haue ich in die Tonne.

RTF ist nach wie vor ein Problem. Versende ich mit text/rtf oder text/rich/text, bekomme ich jeweils eine leere Mail mit einem Anhang mit der Endung txt. In wordpad geöffnet, habe ich meinen formatierten Text. Mit text/html verschickt, bekomme ich ebenfalls eine leere Mail mit einem Anhang Endung txt. Auch hier finde ich meinen formatierten Text in wordpad.

Kannst Du mir noch eine Rückmeldung zu der Mail an Dich im RTF-Format geben?

Gruß
Gagga
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4230
Erhaltene Danke: 891

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Mo 04.05.20 16:43 
Da ist keine weitere Mail bei mir angekommen. Dann hat das wohl mein Provider unterbunden, da mir nur die Auswahl zwischen "plain text" und "HTML" in der Ansicht angeboten wird.

Nachtrag: Da ist doch eine Mail um 16:54 bei mir angekommen, aber diese wird nur (in beiden Programmen) - wie bei dir - als leerer Text mit Anhang "Teilstück 1 (365 Bytes)" angezeigt. Und dadrin ist dann der RTF-formatierte Text.

Ich denke, du wirst dann wohl HTML benutzen müssen (wenn du möglichst viele EMail-Clients unterstützen möchtest).

Edit: Evtl. hilft dir dann aus der JEDI Komponentensammlung die Klasse TJvRichEditToHtml?!

Für diesen Beitrag haben gedankt: Gagga
Gagga Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 04.05.20 18:14 
Da wird mir wohl nichts anderes übrig bleiben. Hatte mir die 24 MB schon `mal heruntergeladen, aber die Hoffnung gehegt, ich komme irgendwie anders zum Ziel.

Das grenzt langsam an Arbeit. ;-)

Dir auf jeden Fall ganz herzlichen Dank für Deine Unterstützung!

Gruß
Gagga
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4230
Erhaltene Danke: 891

Win10
C#, C++ (VS 2015/17)
BeitragVerfasst: Di 05.05.20 08:51 
Wenigstens weißt du jetzt, daß es grundsätzlich mit dem HTML-Code funktioniert.

Ja, so ist das beim Programmieren: kaum hat man eine Sache am Laufen, kommen die nächsten Hürden... ;-)