Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-12-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
email con shellexecute, como insertar un salto de linea

Estoy intentando generar un email, con el siguiente codigo, el problema es que en el cuerpo, aunque utilizo un tmemo, no se como poner saltos de linea, ya que a la hora de ver el email, esta todo seguido.

Cita:
//Creamos un email.
String aux;

aux = "mailto:" + "Email";
aux = aux + "?Subject=" + Edit1->Text;
aux = aux + "&body=";
if(tMemo->Lines->Count > 1)
{
for(int i=0;i < tMemo->Lines->Count;i++)
aux = aux + tMemo->Lines[0].Strings[i]; + "\n\r\n";
}
ShellExecute(Handle,"open",aux.c_str(),0,0,SW_SHOW);
__________________
Un saludo

Antonio
Responder Con Cita
  #2  
Antiguo 12-12-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Has probado pasando el "text" completo?, tmemo.lines.text
Responder Con Cita
  #3  
Antiguo 12-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Yo tuve que ingeniarme algo similar con Delphi, esto es, preparar un correo para ser enviado por el cliente de correo del usuario, pero, con el cuerpo del mismo debidamente formateado. Al cabo es cuestión de hacer algo parecido a lo siguiente, que es una traducción casi literal de la función que empleé con Delphi para el mismo asunto. Lo he probado y parece funcionar bien, aunque puedes limar la función tanto como te plazca. El truco está en añadir tantos "&body=linea del cuerpo" como líneas sean necesarias. En este caso podrías utilizar la función directamente con "TMemo", esto es, enviando como parámetro las líneas de este:


Código:
void EnviarCorreo(AnsiString email, AnsiString asunto, TStrings* cuerpo) {

  // Constantes que contiene los "strings" a los que luego
  // habremos de dar el formato adecuado con los parámetros
  // de esta función.
  //
  const AnsiString LINEAS_CUERPO = "&body=\"%s\"";
  const AnsiString ASUNTO_CORREO = "mailto:%s?subject=%s";

  AnsiString cuerpoTemporal; // Aquí iremos guardando el cuerpo

  for(int i = 0; i <= cuerpo->Count-1; i++) { // Por cada línea en el cuerpo
	// Vamos añadiendo líneas debidamente formateadas al "cuerpoTemporal"
	cuerpoTemporal += Format(LINEAS_CUERPO, OPENARRAY(TVarRec, (cuerpo->Strings[i])));
  }

  // Preparamos el "asunto" del correo, que incluirá también
  // la dirección de correo del destinatario: nótese cómo se
  // utiliza la constante ASUNTO_CORREO debidamente formateada.
  //
  AnsiString asuntoCorreo = Format(ASUNTO_CORREO, OPENARRAY(TVarRec, (email, asunto)));

  // En la siguiente variable "juntamos" el asunto, el email
  // y el cuerpo del correo, ya todo formateado y listo para
  // utilizarlo luego en la función "ShellExecute".
  //
  AnsiString correoPreparado = asuntoCorreo + cuerpoTemporal;

  // Abrimos el cliente de correo del usuario ya con el correo
  // que hemos preparado más arriba listo para ser enviado.
  //
  ShellExecute(0, "open", correoPreparado.c_str(), 0, 0, SW_SHOW);
}

// Ejemplo de llamada a la función "EnviarCorreo"
//
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  EnviarCorreo("correo@servidor.com", "Asunto del correo", Memo1->Lines);
}
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 13-12-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
Pues no lo pillo...
vamos por partes...

He probado a meter en la cadena...\s, \\s, #13....y nada de nada, sigue sin ponerme un salto de linea, ni poniendolo como cadena, ni como caracter ni nada.

He probado tb tu ejemplo, pero me genera una cadena asi:

Intento meter el siguiente email:

Email : email@email.com
Asunto : asunto
Cuerpo :
1
2
3

Código:
mailto:email@email.com?Subject=asunto&body=\"1\"&body=\"2\"&body=\"3\"
y esto da un error:

- Argumento no valido en la linea de comandos. Compruebe el modificador que esta usando -

Supongo que es normal, porque, hay 3 cuerpos en la cadena del email...eso no es normal, pero vamos que es el ejemplo que has puesto...

algun consejillo?
__________________
Un saludo

Antonio

Última edición por alt126 fecha: 13-12-2005 a las 10:02:06.
Responder Con Cita
  #5  
Antiguo 13-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Puedo decirte (para empezar) que el ejemplo que he puesto me ha funcionado perfectamente, pero, que lo he probado con Mozilla ThunderBird únicamente: no sé si funcinoaría en otros clientes de correo, pero, es de suponer que sí.

El quid del asunto está en que cada línea del cuerpo del correo ha de añadirse en la cadena "body=%S", justamente, en la "%S". La función que he preparado (que ya he dicho que es una mera traducción de una que tengo en Delphi para lo mismo) requiere que le pases como parámetro un "TStrings", por ejemplo, las líneas de un "TMemo".

Ya la propia función se encarga de formatear debidamente el correo, y, como te digo, al menos en mi caso no tengo problemas al utilizarla. Es decir, prueba a pasarle como parámetro un "TStrings" a la función, las líneas del "TMemo" que sea, por ejemplo, porque debería irte bien.

