![]() |
RTF-Text mit Indy-SMTP versenden
Hallo,
ich versuche ein EMail-Programm in meiner Applikation zu erstellen aber ich kriege es nicht hin :wall: das der Richtext in der Mail erscheint entweder wird er als Anhang oder mit allen Steuerzeichen ausgegeben.
Delphi-Quellcode:
Entweder benutze ich nicht den richtigen Contenttype oder weise den Text nicht korrekt zu.
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; Ü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 |
Re: RTF-Text mit Indy-SMTP versenden
Hallo, :hi:
kein Indy-Experte unterwegs ? :bounce2: |
Re: RTF-Text mit Indy-SMTP versenden
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)... |
Re: RTF-Text mit Indy-SMTP versenden
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. |
Re: RTF-Text mit Indy-SMTP versenden
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 |
Re: RTF-Text mit Indy-SMTP versenden
Zitat:
![]() |
Re: RTF-Text mit Indy-SMTP versenden
Du hast recht es ist Richtext (HTML) in meinen jugendlichen Leichtsinn hatte ich gehofft das wäre kompatibel :zwinker: .
Der Ansatz bzw. die Thematik des Links ist durchaus richtig aber anscheinend nicht zu Ende geführt. Werde jetzt mal global suchen :coder: . Weitere Erkenntnisse erwünscht :hi: . Mfg. Frank |
Re: RTF-Text mit Indy-SMTP versenden
Zitat:
|
Re: RTF-Text mit Indy-SMTP versenden
@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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz