• Publicidad

Dudas varias con emails

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Dudas varias con emails

Notapor panterozo » 2010-06-11 09:17 @429

Hola nuevamente...

Estoy enviando emails con un ejemplo sacado de este foro, pero la información es muy acotada... Está bien para comenzar, pero ya comencé y deseo enviar emails más sofisticados...

Tengo esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (MAIL,"|/usr/lib/sendmail -t");
  2. print MAIL "To: prueba\@email.com\n";
  3. print MAIL "From: panterozo\@email.com\n";
  4. print MAIL "Subject: Prueba de envio de email\n\n";
  5.  
  6. $email .= "\n\n\n\tHola que tal\n\n\n ";
  7. $email .= "\n\n\n\t\tOtra entrada tabulada\n\n\n ";
  8.  
  9. print MAIL $email;
  10. close(MAIL);
  11. exit(1);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


El email llega correctamente, pero con las letras muy pequeñas, y estuve buscando por la web alguna manera de aumentarle el tamaño a las letras, pero nada :S... También deseo adjuntar un archivo al email... Si es posible utilizar esta misma forma, sería estupendo :P

Otro problema, es cuando realizo un ciclo, es decir:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (MAIL,"|/usr/lib/sendmail -t");
  2. print MAIL "To: prueba\@email.com\n";
  3. print MAIL "From: panterozo\@email.com\n";
  4. print MAIL "Subject: Prueba de envio de email\n\n";
  5.  
  6. $email .= "\n\n\n\tHola que tal\n\n\n ";
  7. foreach(@arreglo){
  8.      # Y aquí se agrega información al $email
  9.      $email = "".$datosañadidos"";
  10.      # Y en esta parte, si añado los datos en una sola fila
  11.      $email = $email."\t".$nuevodato"";
  12.      # El largo de la fila insertada al email depende del largo del nuevo dato ingresado,
  13.      # Por lo que queda desordenado completamente
  14. }
  15. $email .= "\n\n\n\t\tOtra entrada tabulada\n\n\n ";
  16.  
  17. print MAIL $email;
  18. close(MAIL);
  19. exit(1);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Con el sangrado arriba descrito... ¿hay forma de generar una tabla en el email para que los datos me aparezcan de forma ordenada?

Muchas gracias
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Publicidad

Re: Dudas varias con emails

Notapor explorer » 2010-06-11 14:42 @654

Estás enviado los correos en modo solo texto, algo que se lleva haciendo en los últimos 40 años...

Eso quiere decir que el ver las letras más o menos pequeñas o que la tabla se descuadre, no es culpa de tu programa, si no de tu programa de correo.

Te aconsejo que uses un programa de correo de verdad, como por ejemplo, el Mozilla Thunderbird, que, a la hora de mostrar un correo con solo texto, lo hará con fuentes monoespaciadas, y respetará los espacios en blanco, que son los dos factores principales para ver texto de forma correcta.

Otra forma de escribir los correos, desde hace unos años, es mediante código HTML. Entonces podrás adornar tus correos como quieras: tamaños, colores, imágenes, tablas... aunque los programas antivirus y antispam lo mirarán con lupa, y en algunos casos, lo eliminarán.

Para enviar correos con código HTML, hay varias formas, pero pasan por crear adjuntos con cabeceras MIME. Las MIMEtools traen todo lo necesario para crear esos correos, aunque hay muchos más módulos que lo pueden hacer también, como por ejemplo Email::MIME::CreateHTML.

En cuanto a la forma de crear la tabla, cuando se trata de cuadrar las columnas, siempre tenemos el problema de que habría que saber los anchos máximos de las columnas, antes de empezar a crearlas (printf() y sprintf() vendrían bien aquí). Esto también es mucho rollo... menos mal que alguien, antes que nosotros, resolvió el asunto: Data::Tabular, Text::ASCIITable, Table::Simple y otros.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Dudas varias con emails

Notapor panterozo » 2010-06-29 17:20 @764

Explorer:

Muchas gracias por las recomendaciones, y gracias a ellas estoy utilizando Text::ASCIITable. Una herramienta bastante simple y que cumple con lo cometido.

Ahora bien, con respecto al email, esta tabla ASCII se encuentra con tipo de letra Courier New (creo), pero al enviar el email, ni idea de cómo indicarle el tipo de letra que se envíe en el email... En definitiva, queda todo desordenado en el email.

No deseo utilizar un módulo para enviar emails, ya que el archivo ya es lo suficientemente grande como para comenzar a cambiar cada dependencia.

¿¿ Alguna forma de hacer esto, como el caso de TO: , o FROM: o CC: ??

