Página 1 de 1

Envío de emails con formato HTML

NotaPublicado: 2007-10-28 13:11 @590
por fleandro
:? ¿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.

NotaPublicado: 2007-10-28 19:41 @861
por explorer
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".

NotaPublicado: 2007-10-28 20:36 @900
por fleandro
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 !!!

Mail::Sender on_errors => 'die'

NotaPublicado: 2007-10-29 12:19 @554
por Jenda
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