# [servidor de correo] ¿sendmail? [cerrado]

## Theasker

Buenos dï¿½as:

Bueno, quiero hacer funcionar lo del "PORTAGE_ELOG" para recibir por correo los mensajes de las instalaciones y tambiï¿½n como dice en esta web, hacer backups almacenï¿½ndolos en gmail, pero claro, deberï¿½a tener instalado un servidor de correo (q no se muy bien cual es el mejor o el mï¿½s prï¿½ctico), pero no se tampoco muy bien como configurarlo y como hacerlo funcionar. 

Lo primero, ... ï¿½cual deberï¿½a instalar?, ï¿½tengo q tener instalada un servidor de base de datos del estilo a MySql?.

Gracias anticipadas

----------

## jgascon

Me he estado mirando la página que citas y no hace falta que instales una base de datos (en la página sólo la citan como ejemplo) y ni siquiera te hace falta un servidor de correo. Para poder enviar mails con adjuntos a gmail desde la cónsola o un script puedes usar SendEmail. Yo hace tiempo que lo uso y no he tenido ningún problema  :Wink: 

----------

## Theasker

Bueno, aun tengo q hacerlo funcionar pero si q me servirÃ­a para mandar el archivo con la copia de seguridad diaria, pero no se si funcionarÃ­a para lo del PORTAGE_ELOG_MAILURI, si alguien lo usa me podrÃ­a explicar como conseguir q funcione?.

Gracias por lo del sendEmail, es genial ese programa (aunque aun no se muy bien como mandar un correo, pero lo conseguirÃ©)

----------

## jgascon

Para lo de PORTAGE_ELOG_MAILURI podrías montar un servidor de correo local y usar SendEmail para enviar los mails a tu cuenta de gmail. Esto es un poco chapucero y quizás se podría hacer de forma más elegante, pero a mí me funciona (aunque no es exactamente así como lo tengo montado, pero debería funcionar igual).

Por pasos:

1.- Monta un servidor de correo local siguiendo esta guía

2.- Cambia el alias de root en /etc/mail/aliases por tu usuario:

```

# Well-known aliases -- these should be filled in!

root:               tu_usuario

```

Es la única línea del archivo en que root está a la izquierda. Esto hara que todo el mail del sistema vaya a tu cuenta de usuario.

3.- ejecutar newaliases (para generar los nuevos alias).

4.- En tu home crea un archivo llamado .forward con el siguiente contenido: 

```

| /usr/local/bin/fwmail.pl

```

Esto hará que todo el mail que vaya a tu usuario se le pase a un script que usando sendEmail lo enviará a tu cuenta de gmail.

5.- Crea el archivo /usr/local/bin/fwmail.pl con el siguiente contenido y cambiando el valor de las variables con comentario las de tu cuenta de correo, usuario, etc. Por último dale al archivo permisos de ejecución y prueba a enviarte un mail a ver si te llega.

```

#!/usr/bin/perl -w

my $usuario; # usuario cuenta correo

my $pass; # contraseña cuenta correo

my $mail;  # dirección de mail

my $server = smtp.gmail.com:587; 

my $asunto;

my @lines;

while (<STDIN>) {

  if ($_ =~ /Subject:/ ) {

    $asunto = $_;

    push(@lines, $_);

  } else {

    push(@lines, $_);

  }

}

exec "sendEmail", "-t", "$mail", "-f", "$mail", "-s", "$server", "-xu", "$usuario", "-xp", "$pass", "-u", "$asunto", "-m", "@lines", "-o", "tls=yes";

```

Vigila que el ejecutable de sendEmail sea sendEmail (también puede ser sendemail) en tu sistema y si no, lo cambias en el script. La línea del exec es sólo una línea (lo digo por si la ves partida en dos).

Con esto ya debería funcionar  :Wink: Last edited by jgascon on Sat Aug 11, 2007 9:38 am; edited 1 time in total

----------

## Theasker

```
/usr/local/bin/fwmail.pl: line 1: !/usr/bin/perl: No existe el fichero o el directorio

/usr/local/bin/fwmail.pl: line 3: my: command not found

/usr/local/bin/fwmail.pl: line 4: my: command not found

/usr/local/bin/fwmail.pl: line 5: my: command not found

/usr/local/bin/fwmail.pl: line 6: my: command not found

/usr/local/bin/fwmail.pl: line 7: my: command not found

/usr/local/bin/fwmail.pl: line 8: my: command not found

/usr/local/bin/fwmail.pl: line 10: syntax error near unexpected token `)'

/usr/local/bin/fwmail.pl: line 10: `while (<STDIN>) {'

```

----------

## jgascon

Perdona, faltaba una almohadilla en la primera línea de fwmail.pl (un fallo al copiar y pegar), la primera línea del script tiene que ser así:

```

#!/usr/bin/perl -w 

```

----------

## Theasker

me estoy sintiendo un inutil :/, debería ser el script asi?

```
#!/usr/bin/perl -w

my $usuario = theasker;

my $pass = xxxxx xxx xxx;

my $mail = theasker@gmail.com;

my $server = smtp.gmail.com:587;

my $asunto;

my @lines;

while (<STDIN>) {

  if ($_ =~ /Subject:/ ) {

    $asunto = $_;

    push(@lines, $_);

  } else {

    push(@lines, $_);

  }

}

exec "sendEmail", "-t", "$mail", "-f", "$mail", "-s", "$server", "-xu", "$usuario",

"-xp", "$pass", "-u", "$asunto", "-m", "@lines", "-o", "tls=yes";

```

----------

## jgascon

Sí, puedes probar si funciona haciendo esto:

```

echo -e "Subject: Hola \n Esto es el cuerpo" | /etc/scripts/fwmail.pl

```

Bueno, ten en cuenta que la línea del exec es sólo una línea...

----------

## Theasker

estas bien asignadas las variables con "="? y ... ahora como uso esto (cuando me funcione) con lo del PORTAGE_ELOG_MAILURE

----------

## jgascon

Perdona otra vez, como decía al principio del post mi sistema es un poco diferente y no había probado el script. Tienes que hacer unos pequeños cambios en el script (culpa de mi desconocimiento de perl), el valor que les pasas a las variables tiene que ir entrecomillado y las arrobas '@' escapadas con una barra '\'. El script quedaría así, (lo acabo de probar y funciona):

```

#!/usr/bin/perl -w

my $usuario = "theasker";

my $pass = "xxxxx xxx xxx";

my $mail = "theasker\@gmail.com";

my $server = "smtp.gmail.com:587";

my $asunto;

my @lines;

while (<STDIN>) {

  if ($_ =~ /Subject:/ ) {

    $asunto = $_;

    push(@lines, $_);

  } else {

    push(@lines, $_);

  }

}

exec "sendEmail", "-t", "$mail", "-f", "$mail", "-s", "$server", "-xu", "$usuario",

"-xp", "$pass", "-u", "$asunto", "-m", "@lines", "-o", "tls=yes"; 

```

Si no te funciona, pégame el error que te dé.

 *Theasker wrote:*   

> 
> 
> y ... ahora como uso esto (cuando me funcione) con lo del PORTAGE_ELOG_MAILURE
> 
> 

 

Cuando te funcione todo, incluso el servidor de correo local, podrás definir el valor de PORTAGE_ELOG_MAILURI como "root@localhost localhost" y todo el tinglado este servirá para que te lleguen los mails a tu cuenta de gmail  :Wink: 

----------

## Theasker

ok, funciona. Este script simplemente es para facilitar el uso de sendEmail y no tener q meter todo a golpe de calcetín cada vez no?

Ahora entonces pongo eso en PORTAGE_ELOG_MAILURE  y arreglado?

----------

## jgascon

 *Theasker wrote:*   

> ok, funciona. Este script simplemente es para facilitar el uso de sendEmail y no tener q meter todo a golpe de calcetín cada vez no?
> 
> 

 

Exactamente.

 *Theasker wrote:*   

> Ahora entonces pongo eso en PORTAGE_ELOG_MAILURE  y arreglado?

 

Eso es. Voy a intentar hacerte un esquema para que te aclares un poco...

Portage envía un mail a root a la dirección root@localhost usando el servidor de correo local (el postfix que tienes que haber montado). El servidor de correo local consulta la base de datos de alias del sistema y ve que el correo que vaya a root se lo tiene que entregar a theasker. Antes de entregar el correo a theasker busca en su home a ver si hay un archivo .forward, como lo hay y éste contiene una tubería '|' el servidor entrega el correo a la orden a la derecha de la tubería (el script fwmail.pl). Por último fwmail.pl le entrega el correo a sendEmail para que lo mandé a tu cuenta de gmail...

----------

## Theasker

okis, pero en el script habrá q poner y usar en el cuerpo del mensaje las variables q tiene portage donde almacena los datos de la compilación para q sirva de algo el correo q me mando no?

----------

## jgascon

No, portage es el que se encarga de poner en el mail el resultado de la compilación (o lo que sea). El script lo único que hace es reenviar el mail que le llegue a la cuenta de gmail.

----------

## Theasker

Bueno, por fin me funciona. Muchas gracias por la paciencia y toda la informaciÃ³n. Aun tengo q repasar bien todo para entenderlo, xq una cosa es seguir los pasos y otra es saber bien lo que has hecho, q es lo que me interesa a mi, no que funcione sino aprender.

Gracias de nuevo

----------

## Theasker

Y ahora q pienso, en vez de usar un servidor de correo no se podrÃ­a hacer mÃ¡s o menos lo mismo pero con un simple script q llamara al sendEmail y en el cuerpo del mensaje usar las variables de la compilaciÃ³n del portage, usando las lÃ­neas:

```
PORTAGE_ELOG_SYSTEM="custom"

PORTAGE_ELOG_COMMAND="/usr/local/bin/enviodecorreo.sh"

```

 en vez de las q usÃ¡bamos:

```
PORTAGE_ELOG_SYSTEM="syslog save mail"

#PORTAGE_ELOG_COMMAND="/usr/local/bin/fwmail.pl"

```

----------

## jgascon

 *Theasker wrote:*   

> Y ahora q pienso, en vez de usar un servidor de correo no se podrí­a hacer más o menos lo mismo pero con un simple script q llamara al sendEmail 

 

Pues sí, te puedes hacer un pequeño script que llame a sendEmail y con eso tienes más que suficiente. Disculpa si te he enredado un poco con lo del servidor de correo pero como no uso "PORTAGE_ELOG" no sabía que permitiera especificar un comando de mail externo   :Embarassed: 

Por otra parte si necesitas recibir en gmail cualquier mail del sistema (como los generados por cron) ahora ya lo tienes todo montado  :Wink: 

Si tienes cualquier duda con el script pregunta de nuevo...

----------

## Theasker

No, no, estÃ¡ genial, asÃ­ aprendo otra cosa mÃ¡s y ... bueno con lo que dices del cron googlearÃ© a ver si consigo hacer eso tambiÃ©n.

Saludos y gracias por todo de nuevo.

----------

## jgascon

 *Theasker wrote:*   

> bueno con lo que dices del cron googlearé a ver si consigo hacer eso también.

 

Lo del cron no tiene mucho secreto, basta con que incluyas esta línea al principio de /etc/crontab

```

MAILTO=root

```

Ahora puedes configurar cualquier aplicación de tu sistema para que te envíe mails a tu cuenta de gmail simplemente configurandola para que envíe el mail a la cuenta de root   :Cool: 

----------

