• Publicidad

Enviando un email con adjuntos con Email::Send::SMTP::Gmail

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Enviando un email con adjuntos con Email::Send::SMTP::Gmail

Notapor vobel » 2011-09-29 11:14 @510

Buenos días y gracias de antemano por el apoyo.

Estoy intentando enviar un email con un archivo adjunto. Utilizando Email::Send::SMTP::Gmail. y produce el siguiente error (Odd number of elements in hash assignment at /usr/local/share/perl/5.10.0/Email/Send/SMTP/Gmail.pm line 82.) el correo sale y llega al destinatario pero sin anexo.

Anexo el código fuente.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use Email::Send::SMTP::Gmail;
  4. use Data::Dumper;
  5. use File::Basename;
  6. use DBI;
  7. use DBD::Pg;
  8. use POSIX qw/ strftime /;
  9. use File::Copy;
  10.  
  11. my $user = "postgres"; #Nombre de usuario para la BD
  12. my $pw = "postgres"; #Password del usuario
  13. my $bd = "canales_desar"; #Nombre de la BD
  14.  
  15. #conexion a la BD
  16. my $dbh = DBI->connect("dbi:Pg:dbname=$bd", $user, $pw) or die "Unable to connect: $DBI::errstr\n";
  17.  
  18.  
  19. #Queryss
  20. my $query_select_logproceso ="SELECT * FROM canales.log_proceso WHERE fecha_ejec= ? ";
  21. my $verifica_logproceso = $dbh->prepare($query_select_logproceso);
  22. my $query_id_ruta="SELECT id_ruta FROM canales.archivo WHERE cod_proceso=?";
  23. my $get_id_ruta= $dbh->prepare($query_id_ruta);
  24. my $ruta_archivo_log= " SELECT nombre_ruta FROM canales.ruta WHERE id=? ";
  25. my $get_ruta_archivo_log= $dbh->prepare($ruta_archivo_log);
  26. ###
  27.  
  28. #Variable
  29. #my @logproceso;
  30. my $cod_proceso= '';
  31. my $fecha_archivo='';
  32. my $nom_archivo='';
  33. my $r_procesados = 0;
  34. my $r_insertados = 0;
  35. my $r_modificados = 0;
  36. my $r_errores = 0;
  37. my $fecha_ejec='';
  38. my $id_ruta=0;
  39. my $comple_ruta='/Errores';
  40.  
  41. my $fecha_actual_log = strftime( "%d/%m/%Y", localtime(time) );
  42. my $proceso ='CABA';
  43. my $fecha_actual ='19/09/2011';
  44. my $Archivo='HC_ABA_CANTV_30062010.txt';
  45. my $subjeto = 'hc log carga archivo '.$Archivo ;  
  46.  
  47. print " fecha sistema::$fecha_actual_log";
  48. $fecha_actual_log = "13/09/2011";
  49. print "fecha cableada:: $fecha_actual_log \n";
  50.      
  51.  $verifica_logproceso-> execute ($fecha_actual_log);
  52.  
  53.  # BIND TABLE COLUMNS TO VARIABLES
  54. $verifica_logproceso->bind_columns(undef, \$cod_proceso, \$fecha_archivo,\$nom_archivo,\$r_procesados, \$r_insertados, \$r_modificados, \$r_errores,\$fecha_ejec );
  55.  
  56. # LOOP THROUGH RESULTS
  57. while($verifica_logproceso->fetch()) {
  58.    print "$cod_proceso, $fecha_archivo, $nom_archivo, $nom_archivo, $r_procesados, $r_insertados, $r_modificados, $r_errores, $fecha_ejec \n";
  59.    $get_id_ruta-> execute ($cod_proceso);
  60.    
  61.    while($Row=$get_id_ruta->fetchrow_hashref){
  62.                 print "ruta  ::  $Row->{id_ruta} \n";
  63.                 $id_ruta = $Row->{id_ruta};
  64.                 $get_ruta_archivo_log-> execute ($id_ruta);
  65.                  while($Row=$get_ruta_archivo_log->fetchrow_hashref){
  66.                 print "nombre_ruta:: $Row->{nombre_ruta}\n";
  67.                    my $nombre_ruta=$Row->{nombre_ruta};
  68.                    print " ruta pre::$nombre_ruta \n";
  69.                    $nombre_ruta = $nombre_ruta.''.$comple_ruta ;
  70.          print " ruta ::$nombre_ruta \n";
  71.           $nombre_ruta =  $nombre_ruta.'/'.$nom_archivo;
  72.          
  73.           print " ruta completa ::$nombre_ruta \n";
  74. ## fatala get5 correo        
  75.          
  76.          my $mail=Email::Send::SMTP::Gmail->new(
  77.            -smtp=>'gmail.com',
  78.            -login=>'[email protected]',
  79.             -pass=>'Inicio01',
  80.          );
  81.          $mail->send(
  82.         -to=>'[email protected]',
  83.     -subject=> $subjeto,
  84.     -verbose=>'1',
  85.     -body=>
  86.            
  87.            'Fecha de Ejecucion:     13/09/2011
  88.            Fecha del Archivo:     19/09/2011
  89.            Total de registros:    1415
  90.            Registros Ingresados:  1076
  91.            Registros Modificados: 339
  92.            Registros Erroneos:    2
  93.            
  94.            Si hubo error, verificar archivo adjunto.
  95.            '
  96.      -attachments=>$nombre_ruta
  97. );
  98.  
  99. $mail->bye;
  100.          
  101.          
  102.       }
  103.    }
  104.  }
  105.              
  106. ###Proceso
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114. $mail->send(
  115.     -to=>'[email protected]',
  116.     -subject=> $subjeto,
  117.     -verbose=>'1',
  118.     -body=>
  119.            
  120.            'Fecha de Ejecucion:     13/09/2011
  121.            Fecha del Archivo:     19/09/2011
  122.            Total de registros:    1415
  123.            Registros Ingresados:  1076
  124.            Registros Modificados: 339
  125.            Registros Erroneos:    2
  126.            
  127.            Si hubo error, verificar archivo adjunto.
  128.            '
  129.     #-attachments=>/home/usr/Data2/Dalma_HC_MOVILNET/Cobertura/Errores/HC_COBERTURA_MOVILl_19092011.xls
  130. );
  131.  
  132. $mail->bye;
  133.            'Fecha de Ejecucion:     13/09/2011
  134.            Fecha del Archivo:     19/09/2011
  135.            Total de registros:    1415
  136.            Registros Ingresados:  1076
  137.            Registros Modificados: 339
  138.            Registros Erroneos:    2
  139.            
  140.            Si hubo error, verificar archivo adjunto.
  141.            '
  142.     #-attachments=>/home/usr/Data2/Dalma_HC_MOVILNET/Cobertura/Errores/HC_COBERTURA_MOVILl_19092011.xls
  143. );
  144.  
  145. $mail->bye;
  146.  
  147.  
  148. $mail->send(
  149.     -to=>'[email protected]',
  150.     -subject=> $subjeto,
  151.     -verbose=>'1',
  152.     -body=>
  153.            
  154.            'Fecha de Ejecucion:     13/09/2011
  155.            Fecha del Archivo:     19/09/2011
  156.            Total de registros:    1415
  157.            Registros Ingresados:  1076
  158.            Registros Modificados: 339
  159.            Registros Erroneos:    2
  160.            
  161.            Si hubo error, verificar archivo adjunto.
  162.            '
  163.     #-attachments=>/home/usr/Data2/Dalma_HC_MOVILNET/Cobertura/Errores/HC_COBERTURA_MOVILl_19092011.xls
  164. );
  165.  
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
vobel
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-09-29 11:00 @500

Publicidad

Re: Enviando un email con adjuntos con Email::Send::SMTP::Gmail

Notapor explorer » 2011-09-29 11:49 @534

Bienvenido a los foros de Perl en español, vobel.

Falta una coma, al final de las líneas 95, 130, 143 y 164.

Y el valor de las líneas 131, 144 y 165 debería estar entrecomillado.
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

Re: Enviando un email con adjuntos con Email::Send::SMTP::Gmail

Notapor vobel » 2011-09-29 12:38 @568

Gracias hermano. Corregí el código pero Perl no consigue el archivo en la ruta.

Unable to find the attachment file: /home/usr/Data2/Dalma_HC_MOVILNET/Cobertura/Errores/HC_COBERTURA_MOVILl_19092011.xls


y esa esa la ruta donde está el archivo. Anexo captura de pantalla.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use Email::Send::SMTP::Gmail;
  4. use Data::Dumper;
  5. use File::Basename;
  6. use DBI;
  7. use DBD::Pg;
  8. use POSIX qw/ strftime /;
  9. use File::Copy;
  10.  
  11. my $user = "postgres"; #Nombre de usuario para la BD
  12. my $pw = "postgres"; #Password del usuario
  13. my $bd = "canales_desar"; #Nombre de la BD
  14.  
  15. #conexion a la BD
  16. my $dbh = DBI->connect("dbi:Pg:dbname=$bd", $user, $pw) or die "Unable to connect: $DBI::errstr\n";
  17.  
  18.  
  19. #Queryss
  20. my $query_select_logproceso ="SELECT * FROM canales.log_proceso WHERE fecha_ejec= ? ";
  21. my $verifica_logproceso = $dbh->prepare($query_select_logproceso);
  22. my $query_id_ruta="SELECT id_ruta FROM canales.archivo WHERE cod_proceso=?";
  23. my $get_id_ruta= $dbh->prepare($query_id_ruta);
  24. my $ruta_archivo_log= " SELECT nombre_ruta FROM canales.ruta WHERE id=? ";
  25. my $get_ruta_archivo_log= $dbh->prepare($ruta_archivo_log);
  26. ###
  27.  
  28. #Variable
  29. #my @logproceso;
  30. my $cod_proceso= '';
  31. my $fecha_archivo='';
  32. my $nom_archivo='';
  33. my $r_procesados = 0;
  34. my $r_insertados = 0;
  35. my $r_modificados = 0;
  36. my $r_errores = 0;
  37. my $fecha_ejec='';
  38. my $id_ruta=0;
  39. my $comple_ruta='/Errores';
  40.  
  41. my $fecha_actual_log = strftime( "%d/%m/%Y", localtime(time) );
  42. my $proceso ='CABA';
  43. my $fecha_actual ='19/09/2011';
  44. my $Archivo='HC_ABA_CANTV_30062010.txt';
  45. my $subjeto = 'hc log carga archivo '.$Archivo ;  
  46.  
  47. print " fecha sistema::$fecha_actual_log";
  48. $fecha_actual_log = "13/09/2011";
  49. print "fecha cableada:: $fecha_actual_log \n";
  50.      
  51.  $verifica_logproceso-> execute ($fecha_actual_log);
  52.  
  53.  # BIND TABLE COLUMNS TO VARIABLES
  54. $verifica_logproceso->bind_columns(undef, \$cod_proceso, \$fecha_archivo,\$nom_archivo,\$r_procesados, \$r_insertados, \$r_modificados, \$r_errores,\$fecha_ejec );
  55.  
  56. # LOOP THROUGH RESULTS
  57. while($verifica_logproceso->fetch()) {
  58.    print "$cod_proceso, $fecha_archivo, $nom_archivo, $nom_archivo, $r_procesados, $r_insertados, $r_modificados, $r_errores, $fecha_ejec \n";
  59.    $get_id_ruta-> execute ($cod_proceso);
  60.    
  61.    while($Row=$get_id_ruta->fetchrow_hashref){
  62.                 print "ruta  ::  $Row->{id_ruta} \n";
  63.                 $id_ruta = $Row->{id_ruta};
  64.                 $get_ruta_archivo_log-> execute ($id_ruta);
  65.                  while($Row=$get_ruta_archivo_log->fetchrow_hashref){
  66.                 print "nombre_ruta:: $Row->{nombre_ruta}\n";
  67.                    my $nombre_ruta=$Row->{nombre_ruta};
  68.                    print " ruta pre::$nombre_ruta \n";
  69.                    $nombre_ruta = $nombre_ruta.''.$comple_ruta ;
  70.          print " ruta ::$nombre_ruta \n";
  71.           $nombre_ruta =  $nombre_ruta.'/'.$nom_archivo;
  72.          
  73.           print " ruta completa ::$nombre_ruta \n";
  74. ## fatala get5 correo        
  75.          
  76.          my $mail=Email::Send::SMTP::Gmail->new(
  77.            -smtp=>'gmail.com',
  78.            -login=>'[email protected]',
  79.             -pass=>'******',
  80.          );
  81.          $mail->send(
  82.         -to=>'[email protected]',
  83.     -subject=> $subjeto,
  84.     -verbose=>'1',
  85.     -body=>
  86.            
  87.            'Fecha de Ejecucion:     13/09/2011
  88.            Fecha del Archivo:     19/09/2011
  89.            Total de registros:    1415
  90.            Registros Ingresados:  1076
  91.            Registros Modificados: 339
  92.            Registros Erroneos:    2
  93.            
  94.            Si hubo error, verificar archivo adjunto. ',
  95.      -attachments=>$nombre_ruta
  96. );
  97.  
  98. $mail->bye;
  99.          
  100.          
  101.       }
  102.    }
  103.  }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Adjuntos
Pantallazo-1.png
pantalla de ubicación de archivo
Pantallazo-1.png (109.24 KiB) Visto 631 veces
Última edición por explorer el 2011-09-29 14:52 @661, editado 1 vez en total
Razón: Marcas de código Perl
vobel
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-09-29 11:00 @500

Re: Enviando un email con adjuntos con Email::Send::SMTP::Gmail

Notapor explorer » 2011-09-29 14:59 @666

El error está en la segunda 'I' de la palabra 'MOVILI'.

En el fichero, es una 'I', pero en el mensaje de error es una 'L' minúscula:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
/home/usr/Data2/Dalma_HC_MOVILNET/Cobertura/Errores/HC_COBERTURA_MOVILl_19092011.xls
                                                                      ^
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
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

Re: Enviando un email con adjuntos con Email::Send::SMTP::Gmail

Notapor vobel » 2011-09-29 15:48 @700

Muchísimas gracias, hermano.
vobel
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-09-29 11:00 @500


Volver a Básico

¿Quién está conectado?

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