De todos modos, si quieres personalizar la función de más arriba como mejor te parezca, recuerda dónde está la "dificultad": cada línea del correo (incompresiblemente para mí, pero, así es o así al menos funciona) tiene que ir en una cadena "body=%S": ya podrás hacer pruebas para ver qué es lo que en realidad se pasa por la línea de comandos.


Cita:
Empezado por alt126
He probado a meter en la cadena...\s, \\s, #13....y nada de nada, sigue sin ponerme un salto de linea, ni poniendolo como cadena, ni como caracter ni nada.
Acaso porque al hacer eso, precisamente, ocurra algún problema (no lo he comprobado). Insisto en que pruebes a pasarle un "TStrings" a la función en su parámetro "cuerpo", que ya se encarga ella de "partir" la líneas del cuerpo del correo para que luego en este se vean "como se espera".

¡Suerte!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 13-12-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
Puessssss...va a ser que no....pq he probado lo siguiente...y fijate en los resultados:

al poner como cuerpo :
Código:
"&body=aaaa&body=bbbb&body=ccc"
en el cuerpo del email solo sale....ccc, es decir la ultima cosa que puse como body....no salen varias lineas....

?¿?¿?¿ hago acaso algo mal?
__________________
Un saludo

Antonio
Responder Con Cita
  #7  
Antiguo 13-12-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
SOLUCIONADO!!!!


de pura chiripa...buscando por el google...pero conseguido!!!!

asi...al final de cada linea..para hacer un salto de linea, hay que poner esto:

"%0D%0A"

es decir si se quiere poner esto:

Código:
 1
2
3
habria que poner

Código:
&body=1%0D%0A2%0D%0A3%0D%0A;
__________________
Un saludo

Antonio
Responder Con Cita
  #8  
Antiguo 13-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No sé si haces alguna cosa mal. ¿Con qué cliente de correo estás probándolo? Ya he dicho que con Mozilla ThunderBird yo no tengo problemas: acabo de probarlo de nuevo. Me he limitado a copiar la función de más arriba y la he llamado de la misma manera que también se indica. Todo va bien: el asunto del correo donde tiene que estar, el destinatario lo mismo, y, el cuerpo del correo tal como se espera, con las mismas líneas del "TMemo" que paso como parámetro a la función susomentada...

No sé qué te diga... o sí... se me ocurre que tal vez tenga que ver con los caracteres del cuerpo del correo: ciertos caracteres pueden dar problemas. En el ejemplo que te adjunto se pretende preparar un cuerpo bastante extenso (unos tres o cuatro párrafos) y, sin embargo, todo parece ir bien... excepto por algunos caracteres, como las comillas, que he notado que desaparecen del cuerpo. No sé. tendrás que hacer pruebas, supongo, porque es posible que la "técnica" empleada no sea del todo válida ni "escalable", en el sentido de que enviar mucho texto por la línea de comandos a una aplicación puede tener consecuencias imprevistas: fundamentalmente que no te funcione lo que quieres hacer, creo yo.

Me pregunto, por ejemplo, si no podrías enviar tú mismo el correo, con los componentes que tengas a mano en C++ Builder: de ese modo acaso te quitabas de estos problemas. Pero, en fin, esto es otro cantar. Tú sabrás lo que tienes que hacer mejor que nadie. ¿No?
Archivos Adjuntos
Tipo de Archivo: zip Ejemplo.zip (4,9 KB, 37 visitas)
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 13-12-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,


Cita:
Empezado por alt126
de pura chiripa...buscando por el google...pero conseguido!!!!

asi...al final de cada linea..para hacer un salto de linea, hay que poner esto:

"%0D%0A"
Bueno, pues, me alegro de que todo se solucione. Sin embargo, yo no hago uso de lo que dices y, como he dicho, parece funcionar medio bien. De todos modos acaso convenga tenerlo en cuenta. ¿Podrías indicar la página Web en que se habla de esos caracteres para hacer lo que nos trae entre manos? Gracias.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 13-12-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
La pagina donde vi lo de los caracteres fue:

http://www.vb-helper.com/howto_shell_mail.html

He probado tu ejemplo y para ser justos he de reconocer que funciona a las mil maravillas...la cosa es k lo he probado en mi casa, donde yo tambien tengo el thunderbird...y funciona perfect!!

el problema es que donde quiero que funcione es en ordenadores con microsoft outlook, que para generar un email, usan el microsoft word como editor de textos y a lo mejor por eso no funciona igual...mañana lo probare y te dire algo!!

De todas maneras muchas gracias, funciona genial!!
__________________
Un saludo

Antonio
Responder Con Cita
  #11  
Antiguo 14-12-2005
Avatar de alt126
alt126 alt126 is offline
Miembro
 
Registrado: dic 2004
Posts: 171
Poder: 20
alt126 Va por buen camino
AGUA!!!


Con microsoft outlook no funciona!!!...y tendre que probar si mi metodo funciona con thunderbird....

de todos modos muchas GRACIAS
__________________
Un saludo

Antonio
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 21:04:33.


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