elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Perl] Error al enviar Mail
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Perl] Error al enviar Mail  (Leído 7,035 veces)
DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
[Perl] Error al enviar Mail
« en: 27 Junio 2015, 22:07 pm »

Buenas,

Estoy intentando mandar un mail a través de Perl pero me salta un error como si me faltase dicho módulo instalado.

Tengo esto:

Código
  1. use Mail::Sendmail;
  2.  
  3.   %mail=(To => 'su_direccion@alli.com',
  4.                From => 'mi_direccion@aqui.com',
  5.                Message => "Mensaje de prueba"
  6.         );
  7.  
  8.   if(sendmail %mail){
  9.      print "Mail enviado correctamente.\n";
  10.   }
  11.   else{
  12.      print "Error al enviar mail: $Mail::Sendmail::error\n";
  13.   }

Y me da este error:

Código:
Can't locate Mail/Sendmail.pm in @INC (you may need to install the Mail::Sendmail module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at probe.pl line 1.
BEGIN failed--compilation aborted at probe.pl line 1.

He intentado probar de otras formas pero me da error parecido.

¿Esto es que necesito instalar un módulo no?
Código:
(you may need to install the Mail::Sendmail module)

A ser así, ¿cómo podría instalarlo? (Linux Mint)
Gracias.

Saludos!


En línea

Esta página web no está disponible - Google Chrome
explorer

Conectado Conectado

Mensajes: 101


Analista/Programador Perl


Ver Perfil
Re: [Perl] Error al enviar Mail
« Respuesta #1 en: 27 Junio 2015, 23:15 pm »

Puedes arrancar el Synaptic y buscar por el paquete libmail-sendmail-perl

O desde la línea de comandos, siendo root, ejecutar

apt-get install libmail-sendmail-perl


En línea

DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: [Perl] Error al enviar Mail
« Respuesta #2 en: 27 Junio 2015, 23:27 pm »

Gracias por la respuesta,

Acabo de instalar dicho paquete, pero ahora me dice lo siguiente:

Código:
Error al enviar mail: connect to localhost failed (Conexión rehusada)
connect to localhost failed
connect to localhost failed (Conexión rehusada) no (more) retries!

Supuestamente habrá que modificar el stmp no? ¿Dónde se encuentra dicho archivo? ¿Y el stmp de gmail?

Gracias.


Saludos!
En línea

Esta página web no está disponible - Google Chrome
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: [Perl] Error al enviar Mail
« Respuesta #3 en: 27 Junio 2015, 23:39 pm »

Supuestamente habrá que modificar el stmp no?

Lee el F.A.Q y/o la referencia y descripción del módulo antes de descargar y probar nada.

LIMITATIONS

No suport for the SMTP AUTH extension.

The SMTP server has to be set manually in Sendmail.pm or in your script, unless you have a mail server on localhost.

http://search.cpan.org/~mivkovic/Mail-Sendmail-0.79/Sendmail.pm



¿Y el stmp de gmail?

puerto SMTP = 587
SSL activado

también puedes usar este módulo que ya parece hacer esa tarea de forma automatizada:
http://search.cpan.org/~peco/Email-Send-SMTP-Gmail-0.1.1/lib/Email/Send/SMTP/Gmail.pm

Saludos!
« Última modificación: 27 Junio 2015, 23:41 pm por Eleкtro » En línea

DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: [Perl] Error al enviar Mail
« Respuesta #4 en: 28 Junio 2015, 00:08 am »

Estoy probando como bien dice hay:

