Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   email con shellexecute, como insertar un salto de linea (https://www.clubdelphi.com/foros/showthread.php?t=28162)

alt126 12-12-2005 11:31:17

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);

Casimiro Notevi 12-12-2005 13:10:06

¿Has probado pasando el "text" completo?, tmemo.lines.text

dec 12-12-2005 14:03:06

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);
}


alt126 13-12-2005 10:00:01

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?

dec 13-12-2005 11:26:30

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! ;)

alt126 13-12-2005 11:53:53

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?

alt126 13-12-2005 12:03:30

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;

dec 13-12-2005 12:10:58

1 Archivos Adjunto(s)
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? ;)

dec 13-12-2005 12:13:05

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. ;)

alt126 13-12-2005 16:13:30

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!!

alt126 14-12-2005 10:06:55

AGUA!!!


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

de todos modos muchas GRACIAS


La franja horaria es GMT +2. Ahora son las 01:25:42.

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