• Publicidad

Enviar correo por Perl y me da problemas

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

Re: Enviar correo por Perl y me da problemas

Notapor marcoamoncada » 2011-08-08 07:54 @370

Pregunta.
marcoamoncada
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2011-06-06 22:41 @986

Publicidad

Re: Enviar correo por Perl y me da problemas

Notapor explorer » 2011-08-08 14:00 @625

Pues si no pones los caracteres interrogativos (¿?) no sabemos si estás haciendo una pregunta o una afirmación (haz la prueba de leer tus propios mensajes y te darás cuenta).

Hay varios módulos en Perl que ayudan en el rascado de páginas web, como WWW::Mechanize o Scrappy. Con WWW::Mechanize, por ejemplo, es muy fácil enviar formularios o, como dices tu, imitar la pulsación de un botón.

Scrappy sigue una filosofía más minimalista, mucho más cercana a las formas modernas de programación en Perl, a costa de tener una sintaxis propia.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo por Perl y me da problemas

Notapor marcoamoncada » 2011-08-08 16:33 @731

Disculpa.

Y gracias.

¿¿¿¿¿¿¿¿¿¿¿¿Tendrás algún ejemplo de la instalación y ejecución de WWW::Mechanize????????????
marcoamoncada
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2011-06-06 22:41 @986

Re: Enviar correo por Perl y me da problemas

Notapor explorer » 2011-08-08 17:47 @782

Para instalarlo, te vale con seguir con lo ya comentado antes para instalar cualquier módulo de Perl.

Para ejemplos de cómo usarlo, te vale con buscar por la palabra 'Mechanize' en el sistema de búsqueda de nuestros foros, para encontrarlos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo por Perl y me da problemas

Notapor marcoamoncada » 2011-08-08 23:37 @025

Sobre el mail, por el momento lo resolví de esta manera:

system("mail -s 'hola' mrco1965 < /tmp/mensaje.msg");

Sí funciona. Aún no puedo enviar a Internet, pero eso no me afecta, como lo de enviar formularios.

Si gustas, abro un hilo exclusivamente sobre formularios.
marcoamoncada
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2011-06-06 22:41 @986

Re: Enviar correo por Perl y me da problemas

Notapor marcoamoncada » 2011-08-23 22:23 @974

Ya efectivamente instalé los archivos necesarios, del sistema Linux, y pude enviar, correos por medio de comando, desde Perl.

Lo cual no he resuelto, poder instalar con cpan.

Pero lo que sí logré fue enviar el correo necesario desde comando, y estos comandos son desde Perl, el código fue el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. # GET method form
  3. #use File::Fu;
  4.  
  5. #  my $dir = File::Fu->dir("/home/xxxxxxxx");
  6. #$dir->e and warn "$dir exists";
  7.  
  8. #$dir->l and warn "$dir is a link to ", $dir->readlink;
  9.  
  10. #foreach my $entry ($dir->list) {
  11. #  warn $entry . ': ' . $entry->stat->size, "\n"
  12. #    if($entry->f);
  13. #}
  14.  
  15. $data_direccion1_comparacion = "$ENV{HOME}/Basura/direccion1_comparacion";
  16. open( DIRECCION1C, $data_direccion1_comparacion );
  17. @raw_direccion_comparacion = <DIRECCION1C>;
  18. close(DIRECCION1C);
  19.  
  20. $i = 0;
  21. foreach $wrestler (@raw_direccion_comparacion) {
  22.     chomp($wrestler);
  23.     ( $e_mail, $archivo, $numero_envios ) = split( /\:\:/, $wrestler );
  24.     if ($e_mail) {
  25.         $e_mail_compara[$i]        = $e_mail;
  26.         $archivo_compara[$i]       = $archivo;
  27.         $numero_envios_compara[$i] = $numero_envios;
  28.         $i += 1;
  29.         print "E_Mail $e_mail Archivo $archivo \#Envios $numero_envios \n";
  30.     }
  31. }
  32.  
  33. $data_direccion1 = "$ENV{HOME}/Basura/direccion1";
  34. open( DIRECCION1, $data_direccion1 );
  35. @raw_direccion = <DIRECCION1>;
  36. close(DIRECCION1);
  37.  
  38. ($enviados) = 0;
  39. $subject = "Te invito a que visites esta pagina";
  40. foreach $wrestler (@raw_direccion) {
  41.     chomp($wrestler);
  42.     ( $e_mail, $archivo, $numero_envios ) = split( /\:\:/, $wrestler );
  43.     if ( $numero_envios < 999999 ) {
  44.         if ( ( &valida_igualdad($e_mail) ) == 0 ) {
  45.             $comando
  46.                 = "perl /home/xxxxxxxx/Php/Prueba/perl/send.pl \"$subject\" $e_mail /home/xxxxxxxx/Basura/Invitacion";
  47.             print $comando, "\n";
  48.             system($comando);
  49.             $enviados += 1;
  50.             $e_mail_compara[$i]        = $e_mail;
  51.             $archivo_compara[$i]       = $archivo;
  52.             $numero_envios_compara[$i] = $numero_envios + 1;
  53.             $i += 1;
  54.         }
  55.         if ( $enviados > 15 ) {
  56.             last;
  57.         }
  58.     }
  59.     else {
  60.         if ( ( &valida_igualdad($e_mail) ) == 0 ) {
  61.             $e_mail_compara[$i]        = $e_mail;
  62.             $archivo_compara[$i]       = $archivo;
  63.             $numero_envios_compara[$i] = $numero_envios;
  64.             $i += 1;
  65.         }
  66.     }
  67. }
  68. print "********************************************** \n";
  69. print "********************************************** \n";
  70. print "********************************************** \n";
  71. print "**                                          ** \n";
  72. print "**                                          ** \n";
  73. print "**                                          ** \n";
  74. print "**                Enviados = $enviados         ** \n";
  75. print "**                                          ** \n";
  76. print "**                                          ** \n";
  77. print "**                                          ** \n";
  78. print "********************************************** \n";
  79. print "********************************************** \n";
  80. print "********************************************** \n";
  81.  
  82. open( DIRECCION1C, " > $data_direccion1_comparacion" );
  83. for ( $i = 0; $e_mail_compara[$i]; $i++ ) {
  84.     print DIRECCION1C "$e_mail_compara[$i]\:\:$archivo_compara[$i]\:\:$numero_envios_compara[$i]\:\: \n";
  85. }
  86. close(DIRECCION1C);
  87.  
  88. sub valida_igualdad {
  89.     $e_mail = $_[0];
  90.  
  91.     my $i;
  92.     for ( $i = 0; $e_mail_compara[$i]; $i++ ) {
  93.         if ( $e_mail eq $e_mail_compara[$i] ) {
  94.             return (1);
  95.  
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4

send.pl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. $subject   = shift;
  4. $direccion = shift;
  5. $mensaje   = shift;
  6.  
  7. $email = "mail \-s \"$subject\" $direccion \< $mensaje";
  8. print $email, "\n";
  9. system($email);
  10. exit;
  11.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Envío solamente 15 porque se bloquea el mail de Google. Posiblemente se puede resolver con que comando desde mail con el parámetro bcc. Y este comando se vuelve a mandar nuevamente, así hasta que se terminen los email's.

Lógicamente antes, se deberá obtener en un archivo secuencial los email, en el formato:
e_mail::archivo::numero_de_envios::

Los email se ignoran siempre y cuando esté el número de envíos mayor a 999999.

Con respecto a la página para cuestionar los parámetros del formulario ya también están resueltos, y lee la información desde html. Y re-envía las páginas con los parámetros desde post, por medio de Perl.

Gracias, experto, la ayuda tuya, y la búsqueda de páginas por medio de Google se logró el cometido.
marcoamoncada
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2011-06-06 22:41 @986

Re: Enviar correo por Perl y me da problemas

Notapor explorer » 2011-08-24 06:46 @323

También puedes probar a poner un sleep(), entre cada mensaje, y así, aunque tardes más en enviarlos, los envías todos (bueno, en realidad hasta que se entere Google y te cierre el acceso).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Enviar correo por Perl y me da problemas

Notapor marcoamoncada » 2011-08-24 09:09 @422

Tengo varias páginas, una de ella tiene mail, la otra no.

Pero no he tenido tiempo para probar enviar desde ahí.

Ayer solamente hice unas pruebas, me las rebotó. Así que mientras me quedo con Gmail.

La primera vez que envíe correo de prueba se enviaron bastantes, pero al día siguiente solamente podía enviar arriba de 16 pero abajo de, no sé, 20 o 25.

Yo creo que su sabe, cómo bloquear.

Otra forma sería tener un IP pública, eso sale caro.

El del sleep() lo intenté, pero sería modificar el programa a cada rato, en cambio si lo hago por crontab solo es modificar una línea. Gracias.

Hay límite en envío de send por día.

Este mensaje:
daily sending quota exceeded
marcoamoncada
Perlero nuevo
Perlero nuevo
 
Mensajes: 36
Registrado: 2011-06-06 22:41 @986

Re: Enviar correo por Perl y me da problemas

Notapor explorer » 2011-08-24 09:33 @439

Teniendo una IP pública tampoco te garantiza el envío del correo a los destinatarios: hoy en día los filtros antiSPAM tienen en cuenta la IP de origen, y si ven que corresponde a una IP pública reservada para un entorno residencial (un individuo, no una empresa), le darán una nota mayor de "posible SPAM", y muchos correos no llegarán a destino o directamente quedarán eliminados.

Una posibilidad es la de alquilar los servicios de un proveedor de servicios de Internet, a quien le solicitas alojamiento, y usando su servidor de correo, poder enviar todos los correos que quieras.

Eso sí, si los correos que envías son muchos, cada pocos días, escritos mal (con mucho HTML), entonces los filtros de SPAM Y los propios usuarios te los filtrarán y tirarán a la papelera de forma automática. Y a tu proveedor de servicios de Internet no le gustará nada saber que tiene una IP en las listas negras de los programas antiSPAM...

La solución mejor (pero más cara), es la contratación de un servidor físico o virtual, con su propia IP. Así, tienes la libertad total de montar un servidor (algo que ya viene instalado y configurado por defecto) y mandas todos los correos que quieras. Si la IP queda filtrada y no llegan los correos, pues ya es culpa tuya por pasarte de pesado :)

No te comento otra solución, que sería encargar el trabajo a alguna red de envío de SPAM. En algunos países eso está penado con la cárcel.

Para un uso normal (unos cientos/miles de correos a la semana) no hay problema en hacerlo desde cualquier proveedor.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

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

cron