Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Envío de emails con Perl
Ir a página Anterior  1, 2, 3
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Lun Ene 07, 2008 6:40 pm
teamvipconnectz
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Ene 2008
Mensajes: 20
Responder citando

No he entiendo demasiado sobre el asunto explorer pero te agradeceré infinitamente si me ayudas a resolver este problema.

Yo también continúo buscando una solución. SALUDOS y MUCHÍSIMAS GRACIAS.
Mensaje Lun Ene 07, 2008 6:48 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4087
Ubicación: Valladolid, España
Responder citando

He encontrado un hilo al respecto:
http://www.perlmonks.org/index.pl?node_id=570121

Comentan que hay que asegurarse que el módulo Authen::SASL sea la versión 2.10.
Mensaje Lun Ene 07, 2008 7:08 pm
teamvipconnectz
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Ene 2008
Mensajes: 20
Responder citando

Verifiqué en la carpeta en donde tengo los módulos que no estaban instalados en mi hosting y veo que tengo la versión 2.10. De hecho descargué el archivo desde la página de CPAN, pero me estoy acordando que pedí al soporte técnico de mi hosting que instalaran también ese modulo y así lo hicieron y estoy viendo que tiene instalada la versión 0.99, bueno eso creo porque en la lista en donde se muestran los módulos que están instalados en mi hosting aparece así Authen::SASL (0.99)

Pero la duda es: ¿al usar un módulo, Perl lo busca primero en el servidor y si no lo encuentra después lo busca en la carpeta que yo puse?

¿Si lo encuentra primero en mi servidor ya NO lo buscará en la carpeta que yo los guarde?
Mensaje Lun Ene 07, 2008 7:24 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4087
Ubicación: Valladolid, España
Responder citando

Estoy conectado al canal irc://irc.freenode.net/perlenespanol por si quieres hablar conmigo.

Una forma de ver la versión de los módulos (aunque no es estándar) es ver el contenido de la variable VERSION:
Perl:
perl -MAuthen::SASL -e 'print $Authen::SASL::VERSION'
(desde la línea de comandos. Habría que adaptarlo para ejecutarlo desde un CGI. Por ejemplo, sería fácil ponerlo en mi CGI mínimo).

El orden de búsqueda de los módulos lo determina el contenido de la variable especial @INC. Y en mi Perl (5.8.8), si usas 'use lib ...' colocará ese directorio en primer lugar de búsqueda:
Código:
portatil:~/.cpan/build # perl -e 'use lib "lib"; print join "\n",@INC'
lib
/usr/lib/perl5/5.8.8/i586-linux-thread-multi
/usr/lib/perl5/5.8.8
/usr/lib/perl5/site_perl/5.8.8/i586-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.8/i586-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.8
/usr/lib/perl5/vendor_perl


Esto es muy raro...

Modifica el código para que ponga el número de versión que quieres usar:
Perl:
use Authen::SASL 2.10;

Así, en caso de intentar cargar un módulo anterior, dará otro fallo.

Ultima edición por explorer el Lun Ene 07, 2008 7:32 pm, editado 1 vez
Mensaje Lun Ene 07, 2008 7:30 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4087
Ubicación: Valladolid, España
Responder citando

Coloca la línea 'use Authen::SASL 2.10;' por ENCIMA de la del MIME::Lite;
Mensaje Mar Ene 08, 2008 1:41 pm
teamvipconnectz
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Ene 2008
Mensajes: 20
Responder citando

Hola de nuevo explorer hice las modificaciones que me indicaste al pie de la letra, y exactamente sale el mismo error.

Solicité a soporte técnico de mi hosting que desinstalaran el módulo Authen::SASL para yo utilizarlo directamente desde la carpeta en donde lo guardé, y así lo hicieron, y no hubo ningún cambio, el mismo error.

Código:
Unknown callback: 'authname'. (user|auth|language|pass)


Ya sueño con este error, ya se volvió un reto encontrarle la solución a esto a como de lugar.
Mensaje Mar Ene 08, 2008 1:45 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4087
Ubicación: Valladolid, España
Responder citando

¿Qué versión de Perl tienen instalada?
Mensaje Mar Ene 08, 2008 1:49 pm
teamvipconnectz
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Ene 2008
Mensajes: 20
Responder citando

Es la versión Perl 5.8.8.
Mensaje Mar Ene 08, 2008 2:13 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4087
Ubicación: Valladolid, España
Responder citando

Pues sí que estoy perdido... a mi me funciona bien y eso que he probado a enviar un centenar de cartas...

Lo siento... no se me ocurre nada más... salvo que les preguntes si es realmente necesario usar autenticación en su servidor. Si no lo es, entonces quita la parte de usuario y contraseña.

Y si sí, pues les preguntas qué soluciones tienen en cuanto a 'listas de correo'. No creo que la instalación de otro módulo resuelva el problema.
Mensaje Mie Ene 09, 2008 2:31 pm
teamvipconnectz
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Ene 2008
Mensajes: 20
Responder citando

Hice una prueba de esta manera:

Perl:
#!/usr/bin/perl

use lib('lib');
use CGI::Carp qw(fatalsToBrowser);
use Authen::SASL;
use MIME::Lite;
use strict;

my $usuario  = 'admin@domain.com';
my $password = 'mipass';
my $host     = '00.00.00.000';

my $msg = MIME::Lite->new(
    From    => 'admin@domain.com',
    To      => 'admin@domain.com',
        Cc       =>'test@hotmail.com',
    Subject => 'CGI email',
    Data    => "FUNCIONA",
);

$msg->send('smtp', $host);


Y cuando no agrego destinatario CC si me envía el correo, pero cuando agrego un destinatario CC me marca este error.

Código:
SMTP recipient() command failed:
sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)


En el email que pongo como CC sí que tengo en la lista de permitidos el correo admin@domain.com

¿Alguien sabe a qué se debe este error y si tiene solución?

explorer, que servidor de email estás utilizando para hacer el envió de todos los mails que mencionas? ¿Cuántos emails te permite enviar? ¿Cuánto cuesta?

¿Alguien me puede recomendar un servicio de email hosting, en el que pueda hacer uso del SMTP de manera ilimitada o algo parecido? Tengo pensado contratar otro para probar el script, porque si explorer dice que le ha funcionado perfectamente entonces lo que está fallando es mi servidor de email.
Mensaje Mie Ene 09, 2008 5:19 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4087
Ubicación: Valladolid, España
Responder citando

Bueno, si te permite enviar el correo en el To:, entonces ya tienes una posibilidad de envío de los correos.

En cuanto al error, he hecho lo de siempre (buscarlo en Google: http://www.google.es/search?q=sorry%2C+that+domain+isn't+in+my+list+of+allowed+rcpthosts&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:es-ES:official&client=firefox-a ) y me sale que la mayoría dicen que es un fallo de autenticación (es necesario autenticarse, PERO en
http://support.netfirms.com/article.php?id=672
dice que puede deberse, también, a otra causa: que el dominio del destinatario no esté propagada por los servidores de nombres (vamos, que no está reconocido como dominio real).

Mi servidor de correo es propio. Quiero decir que yo tengo una empresa de alojamiento y damos servicio de correo y web. El servidor usa el sendmail, con algunas limitaciones que ya te comenté antes.

Nosotros solemos cobrar por tráfico (el espacio en disco duro y la ocupación de CPU es bajísima en la mayoría de los casos).

Dudo que exista servidores que permitan el envío de correo de forma masiva sin limitación porque podría ser denunciado como SPAM y quedar bloqueado. Es un asunto complicado. En cambio, si se dice que el número de correos a enviar está dentro de unos límites y, sobre todo, que los correos van a salir a una cierta cadencia, entonces no veo problemas en la mayoría de los servidores.

Yo, creo, que tu problema es de software.

Mira, he hecho una prueba, pero en modo CGI, con el siguiente programa:

Perl:
#!/usr/bin/perl
use CGI qw/:standard/;
use CGI::Carp qw(fatalsToBrowser);
use MIME::Lite;
use strict;

my $host     = '1xx.xxx.xxx.xx';

my $msg = MIME::Lite->new(
    From    => 'admin@domain.com',
    To      => 'explorer@xxxxxx.net',
    Cc      => 'jferrero@xxxxxx.com',
    Subject => 'CGI email',
    Data    => "FUNCIONA",
);

$msg->send('smtp', $host, AuthUser => 'xxxxxx', AuthPass => 'yyyyyy');

print header,start_html,end_html;
Y sí que me ha funcionado. Lo he ejecutado 100 veces (for i in $(seq 1 100); do ./manda_email.pl; done) y han llegado todos y sin mensajes de error. La versión de MIME::Lite es la 3.01. Y no es necesario Authen::SASL porque se está ejecutando en el propio servidor que va a enviar los correos (está permitido enviar correo desde el propio servidor web).
Mensaje Jue Ene 10, 2008 12:41 am
teamvipconnectz
Perlero Nuevo
Perlero Nuevo
Registrado: 02 Ene 2008
Mensajes: 20
Responder citando

Hola explorer. Hice la prueba con el script que mencionas en el post anterior y estoy completamente seguro que está bien como tu lo dices pero a mi me sigue saliendo el mismo error con el que sueño ya todos los días (yo sigo pensando que lo que falla es el servidor de email que contraté).

¿En tu empresa de alojamiento, venden servicio para envío de emails (hosting email)? ¿Qué empresa es? o donde puedo ver información de la empresa?

Yo también se que eso de "ilimitado" es una gran mentira pero bueno mi intención es que me permita hacer una buena cantidad de envió de emails sin ningún problema (aclarando, estoy totalmente en contra del spam porque veo que hoy en día cualquier persona que intenta hacer envío masivo de emails lo primero que se piensa es que es por spam porque es lo mas común).

Una ultima duda, si mi servidor de hosting me permite enviar solo 200 emails por hora, ¿puedo de esta manera adaptar el script para que se haga el envío de los emails más lento, y así no superar los 200 emails por hora? (usando Timeout)

Perl:
$msg->send('smtp', $host, Timeout=>20, AuthUser => 'xxxxxx', AuthPass => 'yyyyyy');


Si es así, ¿qué desventajas y ventajas tiene el uso de Timeout=>20 ?
¿O qué problemas podría tener al usarlo de esta manera?
Mensaje Jue Ene 10, 2008 2:59 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4087
Ubicación: Valladolid, España
Responder citando

El Timeout se refiere al tiempo máximo de envío de solo esa conexión. Si solo envías un correo con esa línea, pues se refiere al tiempo máximo para enviar solo ese correo.

Una forma de distribuir los correos en un plazo largo de tiempo sería con la función sleep(). Coges la calculadora y a echar cuentas. Más o menos, sale a unos diez segundos por correo. Bueno, pues ponemos un sleep(10) o un poco menos y así tenemos garantizado que van a salir todos.

En cuanto a lo de mi empresa, mejor lo hablamos de forma privada. Entra en mi perfil y mándame un correo.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Ir a página Anterior  1, 2, 3
Página 3 de 3



Powered by phpBB © 2001, 2005 phpBB Group