AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi RTF-Text mit Indy-SMTP versenden
Thema durchsuchen
Ansicht
Themen-Optionen

RTF-Text mit Indy-SMTP versenden

Offene Frage von "Sourcemaker"
Ein Thema von Sourcemaker · begonnen am 9. Okt 2003 · letzter Beitrag vom 20. Okt 2003
Antwort Antwort
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#1

RTF-Text mit Indy-SMTP versenden

  Alt 9. Okt 2003, 17:04
Hallo,

ich versuche ein EMail-Programm in meiner Applikation zu erstellen aber ich kriege es nicht hin das der Richtext in der Mail erscheint entweder wird er als Anhang oder mit allen Steuerzeichen ausgegeben.

Delphi-Quellcode:
procedure TFEMailEdit.btSendClick(Sender: TObject);
var
   i : integer;
function GetRichEditText(const Edit:TRxRichEdit) : string;
var
  stream : TMemoryStream;
  pData : PChar;
begin
  Result := '';
  stream := TMemoryStream.Create;
  try
    edit.Lines.SaveToStream(stream);
    pData := stream.Memory;
    Result := pData;
    IdMsgSend.Body.SetText(pData);
  except
  end;
  stream.Free;
end;

begin
   SMTP.AuthenticationType := atNone;

   if SMTP.Connected then
   begin
      IdMsgSend.ContentType := 'application/rtf';
      case rgEncoding.ItemIndex of
         0: IdMsgSend.Encoding := meMime;
         1: IdMsgSend.Encoding := meUU;
      end;
      IdMsgSend.From.Text := Trim(edUserId.Text)+' '+Trim(edFromAdress.Text);
      IdMsgSend.ReplyTo.EMailAddresses := Trim(edFromAdress.Text);
      IdMsgSend.Recipients.EMailAddresses := CharRem(#10+#13,meToAddress.lines.Text);
      IdMsgSend.CCList.EMailAddresses := edToCarbonCopy.lines.Text;
      IdMsgSend.BccList.EMailAddresses := meToBlindCarbonCopy.lines.Text;
      GetRichEditText(edText);
      //IdMsgSend.Body.SetText(edText.Lines.GetText); //.Assign(edText.Lines);
      IdMsgSend.MessageParts.Clear;
      for i := 0 to lbAttachment.Items.Count-1 do
      begin
         TIdAttachment.Create(IdMsgSend.MessageParts, lbAttachment.items.Text);
      end;

      IdMsgSend.Subject := edSubject.Text;
      IdMsgSend.ReplyTo.EMailAddresses := edFromAdress.Text;
      try
         SMTP.Send(IdMsgSend);
         //SMTP.ClearParameters;
         SMTP.DisConnect;
         Connect;
         if lDelAttachAfterSuccess then
         begin
            for i := 0 to lbAttachment.Items.Count-1 do
            begin
               if not FErase(lbAttachment.Items[i]) then
                  FMain.WriteMailProt(coLogError, [edSubject.Text, 'Attachment: '+lbAttachment.Items[i]+' konnte nicht gelöscht werden.', 'btSendClick', cPubLoginName]);
            end;
         end;
      except
         on e:Exception do
         begin
            if not lAutoMail then ShowMessage('Ein Fehler ist aufgetreten.'+#13+e.Message);
            lbStatus.items.add( 'Sendefehler ... Adresse richtig ?');
            lbStatus.ItemIndex := lbStatus.Items.Count-1;
            FMain.WriteMailProt(coLogError, [edSubject.Text, lbStatus.Items[lbStatus.Items.Count-1], 'btSendClick', cPubLoginName]);
         end;
      end;
   end;
end;
Entweder benutze ich nicht den richtigen Contenttype oder weise den Text nicht korrekt zu.
Über den Contenttype bin ich mir auch nicht ganz im klaren, gilt der für den Body oder den Attachments (es werden und Umständen auch RTF-Files angehangen) oder für beides ?

Für entsprechen Beispielcode oder hilfreiche Tips wäre ich sehr dankbar.

Mfg.

Frank
Frank
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: RTF-Text mit Indy-SMTP versenden

  Alt 10. Okt 2003, 11:56
Hallo,

kein Indy-Experte unterwegs ?

Frank
  Mit Zitat antworten Zitat
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#3

Re: RTF-Text mit Indy-SMTP versenden

  Alt 10. Okt 2003, 20:57
Das geht sogar mittels

<< IdMsgSend.ContentType := 'plain/text'; >>

beim Abschicken. [Edit: (Im Grunde genommen ist der IdMsgSend.ContentType eigentlich in dem Falle fast egal, in dem du auf der Empfangsseite auch wieder ein eigenes POP3-Programm hast. Der hat keine wirkliche Funktion, sondern dient dir quasi dort nur zu deiner eigenen Information). [/Edit]

Lädst du in deinem Pop3-Programm den von IdMessage1.Body.Text da angelieferten String denn auch (wirklich) wieder per Streamverfahren in das RichEdit-control zurück?


Ansonsten würde ich sagen: Der IdMsgSend.ContentType-String gilt wohl für die eigentliche Mail insgesamt. Aber der kann auch manchmal einfach leer sein, ist also noch nichtmal unbedingt essentiell. In diesen Fällen entscheidet dann wahrscheinlich der Wert von IdMessage1.MessageParts.Count alleine. Ist der Wert 0, dann findet man den Text in IdMessage1.Body. Ist der Wert >0, dann hat man eben die einzelnen Parts zu untersuchen. Die haben übrigens auch wieder jeweils einen eigenen ContentType (da sie von TIdMessagePart (ohne 's' am Ende) abstammen)...
MfG

  Mit Zitat antworten Zitat
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#4

Re: RTF-Text mit Indy-SMTP versenden

  Alt 11. Okt 2003, 14:12
Fortsetzung:

Solltest du allerdings wider Erwarten (*g*) ein entsprechendes Ergebnis in einem fremden Mail-Programm sehen wollen ist das natürlich wieder etwas anderes. Dann wäre die Angabe von 'application/rtf' als ein etwas seltenerer ContentType natürlich logischerweise irgendwie wieder Pflicht. Allerdings glaube ich nicht, dass übermäßig viele EMail-Programme auch ein TRichEdit da als Ausgabe-Komponente eingebaut haben. Wahrscheinlich werden sie dafür schon eher ein TWebBrowser-Control benutzen, um damit auch die häufigeren HTML-Mails richtig wiedergeben zu können.
MfG

  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: RTF-Text mit Indy-SMTP versenden

  Alt 20. Okt 2003, 09:35
Erstmal danke für die Antwort aber das was ich meinte ist folgendes:
Wenn man eine neue Mail z.B. mit Outlook Express erstellt hat man die Wahl des Formats Text/Richtext und das möchte ich auch. Also wenn ich den Text aus meinen Richedit an Indy übergebe
erwarte ich eine Mail im Richtext-Format zu erhalten lesbar mit z.B. Outlook Express.

Mfg.

Frank
Frank
  Mit Zitat antworten Zitat
Benutzerbild von X-Dragon
X-Dragon

Registriert seit: 14. Jan 2003
Ort: Schortens
289 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: RTF-Text mit Indy-SMTP versenden

  Alt 20. Okt 2003, 13:36
Zitat von Sourcemaker:
Erstmal danke für die Antwort aber das was ich meinte ist folgendes:
Wenn mann eine neue Mail z.B. mit Outlook Express erstellt hat man die Wahl des Formats Text/Richtext und das möchte ich auch. Also wenn ich den Text aus meinen Richedit an Indy übergebe
erwarte ich eine Mail im Richtext-Format zu erhalten lesbar mit z.B. Outlook Express.

Mfg.

Frank
Ich meine Outlook unterscheidet nur zwischen HTML und Nur-Text . Also müsstet du dann eigentlich dein Richtext in HTML umwandeln, sowies hier z.B.: http://www.delphipraxis.net/internal...ect.php?t=9851
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: RTF-Text mit Indy-SMTP versenden

  Alt 20. Okt 2003, 14:01
Du hast recht es ist Richtext (HTML) in meinen jugendlichen Leichtsinn hatte ich gehofft das wäre kompatibel .
Der Ansatz bzw. die Thematik des Links ist durchaus richtig aber anscheinend nicht zu Ende geführt.
Werde jetzt mal global suchen .

Weitere Erkenntnisse erwünscht .

Mfg.

Frank
Frank
  Mit Zitat antworten Zitat
Benutzerbild von X-Dragon
X-Dragon

Registriert seit: 14. Jan 2003
Ort: Schortens
289 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: RTF-Text mit Indy-SMTP versenden

  Alt 20. Okt 2003, 15:16
Zitat von Sourcemaker:
Du hast recht es ist Richtext (HTML) in meinen jugendlichen Leichtsinn hatte ich gehofft das wäre kompatibel .
Der Ansatz bzw. die Thematik des Links ist durchaus richtig aber anscheinend nicht zu Ende geführt.
Werde jetzt mal global suchen .

Weitere Erkenntnisse erwünscht .

Mfg.

Frank
Hab noch eine Erkenntnis, allerdings nicht geprüft . Der erste Post im verlinkten Thread wurde mehrfach von einem Mod bearbeitet, so das es eigentlich funktionieren sollte. Hab ich zuerst auch übersehen .
  Mit Zitat antworten Zitat
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#9

Re: RTF-Text mit Indy-SMTP versenden

  Alt 20. Okt 2003, 15:29
@Sourcemaker

Wenn Outlook eine Mail als 'nur Text' abschickt, dann handelt es sich dabei um einen Plain-Text, dh. in deinem selbst geschriebenen Mail-Programm wird der dann auch durch seinen ContentType = 'text/plain...' als solches identifizierbar.

Schickt Outlook die Mail als 'HTML' ab, ist der ContentType (IdMessage1.ContentType) = 'multipart/alternative....' und IdMessage1.MessageParts.Count >= 2. Und zwar schickt er die Mail dann quasi doppelt gemoppelt ab, einmal in Part1 als Plain-Text und in Part2 als HTML-Text. (Wenigstens kann ich das in meinem Mail-Programm so beobachten).

Außerdem ist ein Plain-Text eben gerade kein RichText, dh. in einem solchen Text gibt es intern keinerlei zusätzliche Formatinformationen mehr, z.B. bezüglich einer sich ändernden Farbe u. Style. Folglicherweise kann man dem Text solche Attribute auch nicht zuordnen, bzw. ihn in solchen auftauchen lassen. Das ist übrigens auch der Grund dafür, warum beim nun (Plain-)Text-Editieren einer Mail in Outlook das Popup-Menue dann auch quasi 'zur Hälfte' ausgeschaltet ist, weil diese Menuepunkte bei diesem Text eben quasi keinen Sinn machen.

...das nur noch mal am Rande.
MfG

  Mit Zitat antworten Zitat
Antwort Antwort


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 02:00 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