• Publicidad

Enviar Mail con archivo adjunto

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

Notapor marfperu » 2006-06-28 11:56 @538

Sí, esa es la misma línea, la 88, y esa línea corresponde a toda la función:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     if ( $fichero ) {
  2.         $msg->attach(
  3.                     Type => uploadInfo($fichero)->{'Content-Type'} || 'application/octet-stream',
  4.                     Data    => [ $contenido ],
  5.                     Encoding=> 'base64',
  6.         );
  7.     }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

No entiendo por qué a mi no me funciona, en todo caso no sé si podrías mandarme una copia del código que a ti sí te funciona. de repente algo se me está escapando.
Marfperu
marfperu
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-06-23 12:43 @571

Publicidad

Notapor explorer » 2006-06-28 12:29 @562

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:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1.  $nombre = param('nombre');
    2.  $fichero = param('file');
    3.  $mensaje = param('todo');
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
    Solución:
    Sintáxis: [ Descargar ] [ Ocultar ]
    Using perl Syntax Highlighting
    1.  $nombre = param('nombre');
    2.  $fichero = param('fichero');
    3.  $mensaje = param('mensaje');
    Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
  • 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 Solución con MIME::Entity, pues ese es el que funciona, y cambies los campos de correo electrónico con los tuyos.
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 12:43 @571

Hummmmm... no creo que ese sea el problema. Ya me había percatado de esos errores anteriormente y los había corregido. Puse todo exactamente como tu lo enviaste. Por si acaso este es mi código final. Con respecto a tus pruebas te cuento que me llegaron dos correos: uno sin adjunto y otro con adjunto que era un txt. Acá está mi código final por si acaso para que le des una mirada y a pesar de eso sigue mostrando ese mismo error. De repente acá encuentras algún error en mi código que está haciendo que no funcione bien.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!C:\perl\bin\perl.exe -w
  2.  
  3. use CGI ':standard';
  4. use CGI::Carp qw(fatalsToBrowser);
  5. use MIME::Entity;
  6. use warnings;
  7. use strict;
  8.  
  9. # Variables
  10. my $nombre  = "No hay nombre";
  11. my $mensaje = "No hay mensaje";
  12. my $fichero = "No hay fichero";
  13.  
  14. # Pintamos la página web
  15. print
  16.         header,
  17.         start_html('Envío de consultas'),
  18.             h1({align=>'center'},'Envío de consultas'),
  19.             hr({width=>'80%'}),
  20.             start_multipart_form,
  21.                 table(
  22.                     Tr({valign=>'top'},
  23.                         td("Nombre:"),
  24.                         td(textfield(   -name=>'nombre',
  25.                                         -size=>40,
  26.                                         -maxlength=>80)),
  27.                     ),
  28.                     Tr({valign=>'top'},
  29.                         td("Mensaje:"),
  30.                         td(textarea(    -name=>'mensaje',
  31.                                         -default=>'',
  32.                                         -rows=>10,
  33.                                         -columns=>50)),
  34.                     ),             
  35.                     Tr({valign=>'top'},
  36.                         td("Currículum:"),
  37.                         td(filefield(   -name=>'fichero',
  38.                                         -default=>'Nombre del fichero a enviar',
  39.                                         -size=>50,
  40.                                         -maxlength=>80)),
  41.                     ),
  42.                 ),
  43.                 submit,
  44.             end_form,
  45.         ;
  46.  
  47. # Comprobamos si el usuario nos ha pasado algún parámetro
  48. if ( param() ) {
  49.  
  50.     $nombre  = param('nombre');
  51.     $fichero = param('fichero');
  52.     $mensaje = param('mensaje');
  53.  
  54.     # Los sacamos en pantalla, para comprobar
  55.     print
  56.             hr,
  57.             p("Datos enviados:"),
  58.             p,"Nombre: $nombre",br,"Mensaje: $mensaje",br,"Fichero: $fichero",
  59.     ;
  60.  
  61.     # Leemos el fichero enviado
  62.     my $contenido = '';
  63.     my $fh = upload('fichero');
  64.     if ( defined($fh) ) {
  65.         my ($bytes,$buffer);
  66.         while ( $bytes = read($fh,$buffer, 8192) ) {
  67.             $contenido .= $buffer;
  68.         }
  69.     }
  70.  
  71.     # Creamos el correo electrónico
  72.     my $msg = MIME::Entity->build(
  73.                     Type    => "multipart/mixed",
  74.                     From    => '[email protected]',
  75.                     To      => '[email protected]',
  76.                     Subject => "Únete a nosotros - $nombre",
  77.     );
  78.  
  79.     # Adjuntamos el mensaje si lo hay
  80.     if ( $mensaje ) {
  81.         $msg->attach(
  82.                     Data    => [ $mensaje, "\r\n"x2 ],
  83.         );
  84.     }
  85.  
  86.     # Adjuntamos el fichero si lo hay
  87.     if ( $fichero ) {
  88.         $msg->attach(
  89.                     Type => uploadInfo($fichero)->{'Content-Type'} || 'application/octet-stream',
  90.                     Data    => [ $contenido ],
  91.                     Encoding=> 'base64',
  92.         );
  93.     }  
  94.  
  95.     # Tercera forma de envío, con el smtpsend de Mail::Internet
  96.    $msg->smtpsend(
  97.                    Host    => 'mail.makros.biz',
  98.                    Hello   => 'mail.makros.biz',
  99.                    MailFrom=> '[email protected]',
  100.    );
  101.  
  102. }
  103.  
  104. print end_html;
  105.  
  106. __END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Marfperu
marfperu
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-06-23 12:43 @571

Notapor marfperu » 2006-06-28 13:05 @586

Otra cosa que también probé fue enviarlo directamente de la línea de comando pensando que la transferencia de variables de mi formulario al código de enviar.pl estaba mal pero lo probé por línea de comandos y me botó exactamente el mismo error:

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 sí me siguen llegando con los adjuntos pero acá no funcionan. No entiendo por qué.
Marfperu
marfperu
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2006-06-23 12:43 @571

Notapor explorer » 2006-06-28 13:29 @603

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...
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

Anterior

Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados