Dom Oct 28, 2007 12:11 pm
|
 |
fleandro
Perlero Nuevo

|
Registrado: 28 Oct 2007
Mensajes: 3
|
|
| Envío de emails con formato HTML |
|
|
:? ¿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. |
|
|
|

Dom Oct 28, 2007 6:41 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4105
Ubicación: Valladolid, España
|
|
|
|
|
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". |
|

Dom Oct 28, 2007 7:36 pm
|
 |
fleandro
Perlero Nuevo

|
Registrado: 28 Oct 2007
Mensajes: 3
|
|
|
|
|
| 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 !!! |
|
Lun Oct 29, 2007 11:19 am
|
 |
Jenda
Perlero Frecuente

|
Registrado: 29 Oct 2007
Mensajes: 105
Ubicación: Praga, Republica Checa
|
|
| Mail::Sender on_errors => 'die' |
|
|
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 |
|
Powered by phpBB © 2001, 2005 phpBB Group
|