Código
  1. use Mail::Sendmail;
  2.  
  3.  print "Testing Mail::Sendmail version $Mail::Sendmail::VERSION\n";
  4.  print "Default server: $Mail::Sendmail::mailcfg{smtp}->[0]\n";
  5.  print "Default sender: $Mail::Sendmail::mailcfg{from}\n";
  6.  
  7.  %mail = (
  8.      To      => 'correo@gmail.com',
  9.      From    => 'correo@gmail.com',
  10.      Bcc     => 'Someone <correo@gmail.com>, Someone else her@there.com',
  11.      # only addresses are extracted from Bcc, real names disregarded
  12.      Cc      => 'Yet someone else <correo@gmail.com>',
  13.      # Cc will appear in the header. (Bcc will not)
  14.      Subject => 'Test message',
  15.      'X-Mailer' => "Mail::Sendmail version $Mail::Sendmail::VERSION",
  16.  );
  17.  
  18.  
  19.  $mail{Smtp} = 'smtp.gmail.com';
  20.  $mail{'X-custom'} = 'My custom additionnal header';
  21.  $mail{'mESSaGE : '} = "The message key looks terrible, but works.";
  22.  # cheat on the date:
  23.  $mail{Date} = Mail::Sendmail::time_to_date( time() - 86400 );
  24.  
  25.  if (sendmail %mail) { print "Mail sent OK.\n" }
  26.  else { print "Error sending mail: $Mail::Sendmail::error \n" }
  27.  
  28.  print "\n\$Mail::Sendmail::log says:\n", $Mail::Sendmail::log;

Y el resultado:

Código:
Testing Mail::Sendmail version 0.79_16
Default server: localhost
Default sender:
Error sending mail: MAIL FROM: error (530 5.7.0 Must issue a STARTTLS command first. g15sm4632205wiv.22 - gsmtp
)
Server said: 530 5.7.0 Must issue a STARTTLS command first. g15sm4632205wiv.22 - gsmtp
 

$Mail::Sendmail::log says:
Mail::Sendmail v. 0.79_16  - Sat Jun 27 23:52:46 2015
Date: Fri, 26 Jun 2015 23:52:46 +0200
Server: smtp.gmail.com Port: 25
From: correo@gmail.com
Subject: Test message

Y el archivo Sendmail.pm no me deja escribir en él.

También probé así:

Código
  1. use Mail::Sendmail;
  2.  
  3.      $mail{smtp} = [qw(smtp.gmail.com)];
  4.      $mail{from} = 'correo@gmail.com';
  5.      $mail{port} = 587;
  6.  
  7.      %mail=(To => 'correo@gmail.com',
  8.                   From => 'correo@hotmail.com',
  9.                   Message => "Mensaje de prueba"
  10.            );
  11.  
  12.      if(sendmail %mail){
  13.         print "Mail enviado correctamente.\n";
  14.      }
  15.      else{
  16.         print "Error al enviar mail: $Mail::Sendmail::error\n";
  17.      }

Y me da este resultado:

Código:
Error al enviar mail: connect to localhost failed (Conexión rehusada)
connect to localhost failed
connect to localhost failed (Conexión rehusada) no (more) retries!
En línea

Esta página web no está disponible - Google Chrome
explorer

Conectado Conectado

Mensajes: 101


Analista/Programador Perl


Ver Perfil
Re: [Perl] Error al enviar Mail
« Respuesta #5 en: 28 Junio 2015, 01:17 am »

Para modificar el archivo Sendmail.pm (algo muy raro) debes cambiar los permisos de escritura o ser administrador del sistema (root), ya que seguro que el archivo se ha instalado con permisos de escritura restringida al stuff.

Si no te deja conectarte al servidor localhost (tu ordenador) es, quizás, porque no tienes instalado ningún servidor SMTP. Y aunque lo instales, debes recordar que debes configurarlo para enseñarle qué transporte debe realizar del correo local.

Yo también uso Linux Mint. Tengo instalado el postfix como gestor de transporte de correo (MTA) (se instala por defecto). Para configurarlo, te vale con editar el archivo /etc/postfix/main.cf o ejecutas el asistente dpkg-reconfigure postfix.

Como los correos enviados desde una línea residencial suelen ser filtrados por los principales servidores de correo, lo ideal es configurar el MTA para que envíe el correo a nuestro servidor de correo normal. En el postfix indicamos que queremos usar un smarthost externo, indicamos nuestro servidor de correo, nombre de usuario y contraseña, y listo.

