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.082
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.112
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.112
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
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 17:10:28.


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