• Publicidad

Can't call method "auth" on an undefined value

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Re: Can't call method "auth" on an undefined value

Notapor rqbit » 2014-02-06 18:32 @814

explorer, gracias por estar atento...

El código como está en este momento:

#!/usr/bin/perl
use warnings;
use strict;
use DBI;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use Net::SMTP::SSL;

my $cgi=new CGI;

my $asunto_msg = $cgi->param('Asunto');
my $cuerpo_msg = $cgi->param('msg');
my $de_quien = $cgi->param('Nombre');
my $a_mail = $cgi->param('Email');



my $asunto = $de_quien.' ha contactado a Cresco';


my $user = '[email protected]';
my $pass = '******';
my $server = 'casiquiare.tepuyserver.net';
my $to = 'r********[email protected]';
my $from_email = 'Webmaster Cresco <[email protected]>';
my $subject = $de_quien.' ha contactado a Cresco';

my $retry = 10; # in seconds;
my $smtps = Net::SMTP::SSL->new($server, Port => 465, Debug => 1, )
or warn "$!\n";


# authenticate
defined ($smtps->auth($user, $pass))
or die "No puede autenticar: $!\n";

# Envia data Preliminar
$smtps->mail("$from_email\n");
$smtps->to("$to\n");
$smtps->data();

#Envia Encabezado
$smtps->datasend("From: $from_email\n");
$smtps->datasend("To: $to\n");
$smtps->datasend("Subject: $asunto\n");
#$smtps->datasend("Subject: $subject\n");
$smtps->datasend("Reply-To: $a_mail\n");
$smtps->datasend("MIME-Version: 1.0\n");
$smtps->datasend("Content-Type: text/html\n");
$smtps->datasend("\n");

$smtps->datasend("<strong>Enviado por: </strong> $de_quien <p> <strong>Titulo del Mensaje: </strong> $asunto_msg <p> $cuerpo_msg");

$smtps->datasend("\n");
$smtps->dataend();
$smtps->quit();

################################################################################
he usado también este código sin parámetros para hacer pruebas
################################################################################
#!/usr/bin/perl
use warnings;
use CGI qw(:standard );
use CGI::Carp qw(fatalsToBrowser);
use strict;
use Net::SMTP::SSL;

print
header,
start_html('PRUEBA3');

my $user = '[email protected]';
my $pass = '******';

my $server = 'casiquiare.tepuyserver.net';
my $to = 'r*********[email protected]';
my $from_name = 'yo';
my $from_email = '[email protected]';
my $subject = 'Prueba de Autenticacion';

my $smtps = Net::SMTP::SSL->new($server,
Port => 465,
Debug => 1,
) or warn "$!\n";
print " Paso!!! $smtps";

#defined ($smtps->auth($user, $pass))
# or die "Sin Autenticar: $!\n";


#$smtps->mail($from_email);
#$smtps->to($to);
#$smtps->data();
#$smtps->datasend("To: $to\n");
#$smtps->datasend(qq^From: "$from_name" <$from_email>\n^);
#$smtps->datasend("Subject: $subject\n\n");
#$smtps->datasend("This will be the body of the message.\n");
#$smtps->datasend("\n--\nVery Official Looking .sig here\n");
#$smtps->dataend();
$smtps->quit();
print end_html;
#print "done\n";

Del cual he comentado las líneas para ir viendo hasta dónde llega pero con la primera llamada a un método de Net::SMTP falla la misma en este caso quit()
rqbit
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2014-02-05 18:10 @799

Publicidad

Re: Can't call method "auth" on an undefined value

Notapor explorer » 2014-02-06 19:06 @838

De acuerdo, tienes que cambiar los warn() por die().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Can't call method "auth" on an undefined value

Notapor rqbit » 2014-02-06 20:01 @875

Al coloacar die en el constructor no me muestra nada, solo

SOFTWARE ERRROR

En algunos casos TIME OUT

si lo quito en el constructor y solo dejo el die de defined me muestra

Can't call method "auth" on an undefined value at

Es decir, el die en el constructor me detiene el proceso sin mensajes por pantalla.
rqbit
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2014-02-05 18:10 @799

Re: Can't call method "auth" on an undefined value

Notapor explorer » 2014-02-06 20:21 @889

Bien, que se muera el programa en el die(), quiere decir que no se pudo realizar la conexión.

Según la documentación de Net::SMTP, la razón del error queda almacenada en $@, así que debes modificar el die() del new(), así:

... or die "ERROR de conexion: $@\n";

y esperar que salga algo en pantalla...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Can't call method "auth" on an undefined value

Notapor rqbit » 2014-02-07 22:00 @958

Hola, explorer...

Disculpa por la tardanza en pasar la prueba luego de tu sugerencia.

El mensaje arrojado en pantalla es:

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

ERROR de conexion: Net::SMTP::SSL: SSL connect attempt failed with unknown error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Espero que esto ayude a diagnosticar el problema.


Gracias
rqbit
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2014-02-05 18:10 @799

Re: Can't call method "auth" on an undefined value

Notapor explorer » 2014-02-08 01:51 @119

Me temo que lo que te pasa es lo que se comenta aquí (Perlmonks, en inglés).

Resumen: IO::Socket::SSL, en sus últimas versiones, tiene activada la opción de verificar el certificado del servidor destino, por defecto. Y si el certificado no es correcto (autofirmado, con comodines, etc.), entonces falla.

La solución, obviamente, es decirle que no haga ese verificado, a costa de disminuir un poco la seguridad en la conexión (sería una conexión vulnerable al ataque de hombre-en-el-medio), pero... desde Net::SMTP::SSL, no se puede. Es un error conocido e informado. Y ya hemos hablado de él en otro hilo, dando incluso una solución.

Solución 1: instalar la versión 1.76 de IO::Socket::SSL.

Solución 2: Editar el módulo Net/SMTP.pm, y agregar la línea 42, como comentamos en el hilo anterior.
Sintáxis: (SMTP.pm) [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.       %arg,                       # <= nueva línea
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Y luego, en el código, solo tienes que agregar

SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE,

a la lista de opciones del new() del Net::SMTP::SSL.

Solución 3: Usar algún módulo específico, como por ejemplo Email::Send::SMTP::Gmail, para enviar mensajes por medio de Gmail, usando TLS en lugar de SSL. En el hilo enlazado se comentan varias opciones más. Email::Send::SMTP::TLS también serviría si el servidor destino admite TLS.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Can't call method "auth" on an undefined value

Notapor rqbit » 2014-02-09 20:49 @909

Hola, explorer...

Muchas gracias por responder...

De las soluciones dadas no creo pueda aplicar ninguna que sea modificar módulo o instalar nuevas versiones. El proveedor de servicios Web no creo que lo permita.

Lo que yo aún no me puedo explicar es por qué si la rutina que te envié la ejecuto desde mi servidor de desarrollo (Ubuntu 13.10) hacia ese servidor de correo la misma sí funciona...

Sin embargo, creo que lo mejor sera probar las rutinas sugeridas con TLS y aplicar una nueva rutina de envío.

Te informaré cómo me va...

Gracias por tomarte el tiempo en este asunto.
rqbit
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2014-02-05 18:10 @799

Anterior

Volver a Módulos

¿Quién está conectado?

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