Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-02-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 20
JuanBCT Va por buen camino
Acerca de enviar texto con formato...

Hola! Después de mucho probar y averiguar; logré enviar un correo electrónico desde mi aplicación (cosa q explico acá). Esto funciona muy bien cuando se manda texto plano, pero los problemas comienzan a surgir al querer mandar texto con formato... el cuerpo de mi mensaje es un TDbRichEdit al cual le puedo cambiar tamaño y tipo de letra. ¿Alguien sabría como se hace para convertir este texto en un formato q guarde esas propiedades?

Leí en algún lugar que los mails como los que leemos en el Outlook están en formato HTML, pero hice la prueba de mandar el código completo de una página a mi cuenta y no lo interpretó, me mostró el código tal cual lo mandé. También leí en un hilo la posibilidad de mandar un .html como adjunto... el tema es que, si bien en webmails como el de yahoo uno abre el mensaje y vé inmediatamente el contenido del .html; en Outlook Express habría que clickear el icono de Adjunto, abrirlo... en fin.

Voy a estar muy agradecido si alguien me puede ayudar con esto, saludos!!

Última edición por JuanBCT fecha: 24-02-2005 a las 13:40:14.
Responder Con Cita
  #2  
Antiguo 25-02-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 20
JuanBCT Va por buen camino
Post

Se q esto se ha preguntado antes; pero busco y busco y no encuentro nada q al menos me dé una pauta de como hacerlo... no habrá algún alma caritativa q eche un poco de luz sobre esto?
Responder Con Cita
  #3  
Antiguo 25-02-2005
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
Wop!

Respecto a cómo mantener el formato... ni idea. Respecto a lo del HTML, para que cualquier cliente de correo lo interprete correctamente tienes que indicar que es html en el content-type del mail.
__________________
E pur si muove
Responder Con Cita
  #4  
Antiguo 04-03-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 20
JuanBCT Va por buen camino
Hola Marto, gracias por tu respuesta... al menos en mi versión de Indy en ContentType hay que poner 'text/html'; creo q también habría q especificar
Código Delphi [-]
IdMessage1.IsEncoded:=true
...
Lo probé copiando un código HTML y funciona perfecto... ahora bien, no queda otra solución que convertir yo el rtf a HTML; o habrá algún componente tipo "HTMLEdit"?
Responder Con Cita
  #5  
Antiguo 04-03-2005
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 21
marto Va por buen camino
Mirate las Jedi, en la paleta Jv Internet trae componentes para trabajar con HTML, pero no sé la potencia que tienen
__________________
E pur si muove
Responder Con Cita
  #6  
Antiguo 07-03-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 20
JuanBCT Va por buen camino
Lo logré!!

Finalmente logré enviar el mensaje; explico acá lo que hice por si le sirva a alguien...

1) Guardo el contenido del cuerpo en un archivo RTF temporal
Código Delphi [-]
 Datamodule1.MailsCuerpo_Mail.SaveToFile('C:\WINDOWS\EMKTMP.RTF');

2) Convierto el RTF en HTML (lo hice con una rutina freeware q encontré en Torry.net)

3) Leo el HTML y lo cargo en un RichEdit invisible:
Código Delphi [-]
 try
 Archiv.LoadFromFile('C:\WINDOWS\EMKTMP.HTM');
  for A:=0 to Archiv.Count -1 do
   begin
     SS:=archiv.Strings[A];
     richedit1.Lines.Add(SS);
   end;
 finally
    Archiv.Free;
 end;

4) Mando el mail, y en el Body le asigno el texto del RichEdit invisible:
Código Delphi [-]
 //Seteando propiedades del SMTP
 IdSMTP1.Host:=DbEdit6.Text;
 IdSMTP1.Port:=25;
 //Seteando propiedades del mensaje
 IdMessage1.From.Address:=DbEdit7.Text;
 IdMessage1.Subject:=DbEdit5.Text;
 IdMessage1.Body.Text:=RichEdit1.Text;
 //Envío el mensaje
 try
   try
     IdSMTP1.Connect(1000);
     IdSMTP1.Send(IdMessage1);
     except on E:Exception do
       ShowMessage ('Error. Chequee las direcciones en "Configuración de cuenta".');
     end;
   finally
     if IdSMTP1.Connected then IdSMTP1.Disconnect;
     ShowMessage ('Mensaje enviado.');
   end;

Listo!
Responder Con Cita
  #7  
