| 
	
		|  Autor | Tema: [Perl] Error al enviar Mail  (Leído 8,076 veces) |  
	| 
			| 
					
						| DeMoNcRaZy 
								 
								
								 Desconectado 
								Mensajes: 420
								
								 
								$~*|_
								
								
								
								
								
								   | 
 
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: use Mail::Sendmail;    %mail=(To => 'su_direccion@alli.com',                From => 'mi_direccion@aqui.com',                Message => "Mensaje de prueba"         );    if(sendmail %mail){      print "Mail enviado correctamente.\n";   }   else{      print "Error al enviar mail: $Mail::Sendmail::error\n";   }
 Y me da este error: 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?  (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 
								
								 Desconectado 
								Mensajes: 102
								
								 
								Analista/Programador Perl
								
								
								
								
								
								   | 
 
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 
								Mensajes: 420
								
								 
								$~*|_
								
								
								
								
								
								   | 
 
Gracias por la respuesta, Acabo de instalar dicho paquete, pero ahora me dice lo siguiente: 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 |  |  |  |  |  | 
			| 
					
						| DeMoNcRaZy 
								 
								
								 Desconectado 
								Mensajes: 420
								
								 
								$~*|_
								
								
								
								
								
								   | 
 
Estoy probando como bien dice hay: use Mail::Sendmail;   print "Testing Mail::Sendmail version $Mail::Sendmail::VERSION\n";  print "Default server: $Mail::Sendmail::mailcfg{smtp}->[0]\n";  print "Default sender: $Mail::Sendmail::mailcfg{from}\n";   %mail = (      To      => 'correo@gmail.com',      From    => 'correo@gmail.com',      Bcc     => 'Someone <correo@gmail.com>, Someone else her@there.com',      # only addresses are extracted from Bcc, real names disregarded      Cc      => 'Yet someone else <correo@gmail.com>',      # Cc will appear in the header. (Bcc will not)      Subject => 'Test message',      'X-Mailer' => "Mail::Sendmail version $Mail::Sendmail::VERSION",  );    $mail{Smtp} = 'smtp.gmail.com';  $mail{'X-custom'} = 'My custom additionnal header';  $mail{'mESSaGE : '} = "The message key looks terrible, but works.";  # cheat on the date:  $mail{Date} =  Mail::Sendmail::time_to_date( time() - 86400 );   if (sendmail %mail) { print "Mail sent OK.\n" }  else { print "Error sending mail: $Mail::Sendmail::error \n" }   print "\n\$Mail::Sendmail::log says:\n", $Mail::Sendmail::log;
 Y el resultado: 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í: use Mail::Sendmail;       $mail{smtp} = [qw( smtp. gmail. com)];      $mail{from} = 'correo@gmail.com';      $mail{port} = 587;       %mail=(To => 'correo@gmail.com',                   From => 'correo@hotmail.com',                   Message => "Mensaje de prueba"            );       if(sendmail %mail){         print "Mail enviado correctamente.\n";      }      else{         print "Error al enviar mail: $Mail::Sendmail::error\n";      }
 Y me da este resultado: 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 
								
								 Desconectado 
								Mensajes: 102
								
								 
								Analista/Programador Perl
								
								
								
								
								
								   | 
 
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 comandomail -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 
								Mensajes: 420
								
								 
								$~*|_
								
								
								
								
								
								   | 
 
Buenas, Gracias por la respuesta. Este es el archivo: smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destinationmyhostname = 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á: use Mail::Sendmail;       $mail{smtp} = [qw( smtp. gmail. com)];      $mail{port} = 587;       %mail=(To => 'correo',                   From => 'correo',                   Message => "Mensaje de prueba"            );       if(sendmail %mail){         print "Mail enviado correctamente.\n";      }      else{         print "Error al enviar mail: $Mail::Sendmail::error\n";      }
 ¿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 
								
								 Desconectado 
								Mensajes: 102
								
								 
								Analista/Programador Perl
								
								
								
								
								
								   | 
 
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: smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destinationmyhostname = 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í: correo.joaquinferrero.com explor@joaquinferrero.com:Nan&&telovewebondonde se indican las credenciales (usuario:contraseña) para cada servidor externo. Con esto, ya puedo escribir un programa así de sencillo: #!/usr/bin/perluse Mail::Sendmail; my %mail = (    From    => 'explorer@jferrero.noip.geek',    To      => 'explor@joaquinferrero.com',    Message => "Este es un mensaje muy cortito",); 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: #!/usr/bin/perluse Mail::Sendmail; my %mail = (    smtp    => 'correo.joaquinferrero.com',     From    => 'explorer@jferrero.noip.geek',    To      => 'explor@joaquinferrero.com',    Message => "Un mensaje muy cortito",); 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 
								Mensajes: 420
								
								 
								$~*|_
								
								
								
								
								
								   | 
 
Buenas,Acabo de configurar dicho archivo: mtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destinationmyhostname = 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:     #!/usr/bin/perl    use Mail::Sendmail;     my %mail = (       From    => 'sanchezgarciatomas@gmail.com',       To      => 'sanchezgarciatomas@gmail.com',       Message => "Este es un mensaje muy cortito",    );     if(sendmail %mail){    }    else{       sendmail(%mail) or die $Mail::Sendmail::error;    }
 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 
								
								 Desconectado 
								Mensajes: 102
								
								 
								Analista/Programador Perl
								
								
								
								
								
								   | 
 
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 | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Enviar mail vba Programación Visual Basic
 | Ch3ck | 4 | 5,074 |  3 Junio 2005, 00:56 am por Ch3ck
 |  
						|   |   | Enviar mail por BAT!!!! Scripting
 | elecktra | 2 | 3,487 |  8 Agosto 2008, 07:11 am por leogtz
 |  
						|   |   | mail(), error raro al intentar enviar mail ! PHP
 | Diabliyo | 4 | 5,468 |  25 Enero 2010, 06:04 am por Diabliyo
 |  
						|   |   | Enviar mail sin formato mime (plain text) .NET (C#, VB.NET, ASP)
 | dep_serg | 1 | 2,805 |  6 Febrero 2015, 07:10 am por __Alvaro 2015__
 |    |