• Publicidad

Enviar Mail con archivo adjunto

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Notapor marfperu » 2006-06-26 10:07 @463

No funciona :(, instalé el módulo MIME-tools que contiene el Entity, con el archivo ppd, así que supongo está bien instalado, de ahí usé el último código que me enviaste reemplazando los valores específicos, pero aun así sigue apareciendo la misma pantalla y no envía el correo.

Así es tal cual lo probé, el archivo donde lo guardo se llama enviado.cgi y está puesto en la carpeta cgi-bin del Apache. Ya no sé qué más hacer.
Marfperu
marfperu
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-06-23 12:43 @571

Publicidad

Notapor explorer » 2006-06-26 10:53 @495

Bueno, entonces hay que mirar otras cosas que no sean Perl.
  • Instala (si no está) el módulo CGI::Carp, colócalo después del use CGI. De esa manera verás los errores en la ventana del navegador.
    Colócala así:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1. use CGI::Carp qw(fatalsToBrowser);
    Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
  • ¿El servidor tiene servicio de correo? ¿El servidor de correo admite una dirección como 'Web' como remitente?
  • ¿Has revisado los logs de actividad del servidor web? ¿Qué ponen?
  • Desde la línea de comandos ejecuta perl -c script.pl cambiando script.pl por tu programa. Perl te dirá si no hay errores de sintaxis.
  • Si lo anterior no funciona, iremos de atrás adelante... ¿si quitas toda la parte del programa del if ( param() ) { ... }, el script funciona y sale una tabla en pantalla?
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 marfperu » 2006-06-26 12:06 @546

A ver, hice lo que me indicaste. Ya tenía instalado el módulo CGI::Carp, y me muestra errores. Lo malo es que siempre sale que falta tal módulo, y mientras los voy poniendo siempre sale que falta otro, primero fue el Mail::Internet, lo puse y de ahí salió que faltaba el Mail::Field, de ahí el Mail:Header, de ahí el IO:wrap todos esos los puse, de ahí salió que faltaba el MINE::base64. Ese sí estaba pero estaba en otra carpeta, lo moví de ubicación y de ahí salió que faltaba el XSloader.pm, lo bajé y lo ubiqué en la carpeta Perl/Lib y salió este último error que la verdad no sé qué hacer ya.

Software error:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[Mon Jun 26 12:02:34 2006] Entity.pm:
[Mon Jun 26 12:02:34 2006] Entity.pm:
[Mon Jun 26 12:02:34 2006] Head.pm:
[Mon Jun 26 12:02:34 2006] Head.pm:
[Mon Jun 26 12:02:34 2006] Words.pm:
[Mon Jun 26 12:02:34 2006] Words.pm:
[Mon Jun 26 12:02:34 2006] Base64.pm:
[Mon Jun 26 12:02:34 2006] XSLoader.pm: Can't locate loadable object for module MIME::Base64 in @INC (@INC contains: C:\Perl\lib C:\Perl\site\lib .) at C:\Perl\site\lib/MIME/Words.pm line 77
[Mon Jun 26 12:02:34 2006] Entity.pm:
[Mon Jun 26 12:02:34 2006] Entity.pm:
[Mon Jun 26 12:02:34 2006] Head.pm:
[Mon Jun 26 12:02:34 2006] Head.pm:
[Mon Jun 26 12:02:34 2006] Words.pm:
[Mon Jun 26 12:02:34 2006] Words.pm: BEGIN failed--compilation aborted at C:\Perl\site\lib/MIME/Words.pm line 77.
[Mon Jun 26 12:02:34 2006] Entity.pm:
[Mon Jun 26 12:02:34 2006] Entity.pm:
[Mon Jun 26 12:02:34 2006] Head.pm:
[Mon Jun 26 12:02:34 2006] Head.pm: BEGIN failed--compilation aborted at C:\Perl\site\lib/MIME/Head.pm line 118.
[Mon Jun 26 12:02:34 2006] Entity.pm:
[Mon Jun 26 12:02:34 2006] Entity.pm: BEGIN failed--compilation aborted at C:\Perl\site\lib/MIME/Entity.pm line 224. BEGIN failed--compilation aborted at c:\ARCHIV~1\APACHE~1\apache\cgi-bin\enviado.cgi line 5.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Ya no tengo idea qué más ver, le quité la sección a partir de if() que me dijiste y me sale el mismo error.
Marfperu
marfperu
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-06-23 12:43 @571

Notapor explorer » 2006-06-26 14:00 @625

Si has tenido que bajar e instalar el módulo XSLoader.pm eso significa que tu instalación de Perl ha sufrido un golpe en la nariz o que es muy, muy, viejo.

Mi recomendación es: borra (desinstala) toda la instalación de Perl del ordenador (guardando tus scripts y programas, claro). Bájate la última versión del ActivePerl y la instalas. Y cuando necesites instalar un nuevo módulo, usa de forma ->EXCLUSIVA<- el programa PPM.

El mensaje de error del XSLoader está diciendo que no es que no encuentre el módulo MIME::Base64, sino que lo que no encuentra es el MIME/Base64/Base64.so o MIME/Base64/Base64.dll, es decir, la librería compilada de la que depende el módulo MIME::Base64. En mi ordenador esa librería está en /usr/lib/perl/5.8.8/auto/MIME/Base64.

Por eso existen programas como el PPM, para evitar estos problemas de que si te bajas un módulo y lo colocas 'a mano'. Puede darse el caso, como se ve aquí, de que se nos olvide 'colocar' otro fichero.
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 marfperu » 2006-06-26 14:29 @645

Ok, supuse eso de que era muy antiguo, lamentablemente el servidor en el cual voy a trabajar tiene esta versión, y no puedo instalar uno más actualizado. ¿cómo podría hacer, o qué módulo puedo usar para poder realizar estos envíos de correo con adjunto? Como te comenté el envío de correo con sendmail sí funcionó a la perfección. Otra cosa: tienes alguna dirección donde pueda bajar los módulos pero para Windows, porque la página de CPAN baja todos para Linux y yo trabajo en plataforma Windows, el problema es que para instalar en PPM siempre busca un archivo PPD y en los paquetes que bajo de CPAN nunca están esos archivos. Sólo logré ubicar el del MIME-tools en otra página pero no están los demás. Ahora lo que voy a hacer es desinstalar el Perl y volverlo a instalar con mucho cuidado en mi servidor de prueba y volver a ejecutar todas las recomendaciones que me has dado para ver si logro hacer ese envío.
Marfperu
marfperu
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-06-23 12:43 @571

Notapor explorer » 2006-06-26 15:41 @695

  • 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:
    Imagen
  • Como no estoy seguro de cómo se llama el paquete, hago una búsqueda:
    Imagen
  • Localizo lo que busco. Se llama MIME-tools en la posición 15.
  • Lo instalo con install 15 o install MIME-tools:
    Imagen
  • Una vez todo instalado, voy a ver si arranca el programa que usa el módulo MIME::Entity. Primero miramos la sintaxis:
    Imagen
  • 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:
    Imagen
  • El resultado es un correo personalizado que recibo en mi Suse Linux:
    Imagen
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
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 marfperu » 2006-06-27 16:18 @721

Hola, explorer. Hice la reinstalación del Perl, me bajé la última versión desde la web http://www.ActiveState.com y luego con el PPM instalé el módulo MIME::Entity. También el CGI::Carp para revisar los errores. Ahora parece que ya no estamos tan mal, pero boto un solo error que dice lo siguiente.

Can't use an undefined value as a HASH reference at c:\ARCHIV~1\APACHE~1\apache\cgi-bin\enviar.cgi line 88.


Ese número de línea pertenece a esta parte del código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     # Adjuntamos el fichero si lo hay
  2.     if ( $fichero ) {
  3.         $msg->attach(
  4.                     Type    => uploadInfo($fichero)->{'Content-Type'},
  5.                     Data    => [ $contenido ],
  6.                     Encoding=> 'base64',
  7.         );
  8.     }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La pantalla de error se pinta un formulario HTML que es la que se crea en el código del enviar.cgi y en nombre muestra el nombre que mando, el mensaje también se muestra todo el contenido pero en el input type file no muestra nada. De repente por ahí puede estar el error.
Marfperu
marfperu
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-06-23 12:43 @571

Notapor explorer » 2006-06-28 06:52 @328

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. Type => uploadInfo($fichero)->{'Content-Type'},
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. Type => uploadInfo($fichero)->{'Content-Type'} || 'application/msword',
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

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...
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 marfperu » 2006-06-28 10:07 @463

Sigue saliendo el mismo error a pesar que le pongo esos valores que me has dado, y no creo que sea problema de la antigüedad del navegador porque es el iexplorer 6 más 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 envío aparece la pantalla en html que el código 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 más abajo muestra los datos a enviar y ahí sí aparece la ruta del adjunto, ahora cuando ahí en esa pantalla le doy al botón examinar y ingreso la ruta y hago el envío ahí sí funciona.
Marfperu
marfperu
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-06-23 12:43 @571

Notapor explorer » 2006-06-28 11:43 @530

¿Es la línea del error la que estamos hablando o es otra? Si el error dice que está en la línea 88, yo he supuesto que era esa.

Lo he probado en mi WindowsXP a mi no me falla. El Explorer 6 sí que devuelve el MIME correcto.

Otra cosa, el que no salga el nombre del fichero por segunda vez es un tema de seguridad en los navegadores modernos, que siempre lo borran.
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

AnteriorSiguiente

Volver a Web

¿Quién está conectado?

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