• Publicidad

Envío de emails con formato HTML

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Envío de emails con formato HTML

Notapor fleandro » 2007-10-28 13:11 @590

:? ¿Cómo enviar emails en formato HTML en algunos servidores?

Normalmente venía usando este tipo de subrutina para envío de emails HTML que incluían imágenes y formularios HTML con post a programas Perl. Sin embargo, he cambiado de servidor y el mismo programa no funciona si no le saco los renglones que permiten el formato HTML.

Por ejemplo, la siguiente subrutina funciona muy bien en un servidor y no en otro

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub mail {
open (MAIL, "|$mailprog -t") or &dienice("Can't access $mailprog!\n");
 print MAIL "MIME-Version: 1.0\r\n";
 print MAIL "Content-type: text/html; charset=iso-8859-1\r\n";
 print MAIL "From: $recipient\n";
 print MAIL "To: $FORM{'email'}\n";
 print MAIL "Cc: $recipient\n";
 print MAIL "Subject: Acuse de su Inscripcion\n\n";
 print MAIL "<html><head><title>INSCRIPCION";
 print MAIL "</title></head><body><br>";
 print MAIL "Acuse de SU INSCRIPCION<br>";
 print MAIL "<center><a href=http://www.server.com/index.shtml><img border=0 src=http://www.server.com/imagenes/logo.jpg></a></center><br>";
 print MAIL "<center><img border=0 src=http://www.server.com/imagenes/logo1.jpg></center><br>";
 print MAIL "<font face=Verdana color=#FF0000 size=4><p align=center><b>ACTIVE SU CUENTA</font>";

 print MAIL "<center><H1><a href=http://www.server.com/cgi-bin/validar.pl?$user&$clave>Haga click aqui</a></H1></center><br>";
 
 print MAIL "<H1>SI NO PUEDE VALIDAR HACIENDO CLICK ARRIBA COPIE ÉSTE LINK EN SU NAVEGADOR</H1><br><hr>";
 print MAIL "http://www.server.com/cgi-bin/validar.pl?user=$user&clave=$clave";

 print MAIL"<br><hr>nombre=$FORM{'nombre'}<br>";
 print MAIL"<br><hr>Apellido=$FORM{'apellido'}<br>";
 print MAIL"EMAIL=$FORM{'email'}<br>";
 print MAIL"CLAVE=$FORM{'clave'}<br>";
 print MAIL"pais donde vivo=$FORM{'pais'}<br>";
 print MAIL "</BODY></html>";  
 close(MAIL);
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Como ya dije, esto en otro servidor no anda, excepto que le saqué las dos líneas siguientes

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 print MAIL "MIME-Version: 1.0\r\n";
 print MAIL "Content-type: text/html; charset=iso-8859-1\r\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero claro, en este caso el email ya pierde su formato HTML y pasa a ser texto plano.

Gracias.
fleandro
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-10-28 12:57 @581

Publicidad

Notapor explorer » 2007-10-28 19:41 @861

Humm.... ¿Por qué usas "\r"? En la ->inmensa<- mayoría de los casos no te va a hacer falta.

Para enviar correos de esta forma, yo uso el módulo Mail::Sender:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        if (ref $sender->OpenMultipart({
                from => '[email protected]', to => $recipients,
                subject => 'Embedded Image Test',
                boundary => 'boundary-test-1',
                multipart => 'related'})) {
                $sender->Attach(
                         {description => 'html body',
                         ctype => 'text/html; charset=us-ascii',
                         encoding => '7bit',
                         disposition => 'NONE',
                         file => 'test.html'
                });
                $sender->Attach({
                        description => 'ed\'s gif',
                        ctype => 'image/gif',
                        encoding => 'base64',
                        disposition => "inline; filename=\"apache_pb.gif\";\r\nContent-ID: <img1>",
                        file => 'apache_pb.gif'
                });
                $sender->Close() or die "Close failed! $Mail::Sender::Error\n";
        } else {
                die "Cannot send mail: $Mail::Sender::Error\n";
        }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Es decir, el HTML lo hago fuera, con otro programa. En el programa no hay código HTML.

Viendo lo que te pasa... es posible que el problema esté en el programa que envía correo, el $mailprog, pero primero haría la prueba de quitar los "\r".
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

Notapor fleandro » 2007-10-28 20:36 @900

Explorer, F A N T Á S T I C O, el fallo lo producía \r, así de simple. Si bien el modulo Mail::Sender es útil para otras cosas, esto me permite seguir adelante. Muchas gracias. De todos los foros, ¡¡¡ el único que pudo solucionarlo !!!
fleandro
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2007-10-28 12:57 @581

Mail::Sender on_errors => 'die'

Notapor Jenda » 2007-10-29 12:19 @554

Hola.

Muchas veces es más fácil pedir a Mail::Sender que lance una excepción en caso de fallos. Después, no tienes más que testar los resultados de todas las funciones con solo poner un eval{} en torno de su uso:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
eval {
  my $sender = Mail::Sender->new({
    on_errors => 'die',
    ...
  );
  $sender->OpenMultipart(...);
  $sender->Body(...);
  $sender->Attach(...);
  $sender->Close();
};
if ($@) {
  report_error "Faltó a enviar el correo: $Mail::Sender::Error";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Jenda
Jenda
Perlero nuevo
Perlero nuevo
 
Mensajes: 132
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa


Volver a Avanzado

¿Quién está conectado?

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