¿Algo que tan solo deba agregar una línea?

Thanks
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Re: Dudas varias con emails

Notapor explorer » 2010-06-29 18:38 @818

Hay que entender en qué consiste un correo electrónico.

Un correo electrónico es un flujo de texto. Ese texto es un conjunto de líneas. Hay dos partes fundamentales: la cabeza y el cuerpo, que se separan con una línea en blanco. De la cabecera, es básicamente un conjunto de marcas y sus valores. Por ejemplo:

Subject: El asunto

Es en el cuerpo en donde debemos centrarnos.

Por defecto, todo el contenido es puro texto. Durante casi dos décadas se ha enviado y recibido correo electrónico de esa manera: puro texto. Y la forma de representarlo en pantalla, es, naturalmente, mediante una fuente de letras monoespaciada, porque SE SUPONÍA que el texto podría tener algún esquema, gráfico, fórmulas, o tablas, hechas con caracteres, por lo que era vital mantener esa igualdad de ancho en todos los caracteres:

Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
                               _     _
                              ( \---/ )
                               ) . . (
 ________________________,--._(___Y___)_,--._______________________ hjw
                         `--'           `--'
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
(extraído de http://rony.4y.com.cn/ascii/ascii2/bears.html)

Pero... de repente ocurrió algo terrible: por una parte, la aparición de clientes de correo como Outlook Express; y por otra, la de los clientes de correo en web, como los de Yahoo!, Hotmail, etc. Y en estos clientes, el tipo de letra por defecto ya no era el monoespaciado.

Así que a partir de ese momento, las pequeñas obras de arte que teníamos en nuestras firmas (por ejemplo), ahora se veían horribles:
Jesus Ca Alvion _/_/ _/_/_/ _/_/_/
[email protected] - http://www.jca.es/ _/_/ _/_/ _/_/ _/_/ _/_/
jabber / xmpp:[email protected] _/_/ _/_/ _/_/_/_/_/
. _/_/ _/_/ _/_/ _/_/ _/_/
"Things are not so easy" _/_/ _/_/ _/_/ _/_/ _/_/ _/_/
"My name is Dump, Core Dump" _/_/_/ _/_/_/ _/_/ _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
en lugar de
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Jesus Ca Alvion                         _/_/      _/_/_/        _/_/_/
[email protected] - http://www.jca.es/        _/_/    _/_/  _/_/    _/_/  _/_/
jabber / xmpp:[email protected]          _/_/    _/_/          _/_/_/_/_/
.                              _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Esos clientes empezaron a admitir un nuevo formato: el HTML. De esa manera, se le daba libertad al usuario para que eligiera tipos de letras, tamaños, colores, tablas HTML, listas, reglas horizontales, imágenes adjuntas, etc.

La forma de enviar esos correos dentro del formato de un correo electrónico es:
1.- Indicar que el contenido del cuerpo sigue las directrices MIME, indicándolo en la cabecera. Algo como
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
MIME-Version: 1.0
Content-Type: multipart/alternative;
        boundary="----=_Part_35130250_1889093148.1277833746681"
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Con estas dos etiquetas en la cabecera indicamos que este correo sigue las normas MIME versión 1.0. Y que el contenido del cuerpo es, un conjunto de partes (multipart), que son alternativas (alternative), y que se separan unas de otras con la marca indicada por el atributo boundary. Lo de alternative quiere decir que este correo contiene al menos dos representaciones del mismo contenido, pero, en distinto formato.

2.- En el cuerpo, aparecen cosas como estas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
------=_Part_35130250_1889093148.1277833746681
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Perl
  Today's new discussions from Perl group members.  Change the frequency of=
 this digest:
  http://www.linkedin.com/e/-idwazy-gb117x89-51/ahs/106254/EMLt_anet_settin=
gs-cnhOon0JumNFomgJt7dBpSBA/

Active Discussion of the day
 * Balbir Singh started a discussion on a news article:
  OpenSource projects in perl? (9)

------=_Part_35130250_1889093148.1277833746681
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<html>
  <body>
  <table width="580" style="margin:0 auto;font-family:arial;border-bottom:1px dotted #ccc;" cellpadding="5" cellspacing="0" border="0">
    <tr style="background:#069"><td style="font-size:12px;color:#fff;padding:3px 5px">Linkedin Groups</td><td style="text-align:right;color:#fff;font-size:12px;padding:3px">June 29, 2010</td></tr>
    <tr style="background:#e0f1fe"><td colspan="2" style="font-weight:bold;font-size:20px;height:26px;padding-left:5px">Perl</td></tr>
    <tr><td colspan="2" style="font-size:12px;;border-bottom:1px dotted #ccc;padding:5px 0">
              <p><strong>Latest:</strong>
                  <a href="http://www.linkedin.com/e/-idwazy-gb117x89-51/vgq/106254/EML_anet_ques_hm-cnhOon0JumNFomgJt7dBpSBA/">4 discussions</a>
                    <span style="padding:0 5px;">|</span>

             <a href="http://www.linkedin.com/e/-idwazy-gb117x89-51/vgj/106254/5/EML_anet_jobs_hm-cnhOon0JumNFomgJt7dBpSBA/">4 Jobs</a>
              </p>

    </td></tr>

    <tr><td colspan="2">

  <h3 style="font-size:16px;font-weight:bold; padding: 0; margin:10px 0 2px;" >Most Active Discussions (1)</h3>
...
/td></tr></table>
</body>
</html>
------=_Part_35130250_1889093148.1277833746681--
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Observa que hay dos partes, separadas por el boundary indicado antes. En la primera parte, es puro texto, mientras que la segunda es puro HTML. Si además se transmiten imágenes adjuntas (algo no recomendable), irán codificadas en mimeencode en sucesivas partes.

Al llegar este correo al destinatario, es el CLIENTE de correo el que decide mostrar un estilo u otro, según la configuración deseada por el usuario. Por ejemplo, la gran mayoría de los usuarios, como no saben nada de esto, dejan que esta decisión la tomen los propios programas, así que la mayoría la ve en formato HTML. Yo, en cambio, siempre tengo puesto en mi Thunderbird que, por defecto, siempre quiero ver la representación en modo texto (no quiero arriesgarme a ver/recibir sorpresas desagradables).

Lo que también es curioso de todo esto, es casi nadie sabe que todos los mensajes de correo que escriben al cabo del día, se transmiten con el doble de tamaño: la mayor parte de los clientes de correo, cuando terminas de confeccionar el mensaje, los guardan y transmiten en los dos formatos: en el HTML -que por defecto ha usado el cliente para confeccionarlo-; y en puro texto, para mantener la portabilidad, ya que siempre puede ocurrir que la persona que reciba el mensaje no disponga de un terminal con capacidad de representar ese HTML (por ejemplo, un mensáfono). Por eso se envía la parte de puro texto, para que el correo se pueda ver en todas las ocasiones. Yo, siempre uso el modo de puro texto, así que mis correos ocupan entre diez y veinte veces menos, como mínimo, de lo que el resto de usuarios lo hacen, ya que la parte de HTML es enorme comparada con la de solo texto.

Volviendo a tu problema...

* Si tu envías un correo en formato de puro texto, y las tablas quedan perfectas viéndolas con letra monoespaciada, entonces la culpa de que no se vean bien en el destinatario NO es tuya, sino del destinatario. Le dices, amablemente, que configure su cliente de correo para visualizarlo de forma correcta. En el Outlook Express, por ejemplo, es posible indicar, en la configuración, qué fuente de letra usar en el caso de puro texto. Pero eso solo ocurre en el lado del cliente. Desde tu lado, no puedes indicar el tipo de letra: los correos de texto son solo eso, texto.

* Si, en cambio, quieres enviarlo en formato HTML, tienes la ventaja de usar tablas HTML, por lo que entonces te ahorras código para generarlo y representarlo, ya que de eso se encargará el visor HTML del cliente de correo del receptor. Ahora bien... para crear un correo con ese contenido, no es tan sencillo como hacerlo en puro texto. Pero no te preocupes: en CPAN también hay módulos para crearlos de forma sencilla. Y sí que podrás indicar el tipo de letra (otra cosa es que el destinatario tenga o no, en su ordenador, precisamente, ese tipo de letra).

Es claro que yo siempre voy a preferir enviarlo en modo texto, porque se va a transmitir mucho más rápido, ocupará mucho menos espacio, y será posible verlo en muchas más dispositivos.

Pero bueno, en caso de que tengamos que hacerlo en HTML, tienes módulos como Mail::Builder::Simple, que te permite crear mensajes y enviarlos. Incluso tiene soporte para plantillas de mensajes.

La parte de HTML la puedes crear con muchos otros módulos, partiendo del mismísimo CGI. O a mano :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Dudas varias con emails

Notapor panterozo » 2010-06-30 08:40 @403

:O... Que buena respuesta te has mandado, explorer ;)... Una especie de clase magistral sobre emails ;)... todo muy claro, y gracias a esto, comprendo mucho mejor lo que "es" un email.

Muy agradecido de tu respuesta :D
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados

cron