Página 1 de 1

Envío de correos usando Mime::Lite y Net::SMTP

NotaPublicado: 2010-05-16 13:15 @593
por joshe766
Estimados Amigos:

Mis conocimientos son básicos, quien pueda por favor le solicito me ayude con lo siguiente:

Tengo un script para envío de correos, estos son enviados a través de MIME::Lite, pero éste me los envía sin firmar (sin firma de dominio, domain keys) y en el caso de hotmail los mensajes no llegan.

Para que los firme hago el envío con el módulo de Net::SMTP con autenticación, pero el problema radica que cuando encuentra en email invalido detiene el envío y no continúa; he tratado de encontrar qué parámetro debo poner para que salte los emails inválidos y siga enviado a los validos, pero no he podido encontrarlo, a continuación les pego el código, muchas gracias de antemano por su gentil ayuda.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub sendtextemail {
  2.  
  3. use MIME::Lite;
  4.  
  5. if ($smtp eq "1") {
  6.     use Net::SMTP;
  7.     MIME::Lite->send('smtp',$smtp_server, Timeout=>60, Debug=>0,
  8.                          AuthUser=>$user, AuthPass=>$pass);
  9.  
  10.  
  11.    $mailmsg = MIME::Lite->new(
  12.                   From  =>  $from,
  13.                   'Reply-to' =>  $reply,
  14.                   Sender =>  $sender,
  15.                   To   =>  $to,
  16.                   Subject  =>  $subjectline,
  17.                   Type     =>  "text/plain; charset=iso-8859-1",
  18.                   "X-Identifier:"  =>  "$subid-$username\n",
  19.                   "X-Ip:" =>  "$ip\n",
  20.                   Data     =>  "$message",
  21.    );
  22.     $mailmsg->add("Complaints-To" => "$emailabuse\n");
  23.     $mailmsg->send;
  24. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Re: Envío de correos usando Mime::Lite y Net::SMTP

NotaPublicado: 2010-05-16 13:31 @605
por explorer
Bienvenido a los foros de Perl en Español, joshe766.

Yo creo que el problema está en el propio servidor SMTP, que te bloquea el envío de más correos...

Puedes activar el Debug para ver qué está haciendo.

Pero lo que también puedes hacer es reducir el Timeout, a por ejemplo, 10 o 20 segundos, de tal manera que corte la conexión rápidamente si no hay respuesta del servidor de correo.

Re: Envío de correos usando Mime::Lite y Net::SMTP

NotaPublicado: 2010-05-16 16:01 @709
por joshe766
Estimado explorer:

Muchas gracias por su pronta respuesta. El servidor envía normalmente los correos, pero al llegar a una dirección mal escrita o equivocada dice:

mal formed email adress

y detiene el envío. Lo que me gustaría es poner algún parámetro que al llegar a un email inválido lo salte y siga enviando a los demás.

En el módulo de MIME::Lite hay una parte donde dice:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
SkipBad

    If true doesnt throw an error when multiple email addresses are provided and some are not valid. See Net::SMTP::recipient() for details.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Pero no sé dónde modificar esto.


De nuevo gracias.

Re: Envío de correos usando Mime::Lite y Net::SMTP

NotaPublicado: 2010-05-16 16:31 @730
por explorer
Entonces, lo que entiendo es que cuando una dirección de un remitente está mal, el módulo termina con un mensaje de error, no que el servidor de correo paralice la operación.

Pues sí que podrías probar con esa opción. Sólo tienes que adjuntarla al resto de opciones de la llamada send():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
MIME::Lite->send(
    'smtp',
    $smtp_server,
    Timeout  => 60,
    Debug    => 0,
    SkipBad  => 1
    AuthUser => $user,
    AuthPass => $pass,
);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Como también dice en ese apartado, puedes hacer uso de la función last_send_successful() para saber si el correo se pudo enviar o no.