Para comprobar que todo va bien, ejecutas el comando

mail -s "Prueba" yusetist@tucorreo.com < /dev/null

Y ver si llega. A partir de ahí ya podemos usar nuestros programas usando localhost como MTA.

De todas formas, para enviar correo a Gmail no debería haber ningún problema. El problema puede estar en usar Gmail para el envío correo. Como ves, Gmail te pide usar el comando STARTTLS, para iniciar un autenticación codificada.

Lo mejor, entonces, es usar un módulo específico, como Email::Send::SMTP::Gmail.
En línea

DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: [Perl] Error al enviar Mail
« Respuesta #6 en: 28 Junio 2015, 12:10 pm »

Buenas,

Gracias por la respuesta.

Este es el archivo:

Código:
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = yusetist
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = yusetist, localhost.localdomain, , localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

¿De hay qué tendría que modificar exactamente?

Acá:

Código
  1. use Mail::Sendmail;
  2.  
  3.      $mail{smtp} = [qw(smtp.gmail.com)];
  4.      $mail{port} = 587;
  5.  
  6.      %mail=(To => 'correo',
  7.                   From => 'correo',
  8.                   Message => "Mensaje de prueba"
  9.            );
  10.  
  11.      if(sendmail %mail){
  12.         print "Mail enviado correctamente.\n";
  13.      }
  14.      else{
  15.         print "Error al enviar mail: $Mail::Sendmail::error\n";
  16.      }

¿Tendría que hacer uso de postfix o ya usando la funcion $mail de Mail::Sendmail es suficiente?

Gracias.


Saludos!
En línea

Esta página web no está disponible - Google Chrome
explorer

Conectado Conectado

Mensajes: 101


Analista/Programador Perl


Ver Perfil
Re: [Perl] Error al enviar Mail
« Respuesta #7 en: 28 Junio 2015, 20:11 pm »

