2006-06-26 15:41 @695 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10250
|
|
|
|
* He arrancado mi WindowsXP. * Me he conectado a www.activestate.com, entro en descargas de ActivePerl. * Me bajo ActivePerl 5.8.8.817 para WindowsXP (o la última versión que exista). * Lo instalo. * Voy a Inicio->Programas->ActivePerl->Documentación. Arranca el navegador con toda la documentación. En la parte izquierda aparece, abajo, toda la lista de módulos instalados. En la parte de MIME, sólo hay dos, el Base64 y otro más, así que me toca instalar el MIME::Entity. * Voy a Inicio->Programas->ActivePerl y arranco Perl Package Manager. * Lo primero es poner la palabra help:  * Como no estoy seguro de cómo se llama el paquete, hago una búsqueda:  * Localizo lo que busco. Se llama MIME-tools en la posición 15. * Lo instalo con install 15 o install MIME-tools:  * Una vez todo instalado, voy a ver si arranca el programa que usa el módulo MIME::Entity. Primero miramos la sintaxis:  * Y ahora queda por arrancarlo directamente. Lo probaré desde la línea de comandos y sin adjuntar un fichero, para ver si funciona sin errores. Le pasaré dos argumentos como si lo hubiese ejecutado desde el web, como si fuera un cgi:  * El resultado es un correo personalizado que recibo en mi Suse Linux:  Naturalmente, para que este último paso funcione, mi servidor de correo (en otra máquina) permite que se puedan enviar correos desde mi WindowsXP. Tiempo total: 7 minutos (5 minutos para bajar el Activestate e instalarlo, 1 minuto para bajar las MIME-tools, 1 minuto para hacer las pruebas). Fíjate si merece la pena o no tener un Perl en condiciones...
Última edición por explorer el 2006-08-22 16:18 @721, editado 1 vez en total
|
2006-06-27 16:18 @721 |
|
|
marfperu
Perlero Nuevo
|
Registrado: 2006-06-23 12:43 @571 Mensajes: 12
|
|
|
|
Hola explorer, hice la reinstalacion del perl, me baje la ultima version desde la web www.ActiveState.com y luego con el ppm instale el modulo MIME::Entity tambien el CGI::Carp para revisar los errores, ahora parece que ya no estamos tan mal, pero boto un solo error que dice lo siguiente. Citar: Can't use an undefined value as a HASH reference at c:\ARCHIV~1\APACHE~1\apache\cgi-bin\enviar.cgi line 88. ese numero de linea pertenece a esta parte del codigo: Código: # Adjuntamos el fichero si lo hay if ( $fichero ) { $msg->attach( Type => uploadInfo($fichero)->{'Content-Type'}, Data => [ $contenido ], Encoding=> 'base64', ); } la pantalla de error se pinta un formulario html que es la que se crea en el codigo del enviar.cgi y en nombre muestra el nombre que mando, el mensaje tambien se muestra todo el contenido pero en el inpute type file no muestra nada derrepente por ahi puede estar el error.
_________________ Marfperu
|
2006-06-28 06:52 @328 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10250
|
|
|
|
Es muy posible que tu navegador de internet no esté enviando las cabeceras MIME al cgi y éste no sepa qué tipo (Content-Type) de archivo está enviando el usuario. El fallo entonces no es el del programa, sino del navegador utilizado, que será antiguo. La línea que creo que da el error es: Código: Type => uploadInfo($fichero)->{'Content-Type'}, Seguramente el módulo CGI, al intentar rellenar la información para uploadInfo() no encuentre el tipo MIME del documento y deje el campo Content-Type sin nada. Ahora viene una pregunta de diseño de la web: ¿Qué tipo de ficheros quieres que la gente envíe? ¿De uno o de varios tipos distintos? Supongamos que decides que todos los ficheros recibidos han de ser del tipo Documentos de Micro$oft Word, entonces cambiaríamos la línea por: Código: Type => uploadInfo($fichero)->{'Content-Type'} || 'application/msword', Si en vez de Word, prefieres que la gente envíe documentos pdf, debes cambiarlo por 'application/pdf'. Si no estás seguro, entonces hay que indicar un valor genérico, como podría ser 'application/octet-stream'. Seguro que hay otra forma para saber el Content-Type del documento...
|
2006-06-28 10:07 @463 |
|
|
marfperu
Perlero Nuevo
|
Registrado: 2006-06-23 12:43 @571 Mensajes: 12
|
|
|
|
|
Sigue saliendo el mismo error a pesar que le pongo esos valores que me has dado, y no creo que sea problema de la antiguedad del navegador porque es el iexplorer 6 mas moderno a ese es el 7 pero es beta, a parte que la idea es que esto funcione en un entorno web, ahora los ficheros que quiero enviar son .doc ahora, lo particular es que cuando hago el envio aparece la pantalla en html que el codigo me manda a pintar, sale el textbox con el nombre, el textbox con el mensaje pero en el textbox del <input type=file nunca aparece nada a pesar de que mas abajo muestra los datos a enviar y ahi si aparece la ruta del adjunto, ahora cuando ahi en esa pantalla le doy al boton examinar y ingreso la ruta y hago el envio ahi si funciona.
_________________ Marfperu
|
2006-06-28 11:56 @538 |
|
|
marfperu
Perlero Nuevo
|
Registrado: 2006-06-23 12:43 @571 Mensajes: 12
|
|
|
|
|
Si esa es la misma linea la 88 y esa linea corresponde a toda la funcion:
if ( $fichero ) { $msg->attach( <--------------------Linea 88 Type => uploadInfo($fichero)->{'Content-Type'} || 'application/octet-stream', Data => [ $contenido ], Encoding=> 'base64', ); }
no entiendo porque a mi no me funciona, en todo caso no se si podrias mandarme una copia del codigo que a ti si te funciona derrepente algo se me esta escanpando.
_________________ Marfperu
|
2006-06-28 12:29 @562 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10250
|
|
|
|
He revisado el código de tu programa, el último que has publicado. Lo he copiado y pegado a mi máquina y tenía varios errores: * En la sección de lectura de los parámetros, no coinciden los nombres que se usan en el formulario html con los que luego usas para intentar leerlos. Así, en el formulario yo uso los campos 'nombre', 'mensaje' y 'fichero'. Pero en tu programa insistes en leer: Código: $nombre = param('nombre'); $fichero = param('file'); $mensaje = param('todo'); Solución: Código: $nombre = param('nombre'); $fichero = param('fichero'); $mensaje = param('mensaje'); * El otro problema está al final, que usas dos métodos para enviar el correo. Salvo que quieras recibir dos correos, es mejor que sólo uses un método cada vez. Te sale mucho más rápido que copies el código que dejé en el mensaje 4409 de la página anterior, el que tiene puesto el Asunto Solucion con MIME::Entity, pues ese es el que funciona, y cambies los campos de correo electrónico con los tuyos.
|
2006-06-28 12:43 @571 |
|
|
marfperu
Perlero Nuevo
|
Registrado: 2006-06-23 12:43 @571 Mensajes: 12
|
|
|
|
mmmmm no creo que ese sea el problema yo ya me habia percatado de esos errores anteriormente y los habia corregido puse todo exactamente como tu lo enviaste por si acaso este es mi codigo final, con respecto a tus pruebas te cuento que me llegaron dos correos uno sin adjunto y otro con adjunto que era un txt aca esta mi codigo final por si acaso para que le des una mirada y a pesar de eso sigue mostrando ese mismo error derrepente aca encuentras algun error en mi codigo que esta haciendo que no funcione bien. Código: #!C:\perl\bin\perl.exe -w
use CGI ':standard'; use CGI::Carp qw(fatalsToBrowser); use MIME::Entity; use warnings; use strict;
# Variables my $nombre = "No hay nombre"; my $mensaje = "No hay mensaje"; my $fichero = "No hay fichero";
# Pintamos la página web print header, start_html('Envío de consultas'), h1({align=>'center'},'Envío de consultas'), hr({width=>'80%'}), start_multipart_form, table( Tr({valign=>'top'}, td("Nombre:"), td(textfield( -name=>'nombre', -size=>40, -maxlength=>80)), ), Tr({valign=>'top'}, td("Mensaje:"), td(textarea( -name=>'mensaje', -default=>'', -rows=>10, -columns=>50)), ), Tr({valign=>'top'}, td("Currículum:"), td(filefield( -name=>'fichero', -default=>'Nombre del fichero a enviar', -size=>50, -maxlength=>80)), ), ), submit, end_form, ;
# Comprobamos si el usuario nos ha pasado algún parámetro if ( param() ) {
$nombre = param('nombre'); $fichero = param('fichero'); $mensaje = param('mensaje');
# Los sacamos en pantalla, para comprobar print hr, p("Datos enviados:"), p,"Nombre: $nombre",br,"Mensaje: $mensaje",br,"Fichero: $fichero", ;
# Leemos el fichero enviado my $contenido = ''; my $fh = upload('fichero'); if ( defined($fh) ) { my ($bytes,$buffer); while ( $bytes = read($fh,$buffer, 8192) ) { $contenido .= $buffer; } }
# Creamos el correo electrónico my $msg = MIME::Entity->build( Type => "multipart/mixed", From => 'web@tottus.com.pe', To => 'mario.flores@makros.biz', Subject => "Únete a nosotros - $nombre", );
# Adjuntamos el mensaje si lo hay if ( $mensaje ) { $msg->attach( Data => [ $mensaje, "\r\n"x2 ], ); }
# Adjuntamos el fichero si lo hay if ( $fichero ) { $msg->attach( Type => uploadInfo($fichero)->{'Content-Type'} || 'application/octet-stream', Data => [ $contenido ], Encoding=> 'base64', ); }
# Tercera forma de envío, con el smtpsend de Mail::Internet $msg->smtpsend( Host => 'mail.makros.biz', Hello => 'mail.makros.biz', MailFrom=> 'web@tottus.com.pe', );
}
print end_html;
__END__
_________________ Marfperu
|
2006-06-28 13:05 @586 |
|
|
marfperu
Perlero Nuevo
|
Registrado: 2006-06-23 12:43 @571 Mensajes: 12
|
|
|
|
Otra cosa que tambien probe fue enviarlo derectamente de la linea de comando pensando que la transferencia de variales de mi formulario al codigo de enviar.pl estaba mal pero lo probe por linea de comandos y me voto exactamente el mismo error: Código: Can't use an undefined value as a HASH reference at c:\ARCHIV~1\APACHE~1\apache\cgi-bin\enviar.cgi line 88. tus correos si me siguen llegando con los adjuntos pero aca no funcionan no entiendo porque
_________________ Marfperu
|
2006-06-28 13:29 @603 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10250
|
|
|
|
He cambiado el código del mensaje 4409. He agregado y cambiado algunas cosas, sobre todo un par de controles para verificar que todo va bien. Y en caso de que algo falle, use diagnostics; nos de más información. Prueba...
|
| Reglas del Foro |
No puedes abrir nuevos temas en este Foro No puedes responder a temas en este Foro No puedes editar tus mensajes en este Foro No puedes borrar tus mensajes en este Foro No puedes enviar adjuntos en este Foro
|
|
Socializa |
 |
|