2010-07-22 23 views
5

Me gustaría realizar la siguiente tarea: convertir un contenido TRichEdit (un texto rtf) en un cuerpo de mensaje de correo electrónico no de texto sin formato.Enviar un correo electrónico con texto rtf en delphi

MAPI no es compatible con rtf, pero ¿hay alguna manera de hacerlo tal vez con Indy?

El problema es que rtf es rtf y los correos electrónicos son texto sin formato o HTML.

¿Alguien puede sugerirte un truco? ¿Es posible convertir rtf a texto usando TWebBrowser?

Básicamente, el escenario es:
1) El usuario escribe de correo electrónico en una forma delphi,
2) El correo electrónico se envía luego con MAPI para el cliente de correo predeterminado (por lo que se genera una nueva ventana de correo electrónico, y el cuerpo del mensaje es el mismo que tenía en forma delphi)
3) El usuario envía el correo electrónico desde el cliente de correo

De todos modos, MAPI solo acepta texto sin formato.

ACTUALIZACIÓN:

Tratando con Indy escribí esto, pero aún así no funciona, como puedo enviar un correo electrónico a mi cuenta de Gmail que recibo un mensaje con el cuerpo vacío y NONAME apego falso.

uses IdMessageBuilder; 


procedure SendMail; 
var 
    MBuilder: TIdMessageBuilderRtf; 
    MyMemoryStream: TMemoryStream; 
begin 
    try 
    MBuilder := TIdMessageBuilderRtf.Create; 
    MyMemoryStream := TMemoryStream.Create; 
    MBuilder.RtfType := idMsgBldrRtfRichtext; 
    // RichEdit1 has PlainText set to False 
    // at design time I pasted some formatted text onto it 
    RichEdit1.Lines.SaveToStream(MyMemoryStream); 
    MBuilder.Rtf.LoadFromStream(MyMemoryStream); 
    MBuilder.FillMessage(IdMessage1); 
    IdSMTP1.Connect; 
    IdSMTP1.Send(IdMessage1); 
    IdSMTP1.Disconnect; 
    finally 
    MyMemoryStream.Free; 
    MBuilder.Free; 
    end; 
end; 

Respuesta

1

Aparentemente (googled esto mismo, como debo enviar algunos de Delphi, pero no en este caso), la opción PR_RTF_COMPRESSED de MAPI (extendido) puede ayudar aquí. También mira this.

+0

me gustaría dejar de usar MAPI, prefiero envió correos electrónicos a través idSMTP directamente – LaBracca

7

Indy admite el envío de correos electrónicos RTF. Envíe un correo electrónico de la misma manera que enviaría un correo electrónico HTML, simplemente use el tipo de contexto "text/rtf", "text/enrriquecido" o "text/richtext", y envíe los códigos RTF brutos generados por TRichEdit cuando su propiedad PlainText se establece en falso. Además, si usa Indy 10, mire su clase TIdMessageBuilderRtf para configurar correctamente la estructura TIdMessage.

+0

es que hay un ejemplo que muestra cómo hacerlo? Intenté con esto, pero recibí un mensaje incorrecto: procedimiento SendMailRtf; var MBuilder: TIdMessageBuilderRtf; begin MBuilder: = TIdMessageBuilderRtf.Create; MBuilder.RtfType: = idMsgBldrRtfRichtext; MBuilder.Rtf: = RichEdit1.Lines; // obtiene rtf de reichedit MBuilder.FillMessage (IdMessage1); MBuilder.Free; IdSMTP1.Connect; IdSMTP1.Send (IdMessage1); IdSMTP1.Disconnect; final; – LaBracca

+0

intenté encontrar un ejemplo para ti. No lo obtuve, pero le dieron una solución alternativa a alguien que estaba buscando la misma solución. Eche un vistazo a http://www.nldelphi.com/forum/showthread.php?t=15822. (En holandés: google translate puede ser tu amigo). También mencionan jvRichEditToHTML. – Tobiasopdenbrouw

+0

La propiedad TRichEdit.Lines no proporciona acceso a los códigos RTF que se necesitan para un correo electrónico RTF. Establezca la propiedad TRichEdit.PlainText en False y llame al método TRichEdit.SaveToStream() en su lugar, y luego pase el TStream resultante al método TIdMessageBuilderRtf.RTF.LoadFromStream(). –

1

¿Es posible convertir rtf a texto usando TWebBrowser?

Puede convertir RTF a texto mediante TRichEdit - pero obviamente esto pierde todo el formato:

Using TRichEdit at runtime without defining a parent

2: Usted puede encontrar un número de RTF a HTML convertidores en línea - algunos gratuitos, otros no . Como estos:

http://wiki.delphi-jedi.org/wiki/JVCL_Help:TJvRichEditToHtml https://www.habarisoft.com/scroogexhtml_delphi.html http://www.easybyte.com/products/rtf2html.html

http://www.sautinsoft.com/products/rtf-to-html/index.php

3: Puede cambiar el nombre del archivo adjunto noname como NONAME.MHT y continuación, debería ser capaz de abrirse con el explorador de Internet.

Sin embargo, es posible que desee considerar el uso de un control de edición HTML, en lugar de un TRichEdit. Entonces no tienes conversión de la que preocuparte.Algo parecido a esta pregunta: -

WYSIWYG HTML Editor Component for Delphi

+0

@Downvoter: ¿fue el problema NONAME o algo más? Avísame ... – Roddy

+0

Es curioso que hayas vinculado mi pregunta (usando TRichedit en tiempo de ejecución ...) – LaBracca

+2

@ user193655 - Ah, sí :) Creo que tu problema es que gmail (y muchos otros clientes) no admiten RTF en los correos electrónicos , entonces la conversión a HTML es la * única * forma. ¿Has visto alguno de esos convertidores de RTF a HTML? – Roddy

Cuestiones relacionadas