Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Envío de emails con formato HTML

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Dom Oct 28, 2007 12:11 pm
fleandro
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Oct 2007
Mensajes: 3
Envío de emails con formato HTML Responder citando

:? ¿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

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


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

Perl:
print MAIL "MIME-Version: 1.0\r\n";
 print MAIL "Content-type: text/html; charset=iso-8859-1\r\n";


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

Gracias.
Mensaje Dom Oct 28, 2007 6:41 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4105
Ubicación: Valladolid, España
Responder citando

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:
Perl:
        if (ref $sender->OpenMultipart({
                from => 'someone@somewhere.net', 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";
        }
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".
Mensaje Dom Oct 28, 2007 7:36 pm
fleandro
Perlero Nuevo
Perlero Nuevo
Registrado: 28 Oct 2007
Mensajes: 3
Responder citando

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 !!!
Mensaje Lun Oct 29, 2007 11:19 am
Jenda
Perlero Frecuente
Perlero Frecuente
Registrado: 29 Oct 2007
Mensajes: 105
Ubicación: Praga, Republica Checa
Mail::Sender on_errors => 'die' Responder citando

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:

Perl:
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";
}


Jenda
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group