No soy bueno configurando el Postfix. Lo mio es el Exim4 :(

Te aconsejo que arranques el asistente.

De mi archivo, veo que las líneas interesantes son estas:
Código:
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = jferrero.noip.geek
mydestination = Arcanus, localhost.localdomain, localhost, jferrero.noip.geek
relayhost = correo.joaquinferrero.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
default_transport = smtp
relay_transport = smtp
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options =
De ahí sacamos que mi "smarthost" es el indicado por la entrada "relayhost". Ahí es donde se conectará para enviar el correo que se genere en mi máquina, que está indicada en la entrada "myhostname".

Como mi servidor de correo necesita autenticación, están puestas además las opciones "smtp_sasl_*" para indicar en qué archivo se guardan las credenciales.

En /etc/postfix/sasl/sasl_passwd hay una línea así:
Código:
correo.joaquinferrero.com explor@joaquinferrero.com:Nan&&telovewebon
donde se indican las credenciales (usuario:contraseña) para cada servidor externo.

Con esto, ya puedo escribir un programa así de sencillo:
Código
  1. #!/usr/bin/perl
  2. use Mail::Sendmail;
  3.  
  4. my %mail = (
  5.    From    => 'explorer@jferrero.noip.geek',
  6.    To      => 'explor@joaquinferrero.com',
  7.    Message => "Este es un mensaje muy cortito",
  8. );
  9.  
  10. sendmail(%mail) or die $Mail::Sendmail::error;
Y Mail::Sendmail usará el MTA local para enviarme el correo a mi buzón externo.

Si, en cambio, no quiero usar el servidor local, puedo usar algún otro servidor externo, de forma directa:
Código
  1. #!/usr/bin/perl
  2. use Mail::Sendmail;
  3.  
  4. my %mail = (
  5.    smtp    => 'correo.joaquinferrero.com',
  6.  
  7.    From    => 'explorer@jferrero.noip.geek',
  8.    To      => 'explor@joaquinferrero.com',
  9.    Message => "Un mensaje muy cortito",
  10. );
  11.  
  12. sendmail(%mail) or die $Mail::Sendmail::error;
Pero... no nos estamos identificando en el servidor destino (y tampoco lo permite hacer este módulo), así que para él somos un correo que llega de procedencia desconocida, y estaremos sujetos a sus reglas. En mi caso, me ha rechazado la recepción del correo y me ha metido en una lista gris, por ser sospechoso de ser correo basura. No puedo volver a intentarlo hasta pasados unos minutos.

2015-06-28 19:59:32 1Z9Grc-0007Vb-7Y H=(Arcanus) [37.101.173.131] F=<explorer@jferrero.noip.geek> temporarily rejected after DATA: message from explorer@jferrero.noip.geek over [37.101.173.131] will be GreyListed as it scores 7.2 spam points

Es mejor usar otros módulos más modernos para el envío de correo, ya que permiten la autenticación, y así podemos enviar correo usando nuestro servidor de correo personal.

Mail::Sendmail está sin actualizar desde el 2003, mientras que Mail::Sender se actualizó hace un año, y tiene más opciones de envío.

En línea

DeMoNcRaZy


Desconectado Desconectado

Mensajes: 420


$~*|_


Ver Perfil
Re: [Perl] Error al enviar Mail
« Respuesta #8 en: 29 Junio 2015, 01:31 am »

Buenas,

Acabo de configurar dicho archivo:

Código:
mtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = smtp.gmail.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = yusetist, localhost.localdomain, , localhost, smtp.gmail.com
relayhost = mycorreo@gmail.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all

Y tengo esto:

Código
  1.    #!/usr/bin/perl
  2.    use Mail::Sendmail;
  3.  
  4.    my %mail = (
  5.       From    => 'sanchezgarciatomas@gmail.com',
  6.       To      => 'sanchezgarciatomas@gmail.com',
  7.       Message => "Este es un mensaje muy cortito",
  8.    );
  9.  
  10.    if(sendmail %mail){
  11.       print "Mail enviado";
  12.    }
  13.    else{
  14.       sendmail(%mail) or die $Mail::Sendmail::error;
  15.    }

Lo ejecuto y todo correcto me manda el if (Mail enviado), pero reviso mi correo y no me llegó nada. Tal vez puede ser por mala configuración del archivo o por que está des-actualizado con bien mencionas.

-------------------------------------------------------------------------------------------------------------------

Para usar Mail::Sender me descargo Exim4 en el gestor de paquetes?

Y luego que archivo tendría que configurar con lo que me has descrito en el anterior mensaje.

Probaré a usarlo ya que está actualizado como según has mencionado y será mejor y evitaremos más problemas ocasionales.


Gracias por las respuestas.

Saludos!
En línea

Esta página web no está disponible - Google Chrome
explorer

Conectado Conectado

Mensajes: 101


Analista/Programador Perl


Ver Perfil
Re: [Perl] Error al enviar Mail
« Respuesta #9 en: 1 Julio 2015, 11:45 am »

Sí, has configurado el archivo, pero no el de las credenciales (usuario y contraseña) para poder usar el servidor smtp.gmail.com.

Si no quieres complicarte la vida, agrega la opción

smtp    => 'smtp.gmail.com',

(o el nombre de otro servidor de correo) y así Mail::Sendmail usará ese en lugar de tu MTA local. Mira mi último ejemplo.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Enviar mail vba
Programación Visual Basic
Ch3ck 4 4,594 Último mensaje 3 Junio 2005, 00:56 am
por Ch3ck
Enviar mail por BAT!!!!
Scripting
elecktra 2 2,957 Último mensaje 8 Agosto 2008, 07:11 am
por leogtz
mail(), error raro al intentar enviar mail !
PHP
Diabliyo 4 4,594 Último mensaje 25 Enero 2010, 06:04 am
por Diabliyo
Enviar mail sin formato mime (plain text)
.NET (C#, VB.NET, ASP)
dep_serg 1 2,293 Último mensaje 6 Febrero 2015, 07:10 am
por __Alvaro 2015__
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines