• Publicidad

Can't locate MIME::Lite

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

Can't locate MIME::Lite

Notapor desdechina » 2013-01-30 06:06 @296

Hola:

Primero decir que soy absolutamente nueva en esto e intento hacer algo muy, muy simple.
He leído en el foro sobre el tema pero es demasiado complicado de entender para mi porque lo mio es el primer paso.

A ver: Intento mandar un correo.
Este es mi código:

use MIME::Lite;
my $msg = MIME::Lite->new(
From =>'[email protected]',
To =>'[email protected]',
Subject =>'prueba',
Data =>"desde Perl"
) ;
MIME::Lite->send('smtp', "smtp.gmail.com", Timeout => 60 ) ;
$msg->send;

Y ya está. No quiero nada más.

Problema:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
   Can't locate MIME/Lite.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at Depurando.pl line 8.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Qué hago?

Mil gracias
desdechina
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2013-01-11 08:21 @389

Publicidad

Re: Can't locate MIME::Lite

Notapor explorer » 2013-01-30 08:33 @398

Bienvenida a los foros de Perl en Español, desdechina.

El mensaje de error dice que el módulo MIME::Lite no está instalado en tu sistema.

¿Qué sistema operativo tienes?

¿Qué versión de Perl tienes instalado? Ejecuta perl -v para saberlo.

Seguramente tendrás que instalarlo, pero ya digo, que eso depende del sistema en que estés.

Presta atención a lo que dice el autor del módulo, en la página de manual: no lo recomienda usar, ya que contiene algunos errores graves, y en su lugar indica que debemos usar otros módulos, como Email::MIME o MIME::Entity y Email::Sender. De MIME::Entity sí que hay un ejemplo en los foros.
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: Can't locate MIME::Lite

Notapor desdechina » 2013-01-30 08:42 @404

Hola. Gracias por la respuesta.
Estoy en Windows con Perl v5.12.4
A través del PPM parece que sí que está instalado.
desdechina
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2013-01-11 08:21 @389

Re: Cant locate MIME::Lite

Notapor explorer » 2013-01-30 09:05 @420

Para saber si un módulo está bien instalado, vale con ejecutarlo de esta manera:

perl -MMIME::Lite -E 1

Si no sale ningún mensaje de error, es que está bien instalado.
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: Can't locate MIME::Lite

Notapor desdechina » 2013-01-31 04:46 @240

Efectivamente, no me sale ningún error.
Lo eliminé y lo volví a instalar y ahora el error es:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
SMTP mail() command failed:
5.7.0 Must issue a STARTTLS command first
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Por si acaso es por motivos de autentificación, cambio el código a:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. MIME::Lite->send('smtp','smtp.gmail.com', Timeout => 60, Debug =>1,
  2.           #AuthUser=>'silbia', AuthPass=>'xxxx');
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Y ahora me sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
SMTP auth() command not supported on SMTP.gmail.com
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Será un problema con la cuenta?

¡¡¡Con lo fácil que parecía!!!
desdechina
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2013-01-11 08:21 @389

Re: Can't locate MIME::Lite

Notapor explorer » 2013-01-31 07:26 @351

El problema es el siguiente: estás pidiendo al programa que use el servidor de correo de Gmail para enviar el correo. Y el primer mensaje de error dice que eso requiere que te autentifiques (indicar el nombre de usuario y contraseña de tu cuenta de acceso a Gmail) en ese servidor de correo. Además, la autenticación debe hacerse con el formato STARTTLS. Y MIME::Lite no sabe nada de eso...

Entonces... si quieres enviar un correo electrónico usando el servidor de correo de Gmail, deberás usar otro método distinto, como el que comentamos en este otro hilo.

Otra opción: no utilizar el servidor de correo de Gmail... e intentar enviar el correo directamente.

Y aquí aparece otro problema... La mayor parte de los servidores de correo (el de tu destinatario) no admitirán correo según desde donde estés enviando el correo. Si estás en una línea residencial es muy posible que te lo bloqueen.

Si abro la página de manual de MIME::Lite, aparte del mensaje que dice que este módulo no es nada recomendable, hay un ejemplo para enviar un mensaje de solo texto. Lo copio y lo pego a otro archivo de texto y lo convierto en un programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use MIME::Lite;
  3.  
  4. my $msg = MIME::Lite->new(
  5.     From     =>'[email protected]',
  6.     To       =>'[email protected]',
  7.     Subject  =>'Correo de prueba',
  8.     Data     =>"Texto del mensaje"
  9. );
  10.  
  11. $msg->send();
  12.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Así, sin indicar nada en send(), MIME::Lite usará el sistema de transporte de correo del sistema. En mi máquina, tengo instalado el postfix, así que MIME::Lite le llama y le pide que envíe el correo. Eso lo vemos en el archivo /var/log/mail.log:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. Jan 31 12:41:17 joaquinferrero postfix/pickup[18403]: 9D8DB23344: uid=1000 from=<explorer>
  2. Jan 31 12:41:20 joaquinferrero postfix/cleanup[24832]: 9D8DB23344: message-id=<[email protected]>
  3. Jan 31 12:41:20 joaquinferrero postfix/qmgr[1551]: 9D8DB23344: from=<[email protected]>, size=509, nrcpt=1 (queue active)
  4. Jan 31 12:41:29 joaquinferrero postfix/smtp[24840]: certificate verification failed for correo.jf.com.es[82.193.86.160]:25: untrusted issuer /C=ES/ST=Valladolid/L=Valladolid/O=AiA/CN=*/[email protected]
  5. Jan 31 12:41:30 joaquinferrero postfix/smtp[24840]: 9D8DB23344: to=<[email protected]>, relay=correo.jf.com.es[82.194.86.160]:25, delay=13, delays=1.4/1.6/9.7/0.66, dsn=2.0.0, status=sent (250 OK id=1U0sWI-0006JY-Aw)
  6. Jan 31 12:41:30 joaquinferrero postfix/qmgr[1551]: 9D8DB23344: removed
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Las líneas indican que sí lo ha enviado, pero esto es posible porque Postfix sabe a qué servidor de correo debe conectarse, y con qué nombre de usuario y contraseña debe utilizar para poder enviarlo.

Así que estamos en las mismas: si quiero usar el método send() de MIME::Lite y no tengo configurado un sistema de transporte local en el sistema, debo indicarlo en los argumentos de send().

Así que tu problema se reduce a encontrar un servidor de correo en donde tengas una cuenta (nombre de usuario y contraseña) que te permita enviar correos. Si solo tienes el de Gmail, pues vuelve a leer los primeros párrafos.

Si, por ejemplo, modifico la línea send() con mis datos de autenticación de mi cuenta en Gmail:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $msg->send('smtp', 'smtp.gmail.com',
  2.     Timeout  => 60,
  3.     Debug    => 1,
  4.     AuthUser => '[email protected]',
  5.     AuthPass => '?&r/sh08'
  6. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

entonces sale el mensaje de error que comentas: SMTP auth() command not supported on smtp.gmail.com

Eso es porque MIME::Lite no sabe nada de autentificarse con STARTTLS. Hay que usar otro módulo.
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: Can't locate MIME::Lite

Notapor desdechina » 2013-02-01 09:16 @428

¡¡¡Heyyyy!!! ¡¡Ya avanzo algo!!

Al final he usado Email::Send::SMTP::Gmail modificando el código de Email::Send::SMTP::Gmail y de Net::SMTP tal como comentabas en el enlace que me indicabas.

Ahora me dice:

Attachments successfully verified
With No attachments
Sending email
Mail sent!


Pero... no lo recibo. No me llega nada. ¿?
desdechina
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2013-01-11 08:21 @389

Re: Can't locate MIME::Lite

Notapor explorer » 2013-02-01 15:43 @696

Pues no lo sé, a mí sí que me funciona...

¿No habrá terminado en la carpeta de SPAM del receptor?
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: Can't locate MIME::Lite

Notapor desdechina » 2013-02-04 04:52 @244

No. Ya lo comprobe y no aparece nada.
El caso es que la pantalla de salida indica:
Attachments successfully verified
With No attachments
Sending email
Mail sent!


Pero por otro lado en la zona de mensajes me aparece:

Net::SMTP::SSL=GLOB(0x1d8492c)<<< 502 5.5.1 Unrecognized command. df2sm18856144wib.0 - gsmtp

¿?
desdechina
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2013-01-11 08:21 @389

Re: Can't locate MIME::Lite

Notapor desdechina » 2013-02-04 05:39 @277

¡¡¡Lo conseguí!!!
Al final cambié el código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4. use Net::SMTP::SSL;
  5.  
  6. my $user = '[email protected]';
  7. my $pass = 'xxx';
  8. my $server = 'smtp.gmail.com';
  9. my $to = '[email protected]';
  10. my $from_email = '[email protected]';
  11. my $subject = 'Prueba desde Perl';
  12. my $smtps = Net::SMTP::SSL->new($server, Port => 465, DEBUG => 1, )
  13. or warn "$!\n";
  14.  
  15. # authenticate
  16. defined ($smtps->auth($user, $pass))
  17. or die "Can't authenticate: $!\n";
  18.  
  19. # send preliminary data
  20. $smtps->mail("$from_email\n");
  21. $smtps->to("$to\n");
  22. $smtps->data();
  23.  
  24. #send header
  25. $smtps->datasend("From: $user\n");
  26. $smtps->datasend("To: $to\n");
  27. $smtps->datasend("Subject: $subject\n");
  28. $smtps->datasend("Reply-To: $from_email\n");
  29. $smtps->datasend("MIME-Version: 1.0\n");
  30. $smtps->datasend("Content-Type: text/plain\n");
  31. $smtps->datasend("\n");
  32.  
  33. #send text body
  34. $smtps->datasend("Si estas leyendo este correo es que ¡¡¡¡¡¡LO HE CONSEGUIDO!!!!!.\n");
  35.  
  36. $smtps->datasend("\n");
  37. $smtps->dataend();
  38. print " email sended\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Ahora me parece fácil pero entenderás que para los que estamos verdes es un logro.

Mil gracias por tu ayuda y consejos.
Eres un sol.
desdechina
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2013-01-11 08:21 @389

Siguiente

Volver a Básico

¿Quién está conectado?

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