• Publicidad

Envío autenticado de correo bien, pero no envía el CC

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

Envío autenticado de correo bien, pero no envía el CC

Notapor Leotrillo » 2011-07-14 06:27 @310

Hola, tengo un problema con el envío de correos pero solo con los CC, todo lo demás me funciona bien pero cuando paso la lista para enviar en copia solo le llega al primero que hay en la lista, he probado casi todos los separadores, coma, punto y coma, escapándolos para que no sean interpretados, pero nada, ¿tenéis alguna idea? Os paso mi script. Y de paso si le sirve a alguien, perfecto.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. ################ librería ################
  2. use MIME::Lite;
  3. use Net::SMTP;
  4. use Authen::SASL;
  5.  
  6. sub send_mail_to {
  7.  
  8.         my $sender   = "$_[0]";
  9.         my $receiver = "$_[1]";
  10.         my $cc       = "$_[2]";
  11.         my $subject  = "$_[3]";
  12.         my $body     = "$_[4]";
  13.  
  14.                
  15.         my $ServerName    = "XXXXX";
  16.         my $ServerAccount = "XXXXXXXXXX";
  17.         my $ServerPwd     = "XXXXXXXXX";
  18.         my $smtp          = "";
  19.  
  20.         eval {
  21.                 $smtp = Net::SMTP->new( $ServerName, Hello => "XXXXXXX", Debug => 1 );
  22.                 die "Couldn't connect to server" unless $smtp;
  23.         };
  24.         if ($@) {
  25.             print " ERRROR EN EL CORREO\n";
  26.         }
  27.         else {
  28.  
  29.         if ( !$smtp->auth( $ServerAccount, $ServerPwd ) ) {
  30.                 print "";
  31.         }
  32.         if ( !$smtp->mail($sender) ) {
  33.                 print "";
  34.         }
  35.         if ( !$smtp->to($receiver) ) {
  36.                 print "";
  37.         }
  38.                  if ( !$smtp->to($cc) ) {
  39.                 print "";
  40.         }
  41.  
  42.         my $mime_msg = MIME::Lite->new(
  43.                 From    => "$sender",
  44.                 To      => "$receiver",
  45.                    Cc      => "$cc",
  46.                 Subject => "$subject",
  47.                 Type    => 'multipart/mixed',
  48.         );
  49.  
  50.         $mime_msg->attach( Type => 'text/html', Data => qq {$body} );
  51.  
  52.         my $message_header = $mime_msg->header_as_string();
  53.         my $message_body   = $mime_msg->body_as_string();
  54.  
  55.         $smtp->data();
  56.         $smtp->datasend($message_header);
  57.         $smtp->datasend("\n");
  58.         $smtp->datasend($message_body);
  59.         $smtp->dataend();
  60.         $smtp->quit;
  61.         }
  62. }
  63. 1;
  64. ################ Fin librería ################
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Y con un .pl accedo a ella de la siguiente manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #############################################################
  2. require "/var/www/html/gp/enviocorreosgp.lib";
  3.  
  4. my $xto = "$ARGV[1]";
  5. my $cc  = "$ARGV[2]";
  6. my $motivo = "Un motivo cualquiera";
  7. my $body =" Cuerpo del mensaje";
  8.                        
  9. &send_mail_to("micorreo\@hotmail.com","$xto","$cc","$motivo","$body")
  10. ###########################################################
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


No lo hago con hotmail, es solo por poner algo, cambiando los parámetros por los que usa cada uno se podría enviar correo autenticado, pero el $cc se me resiste. De todas formas en el correo que se envía sí que aparece la lista en el CC pero en realidad no los está enviando. ¿Tenéis alguna idea?

Muchas gracias ;-)
Última edición por explorer el 2011-07-14 07:24 @350, editado 1 vez en total
Razón: Marcas Perl
Leotrillo
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-11-24 18:08 @797

Publicidad

Re: Envío autenticado de correo bien, pero no envía el CC

Notapor explorer » 2011-07-14 07:54 @371

No necesitas crear el objeto Net::SMTP. Y estás usando demasiadas comillas dobles.

Esta es mi versión del programa (no probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #############################################################
  2. require '/var/www/html/gp/enviocorreosgp.lib';
  3.      
  4. my $xto = $ARGV[1];
  5. my $cc  = $ARGV[2];
  6. my $motivo = 'Un motivo cualquiera';
  7. my $body   = 'Cuerpo del mensaje';
  8.                            
  9. &send_mail_to('[email protected]', $xto, $cc, $motivo, $body);
  10. ###########################################################
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Y esta es la de la biblioteca (no probado):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. ################ biblioteca ################
  2. use MIME::Lite;
  3.  
  4. sub send_mail_to {
  5.     my($sender, $receiver, $cc, $subject, $body) = @_;
  6.  
  7.     my $ServerName    = 'XXXXX';
  8.     my $ServerAccount = 'XXXXXXXXXX';
  9.     my $ServerPwd     = 'XXXXXXXXX';
  10.  
  11.     my $mime_msg = MIME::Lite->new(
  12.         From    => $sender,
  13.         To      => $receiver,
  14.         Cc      => $cc,
  15.         Subject => $subject,
  16.         Type    => 'multipart/mixed',
  17.     );
  18.  
  19.     $mime_msg->attach( Type => 'text/html', Data => $body );
  20.  
  21.     $mime_msg->send(
  22.          smtp     => $ServerName,
  23.          AuthUser => $ServerAccount,
  24.          AuthPass => $ServerPwd,
  25.          Timeout  => 30,
  26.          Debug    => 1,
  27.      );
  28. }
  29.  
  30. 1;
  31. ################ Fin biblioteca ################
  32.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Fíjate que no hay ni una sola comilla doble. Solo hay comillas simples cuando necesitamos pasar valores constantes.

Hay que recordar que el entrecomillado doble, además de delimitar cadenas de caracteres, hace una interpretación de su contenido, lo cual a veces no es lo que deseamos que pase.

En cuanto al campo Cc, debería bastar con pasar las direcciones separadas por comas. Con el Debug activado, mira a ver qué salida te da y nos lo muestras. Quizás sea una limitación del servidor de correo.
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: Envío autenticado de correo bien, pero no envía el CC

Notapor Leotrillo » 2011-07-14 12:16 @553

Perfecto, me ha funcionado sin problemas, sería mi script, seguro.

Muchas gracias, explorer.
Leotrillo
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2010-11-24 18:08 @797


Volver a Básico

¿Quién está conectado?

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