Antiguo 07-03-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 20
JuanBCT Va por buen camino
Perdón, en 3), antes de Archiv.Free; iría esto:

richedit1.Lines.Add('');
richedit1.Lines.Add('</BODY>');
richedit1.Lines.Add('</HTML>');
Responder Con Cita
  #8  
Antiguo 30-09-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
a mi me sirvió, Gracias
__________________

Responder Con Cita
  #9  
Antiguo 11-10-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Cita:
Empezado por JuanBCT
2) Convierto el RTF en HTML (lo hice con una rutina freeware q encontré en Torry.net)
¿me podrías pasar esa rutina?
Lo que hiciste me resolvió un problema, pero con la conversión que hacía, me surgen más y más problemas. He tratado de buscar esa rutina que mencionas, pero no he podido encontrarla. Si fueras tan amable de facilitármela te lo agradecría mucho.
__________________

Responder Con Cita
  #10  
Antiguo 17-10-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Poder: 20
JuanBCT Va por buen camino
Hola Contraveneno, disculpa que no había visto antes tu mensaje. Acá está la rutina en cuestión... http://www.torry.net/quicksearchd.ph...rter&Title=Yes

... en realidad solo usé r2hconv.pas, lo incluí en el proyecto y lo llamé así:

Código Delphi [-]
r2hconv.rtf2html('C:\WINDOWS\EMKTMP.RTF', 'C:\WINDOWS\EMKTMP.HTM',['']);

(no sé si el autor permite usar el archivo por separado, pero bueno... me tomé esa libertad)

Espero que te sirva, saludos!
Responder Con Cita
  #11  
Antiguo 17-10-2005
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
No hay problema JuanBCT, la paciencia no es una de mis virtudes, pero entiendo que se atravesó el fin de semana, en fin, no hay problema con eso.

Con la rutina que mencinoas, ya me fuinconó perfecto. Y yo tambien solo utilizé esa unidad, digo, es lo único que necesito .

Muchas Gracias.
__________________

Responder Con Cita
  #12  
Antiguo 27-06-2007
Phantom_Drake Phantom_Drake is offline
Miembro
 
Registrado: jun 2007
Posts: 13
Poder: 0
Phantom_Drake Va por buen camino
yo intente utilizando ese codigo pero a mi correo me llego puro codigo html y nada de formato podrian ser un poco mas esplicitos por favor
Responder Con Cita
  #13  
Antiguo 27-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Código Delphi [-]
Uses r2hconv

....
procedure Tfrm.EnviaCorreoClick(Sender: TObject);
var strOrigen: string;
begin
  inherited;
  redtMail.lines.SaveToFile('c:\temp.rtf');
  r2hconv.rtf2html('c:\temp.rtf', 'c:\temp.htm', ['']);
  redtHTML.Lines.LoadFromFile('c:\temp.htm');
  redtHTML.Lines.Add('');
  redtHTML.Lines.Add('');
  //leve verificación sobre el fomato de la dirección escrita
   if trim(edtMail0.text)='' then begin
    messagebox(Handle,'No ha escrito la dirección de correo del destinatario seleccionado.'+#13+'Correo No enviado.',
    'Error', MB_ICONError); Exit;
   end else begin
    if not ExecRegExpr('[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+',
        edtMail0.Text) then begin
      messagebox(Handle,'La dirección escrita no es una dirección de correo válida.'+#13+'Correo No enviado.',
      'Error', MB_ICONError);
      exit;
      //verificación sobre la segunda dirección
      if trim(edtMail1.text)<>'' then
       if not ExecRegExpr('[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+',
         edtMail1.Text) then
           edtMail1.text:='';
    end; //if not execregexpr
   end; //if trim mail0
   //Enviar el mail despues de guardar los datos
   frm.SMTP.Host:=Host;
   frm.SMTP.UserId:=Usuario;
   strOrigen:=strOrigen;
   frm.SMTP.Port:=25;
  with frm.SMTP do begin
   try
    try
     Connect;
    except on E:Exception do begin
     messagebox(Handle,'No se pudo establecer la conexión.'
     ,'Error.',MB_oK+MB_ICONERROR);
     end; //fin except
    end; // fin try - except
   finally
    if Connected then begin
      PostMessage.FromAddress:=strOrigen;
      PostMessage.ToAddress.Text:=edtMail0.Text;
      if edtMail1.Text<>'' then
        PostMessage.ToCarbonCopy.Text:=edtmail1.text;
      with PostMessage.Body do begin
       Clear;
       Add(redtHTML.Text);
      end; //with body
       PostMessage.Subject:=edtAsunto.Text;
       SendMail;
       Disconnect;
      end;
     end; //if connected
   end; //fin try - finally
   end; //with smtp
end;
....

usando un componente SMTP.

Aunque personalmente prefiero utilizar el método ShellExec con un comando mailto.

Más explícito que eso, no creo, pero puedes preguntar
__________________

Responder Con Cita
  #14  
Antiguo 28-06-2007
Phantom_Drake Phantom_Drake is offline
Miembro
 
Registrado: jun 2007
Posts: 13
Poder: 0
Phantom_Drake Va por buen camino
de hecho si tengo dudas aun en la linea:
Código Delphi [-]
if not ExecRegExpr('[\w\d\-\.]+@[\w\d\-]+(\.[\w\d\-]+)+',edtMail0.Text) then
marca error en el ExecRegExpr
a ke se debe esto???
Responder Con Cita
  #15  
Antiguo 28-06-2007
elchino_7 elchino_7 is offline
Registrado
 
Registrado: jun 2007
Posts: 2
Poder: 0
elchino_7 Va por buen camino
New guy

Contraveneno porq prefieres usar el shell q el smtp cuales son las ventajas y como se usaria
Responder Con Cita
  #16  
Antiguo 28-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Cita:
Empezado por Phantom_Drake
marca error en el ExecRegExpr
a ke se debe esto???
http://www.clubdelphi.com/foros/show...hlight=RegExpr

RegExpr

Cita:
Empezado por elchino_7
Contraveneno porq prefieres usar el shell q el smtp cuales son las ventajas y como se usaria
Por que utilizando el ShellExec se abrirá el cliente predeterminado de correo. No importa si tienes Outloock, Edore, Thunderbird, etc, etc. Al utilizar este comando se abrirá el que tengas instalado en la máquina donde se ejecute.

Bueno, que el comando ShellExec se puede realizar en una sola línea de código y como puedes ver en este hilo, utilizando un SMTP tienes hacer un show solo para enviar un correo.

Código Delphi [-]
ShellExecute(Handle, 'open', 
'mailto:SomeN@Somewhere.com?subject=MySubject&Attach=''C:\Attachment.txt''',
nil, nil, SW_SHOW)

http://www.clubdelphi.com/foros/showthread.php?t=12158
__________________


Última edición por ContraVeneno fecha: 28-06-2007 a las 00:22:55.
Responder Con Cita
  #17  
Antiguo 28-06-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Cita:
Empezado por elchino_7
Contraveneno porq prefieres usar el shell q el smtp cuales son las ventajas y como se usaria
Cita:
Empezado por Guía de estilo
No solicites que te respondan por correo en privado

Los problemas deben ser un proceso público y transparente, durante el cual un primer intento de respuesta puede y debería corregirse si alguien con más conocimientos percibe que la respuesta es incompleta o incorrecta. Además quién te responde obtiene parte de su recompensa al verse que son competentes y útiles a nuestra comunidad.
Cuando pides una respuesta privada, estás interrumpiendo tanto el proceso como la recompensa. No lo hagas.
Guía de estilo


http://www.clubdelphi.com/foros/showthread.php?t=45268
__________________

Responder Con Cita
  #18  
Antiguo 28-06-2007
Phantom_Drake Phantom_Drake is offline
Miembro
 
Registrado: jun 2007
Posts: 13
Poder: 0
Phantom_Drake Va por buen camino
Thumbs up

ah se me olvidaba gracias por la informacion
Responder Con Cita
  #19  
Antiguo 02-07-2007
Phantom_Drake Phantom_Drake is offline
Miembro
 
Registrado: jun 2007
Posts: 13
Poder: 0
Phantom_Drake Va por buen camino
ke onda otra vez dando lata aki otra duda
tengo este codigo para mandar el correo con imagen pero nomas no puedo poner la imagen de fondo en el correo solo sale despues del texto alguien me puede ayudar por favor
Código Delphi [-]
procedure TFrm_Email.Button2Click(Sender: TObject);
var I,J,K,L:Integer;
    cadena,correo:string;
    Check: TcheckBox;
    ChildControl: TControl;
    html: TStrings;
    htmpart, txtpart: TIdText;
    bmppart: TIdAttachment;
    email: TIdMessage;
    //archiv:TStrings;
    filename,ss,filename1: string;
    a:Integer;
    idStars:   TIdAttachment;
    //archiv:t;
begin
  Redt_Texto.Lines.SaveToFile('C:\WINDOWS\EMKTMP.RTF');
  r2hconv.rtf2html('C:\WINDOWS\EMKTMP.RTF', 'C:\WINDOWS\EMKTMP.HTM',['']);
  try
    RichEdit2.lines.LoadFromFile('C:\WINDOWS\EMKTMP.HTM');
    for A:=0 to RichEdit2.lines.Count -1 do
    begin
     SS:=RichEdit2.Lines.Strings[A];
     RichEdit1.Lines.Add(SS);
    end;
  finally
  richedit1.Lines.Add('');
  richedit1.Lines.Add('');
  richedit1.Lines.Add('');
    //RichEdit2.Free;
  end;
 
  if DBLookupComboBox1.Text='' then
    ShowMessage('debe seleccionar un formato')
  else
  begin
    Lst_Mails.Items.Clear;
    with dtm_contactos.Qry_Correos do
    begin
      Close;
      SQL.Clear;
      cadena:='select email from contactos where grupo<''0'' ';
      for I := 0 to GroupBox9.ControlCount - 1 do
        if GroupBox9.Controls[i] is TCheckBox then
          if TCheckBox(GroupBox9.Controls[i]).Checked then
            cadena:=cadena+ ' or grupo='''+(IntToStr(i+1))+'''';
      sql.Add(cadena);
      Open;
      First;
      if Lst_Correos.Items.Count > 0 then
        Lst_Mails.Items:=Lst_Correos.Items;
      while not Eof do
      begin
        Lst_Mails.Items.Add(fieldbyname('email').AsString);
        next;
      end;
    end;
    Lst_Correos.Items.Clear;
    for K:=0 to Lst_Mails.Items.Count -1  do
    begin
      correo:= Lst_Mails.Items.Strings[k];
      CopyFile(PChar('C:\Proyecto Email\Formatos\'+ DBLookupComboBox1.text ),PChar('C:\Archivos de programa\Borland\Delphi7\Projects\'+ DBLookupComboBox1.text),TRUE);
      //filename := ExtractFilePath(Application.ExeName) + '\homerorx.jpg';
      //filename1 := 'C:\Proyecto Email\Formatos\'+ DBLookupComboBox1.text + '''';
      filename := 'C:\Proyecto Email\Formatos\'+ DBLookupComboBox1.text ;
      html := TStringList.Create();
      {html.Add('');
      html.Add('');
      html.Add('');
      html.Add(' 

Hello

'); //html.Add(''); html.Add(''); html.Add('');}
for L:=0 to RichEdit2.lines.Count -1 do begin html.Add(RichEdit2.Lines.Strings[L]); end; email := TIdMessage.Create(nil); email.From.Text := 'origen'; email.Recipients.EMailAddresses := correo; email.Subject := 'Hello'; email.ContentTransferEncoding:= 'multipart/related'; email.IsEncoded:=true; email.Body.Assign(html); txtpart := TIdText.Create(email.MessageParts); txtpart.ContentType := 'text/html'; txtpart.Body.Text := RichEdit2.Text; htmpart := TIdText.Create(email.MessageParts, html); htmpart.ContentType := 'text/html'; bmppart := TIdAttachment.Create(email.MessageParts, filename); bmppart.ContentType := 'image/jpeg'; bmppart.FileIsTempFile := false; bmppart.contenttransfer:='base64'; bmppart.ContentDisposition := 'inline'; bmppart.ExtraHeaders.Values['Content-ID'] := ''; try SMTP.Host:='server'; SMTP.Port:=25; SMTP.Connect(); try SMTP.Send(email); ShowMessage('Sent'); except on E: Exception do ShowMessage('Failed: ' + E.Message); end; finally SMTP.Disconnect(); email.Free(); html.Free(); end; end; end;
Responder Con Cita
  #20  
Antiguo 03-07-2007
Avatar de aldmoscardi
aldmoscardi aldmoscardi is offline
Miembro
 
Registrado: oct 2006
Posts: 38
Poder: 0
aldmoscardi Va por buen camino
Provaste de decirle al componenete que iso vas a utlizar?
Yo e realizado un aplicacion que envia mail en formato HTML, si te interesa manda tu dir de mail que te paso un ejemplo, Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:00:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi