CONEXIÓN Y CONFIGURACIÓN DE INTERNET DESDE LINUX

Artículo 3: GESTIÓN DE CORREO ELECTRÓNICO

Autor: (c) Santiago Romero
Revista: NetOnline (Prensa Técnica) nº 14, Octubre-1998


El correo electrónico es casi probablemente el servicio más útil para muchos de los usuarios de Internet, permitiendo intercambio de información cuasi instantáneamente. En el artículo de este mes veremos cómo configurar su recogida, envío y gestion con los programas más populares y sencillos para dichos servicios, permitiéndonos además hacer trabajar a Netscape Communicator en modo desconectado.

El correo electrónico en Linux no puede considerarse como un extra al sistema operativo, sino que forma parte del mismo pues es una característica casi inherente a todo Linux. Cualquier instalación mínima de Linux incluye mailx, uno de los programas más sencillos pero útiles para el envío de correo electrónico en redes de todo tipo.

Debido a que Linux es una máquina multiusuario, este programa (junto con otros de aspecto más amigable como Pine o Netscape) viene incluido de serie en las distribuciones de Linux, de manera que es muy probable que lo tengamos instalado en el sistema y podamos hacer uso del mismo sin necesidad de configurar nada. Otro par de programas importantes a la vez que complementarios son fetchmail, que nos permitirá recoger el email de Internet y pasárselo a un usuario de nuestra red; y sendmail, que se encargará del envío del correo pendiente en la cola de salida, y que nos permitirán trabajar de una manera muy rápida desde la línea de comandos para la gestión de la recepción y envío de correo electrónico.


MAILX

Dada cualquier red de ordenadores interconectados, sin hablar necesariamente de Internet, sino simplemente desde 2 ordenadores conectados por cable hasta el amasijo de ordenadores interconectados que pueden encontrarse en las aulas de las Universidades, resulta imprescindible el envío de información en forma de mensajes entre los distintos usuarios que trabajan en la misma. El paquete mailx (y su ejecutable, mail), hace precisamente esto, posibilitando el envío de texto y datos dentro de una estructura coherente llamada mensaje, con su cabecera (campos: FROM (persona que envía el mensaje), TO (persona destinataria del mismo), SUBJECT (tema del que trata el mensaje) y CC o carbon copy (lista de personas que recibirán una copia del mismo).) y su BODY (cuerpo del mensaje), pudiendo incluir además ficheros añadidos que vienen incluidos dentro del paquete del mensaje (attach).

En la figura 1 podemos observar una captura realizada mientras se usaba el programa mail para responder un mensaje entre 2 usuarios de una red Linux. A continuación veremos la manera de utilizar este sencillo programa.

Programa mail


TRABAJANDO CON MAILX

Para explicar el uso de mailx se va a usar un sencillo ejemplo en un máquina con un sólo usuario: sromero, además del obligatoriamente existente root (puede obternerse la lista de usuarios presentes en el sistema y en qué terminal están trabajando simplemente ejecutando la orden who). Supongamos que somos el usuario sromero y queremos enviarle un mensaje a root para testear las capacidades de envio de email. La manera más sencilla de enviar un mensaje a un usuario de la red es ejecutar mail :


 [sromero@localhost info]$ mail root
 Subject: Prueba de MailX.
 Esto es el cuerpo del mensaje. Es una prueba de mailx.
 Un mensaje se acaba con un punto (.) al principio de línea.
 .
 Cc: (intro) 
Al ejecutar mail root se nos ha preguntado el tema (subject), el cuerpo del mensaje (acabado en punto (.)), y a quién se le deseaba enviar copias del mismo (Cc), cosa que hubiera sido bastante útil si nuestro mensaje fuera una invitación a un grupo de amigos o una información para un grupo concreto de personas. Tras escribir esto, el mensaje escrito se graba como un fichero de texto (con el mismo nombre que el destinatario del mensaje, y al que se añadirán más mensajes conforme se le vayan enviando a dicho destinatario) en el directorio /var/spool/mail, a la espera de que el usuario destino los lea y vayan siendo eliminados del mismo.

Si root está conectado o entra más tarde en cualquier terminal del sistema, recibirá un mensaje de aviso indicando que el sistema ha detectado la llegada de correo para el usuario:

 You have mail.

Para realizar la lectura del correo electrónico, simplemente se invoca al programa mail, obteniendo una lista del correo pendiente y esperando el programa a que el usuario lo lea, responda, borre o almacene para más tarde:


 [root@localhost /root]# mail
 Mail version 8.1 6/6/93.  Type ? for help.
 "/var/spool/mail/root": 3 messages 3 new
 >N  1 sromero   Thu Jul 30 17:04  17/55   "Prueba de MailX."
  N  2 sromero   Thu Jul 30 17:15  17/50   "Pregunta sobre adm"
  N  3 sromero   Thu Jul 30 17:16  15/44   "Felices vacaciones!"
& _

Como puede verse, mail nos muestra los mensajes pendientes (en este caso 3) por responder, con su usuario de origen (sromero), la fecha y el tema, con el cursor virtual (>) situado sobre el primero (es decir, indicando sobre cual actuará una orden de lectura, respuesta o borrado), y con un promtp (el carácter &) a la espera de recepción de órdenes sobre qué hacer con dicho correo.

Estas órdenes son:

	'número' -> Listar el mensaje .
	't' -> lista el mensaje actual (el apuntado por >)
	'n' -> Pasar al siguiente mensaje y visualizarlo.
	'd' -> Borrar mensaje.
	'e' -> Editar mensaje
	'r' -> Responder mensaje.
	'q' -> Salir de mailx.

A la mayoría de estas opciones se les puede pasar un nº de mensaje (desde 1 hasta n) para indicar sobre qué mensaje realizar la acción (ejemplo 'd 3' o 'delete 3'). Otras opciones, obtenidas mediante la ayuda de mailx, son:

 & ?
 Mail Commands
 t  type messages
 n goto and type next message
 e  edit messages
 f  give head lines of messages
 d  delete messages
 s  file append messages to file
 u  undelete messages
 R  reply to message senders
 r  reply to message senders and all recipients
 pre  make messages go back to /usr/spool/mail
 m  mail to specific users
 q quit, saving unresolved messages in mbox
 x quit, do not remove system mailbox
 h print out active message headers
 ! shell escape
 cd [directory] chdir to directory or home if none given
 A  consists of integers, ranges of same, or user names separated
 by spaces. If omitted, Mail uses the last message typed.
 A  consists of user names or aliases separated by spaces.
 Aliases are defined in .mailrc in your home directory.


En el caso de no disponer de correo en ese momento, mail nos avisa con un:

 [root@localhost root]# mail
 No mail for root

Otro fichero asociado es el fichero .signature de nuestro directorio home, utilizado como fichero de firmas y cuyo contenido es incluido al final de los emails escritos y respondidos por nosotros, pudiendo editarse y rellenarse con cualquier editor estándar de Linux para incluir nuestra firma personal. Este fichero es utilizado por la mayoría de gestores de correo de Linux como fichero de firmas por defecto, tal y como hace Mail, Pine, Netscape, Kmail, etc.


PINE PARA GESTION DE CORREO

El paquete Pine es similar a mailx (gestión simple de correo), pero con un interfaz mucho más agradable y sencillo, guiado por menús, configurable (posibilidad de utilizar nuestro editor particular, quoteado del email al que respondemos, con carpetas para guardar emails cuando así lo deseemos, etc.), siendo para consola lo que Netscape Messenger Mailbox de Netscape es para XWindow (puede observarse una captura de su pantalla principal en la figura 2).

Pine

La primera vez que lo ejecutemos nos avisará de que está creando subdirectorios donde almacenar nuestro correo, para posteriormente pasar al programa en sí, bastante visual y de donde sólo destacaremos alguna de las opciones de configuración que nos permitirán trabajar con el mapa de carácteres castellano (acentos, eñes, etc.). Para ello desde la pantalla principal vamos a SETUP y pulsamos C de Configure, modificando todas las opciones que deseemos (editor a utilizar, textos por defecto, opciones varias), entre ellas especificar como character-set el valor ISO-8859-1, finalizando los cambios con E y pulsando Y para aceptar los nuevos valores de configuración. Entre las distintas opciones se dispone de la opción de cambiar de editor de mensajes (y utilizar nuestro editor favorito en vez de PICO, el incluido en PINE), mediante ENABLE_ALTERNATE_EDITOR y CMD_EDITOR (en mi caso, activadas a YES y JOE).


ENVIO DE CORREO: SENDMAIL

Cuando escribimos un email que va fuera de nuestra red local (por ejemplo, a una dirección de correo electrónico en Internet) necesitamos un agente que extraiga dicho correo de /var/spool y lo envie a nuestro Proveedor de Servicios de Internet (en mi caso, a smtp.arrakis.es). Sendmail es un programa bastante conflictivo para los administradores noveles, así que ya que disponemos de Linux en nuestras propias máquinas (y somos también root de ellas), vamos a exponer el método más sencillo de configuración (y ya ahondaremos en sendmail más adelante para propositos más rebuscados), para uso con un sólo ISP, que consiste en la edición del fichero de configuración /etc/sendmail.cf, con el fin de modificar 2 líneas del mismo:

1.- Buscamos una línea similar a la siguiente:


 # "Smart" relay host (may be null)
DS

Esta línea hay que cambiarla de forma que referencie a nuestro servidor de correo saliente o smtp (para que sendmail envie a dicho servidor nuestro correo). A título de ejemplo, mi servidor de correo saliente es smtp.arrakis.es, por lo que la línea debe quedar como:


# "Smart" relay host (may be null)
DSsmtp.arrakis.es

2.- Ahora tenemos que enmascarar nuestra dirección de correo (es decir, modificar el fichero de configuración para que las direcciones de retorno de emails no sean las que tenemos en nuestra máquina (como sromero@localhost), sino las direcciones de retorno reales. Para ello buscamos la siguiente línea:


# Who I masquerade as (null for no masquerading)
DM

A esta línea se le añade el dominio de nuestra dirección de correo. Si mi dirección email es sromero@arrakis.es, el dominio es arrakis.es:


# Who I masquerade as (null for no masquerading)
DMarrakis.es

Con estos cambios estamos forzando a que cuando se escribe un email, la dirección de retorno del mismo tenga el dominio correcto, cosa que se podría modificar de igual manera (sin el retoque de sendmail.cf) si nuestro programa para leer/contestar el correo permite hacerlo (en PINE, por ejemplo, modificamos la cabecera FROM en las opciones, en CUSTOMIZED-HEADERS). Para un usuario medio (acceso a Internet, recogida y envio de correo en un proveedor, etc.), el método comentado del sendmail.cf es más que suficiente.

Una vez realizada la configuración, supongamos que desde un usuario cualquiera enviamos un email a juan@proveedor.es, mediante el comando mail juan@proveedor.es. Dicho email se grabará en /var/spool/mail a la espera de ser enviado a nuestro ISP quien a su vez lo enviará al usuario juan. Es decir, los emails que enviemos a Internet se guardarán en el directorio del correo hasta que se realice su envio mediante sendmail en la próxima conexión a Internet, gracias al comando "sendmail -q". Los mensajes en cola de envío se encuentran en /var/spool/mqueue (por si queremos releerlos o borrar alguno), y podemos consultarlos mediante el comando mailq.

Sendmail es un daemon o demonio, es decir, está ejecutandose en nuestra consola continuamente tratando de enviar el correo cada X tiempo. Para evitar esto, y obligarle a que el envío se realice manualmente por nuestra parte, debemos modificar el arranque de sendmail en el fichero /etc/rc.d/init.d/sendmail cambiándolo para que arranque con las siguientes opciones:

 daemon /usr/sbin/sendmail -bd -oDeliveryMode=d

Otro problema común es recibir una advertencia (warning) cada vez que un mensaje lleve más de X hroas sin ser enviado (4 por defecto). Para evitar eso tan sólo hay que editar /etc/sendmail.cf y comentar (colocando un símbolo # al principio de la línea, y, por tanto, deshabilitándola) la siguiente opción:

 Timeout.queuewarn=4h

Otra opción a comentar (añadiendo # al principio de la línea correspondiente en sendmail.cf) es la siguiente:

 Timeout.queuereturn=5d

Esta opción especifica que si el correo no ha podido ser enviado durante 5 días debe ser devuelto a sendmail. Esto puede ser util si estamos enviando los emails a un proveedor y se pierden, con lo que gracias a la devolución podrían ser reenviados, pero en nuestro caso no va a ser necesario pues los mensajes residiran en nuestro disco duro hasta el momento en que los enviemos.


RECOGIDA DE CORREO: FETCHMAIL

Fetchmail es el daemon encargado de la recogida de correo, para posteriormente pasárselo a sendmail, que es quien lo distribuye. La forma más sencilla de configurar fetchmail es como root, creando un fichero .fetchmailrc en el directorio /root, de forma que sea root quien recoja el correo y se lo pase al usuario/usuarios que deban leerlo. Dicho fichero tiene un formato como el que sigue:


defaults
fetchall
flush
pass8bits

poll servidor_de_correo
proto pop3
user usuario
pass password
to usuario_local

Las opciones incluidas en este fichero son las siguientes:

defaults: establece los valores por defecto para fetchmail.
fetchall: recoge todos los mensajes pendientes en el servidor de correo.
flush: una vez recogidos los mensajes son borrados del servidor de correo. Para nuestras primeras pruebas es recomendable cambiar este parámetro por keep, para que los mantenga y así no los perdamos en caso de un error de configuración.
pass8bits: Indica que el mensaje puede contener carácteres de 8 bits (acentos, eñes, etc.).
Bloque poll/proto/user/pass: Indica las características de nuestro servidor de correo. Si disponemos de más de un servidor de correo, se deben incluir tantos bloques de este tipo (repetir la estructura para ambos) como servidores dispongamos.
poll: Indica el servidor de correo entrante (POP o IMAP) de donde leer el correo (en mi caso se trata simplemente de anteponer pop al dominio de mi ISP, quedando pop.arrakis.es).
proto pop3: Indica que nuestro servidor de correo entrante utiliza POP para la recogida del correo (alternativo a IMAP).
user y pass: indican la cuenta del correo y password del usuario. to usuario: indica a qué cuenta de usuario se le ha de pasar el correo. Usuario ha de ser una cuenta de nuestro sistema Linux, tales como sromero, o root.

Un ejemplo de fichero .fetchmailrc para un usuario sromero@arrakis.es sería el siguiente:


defaults
flush
fetchall
pass8bits
poll pop.arrakis.es
proto pop3
user sromero@arrakis
pass mipassword
to sromero

Además, este fichero tiene que tener unos permisos de lectura/escritura concretos, debido a que posee nuestro password de correo, cosa que se realiza con la orden chmod:


 [root@localhost root]#   chmod 0600 .fetchmailrc

La forma de recoger el correo es, estando conectado, ejecutar la orden "fetchmail".

Una segunda opción es crear un fichero .fetchmailrc en el home del usuario que deba recoger el correo, sólo conteniendo el bloque poll/proto/user/pass, y utilizar fetchmail para la recogida desde el usuario. Para más información, ejecutar man fetchmail.

Por último, podemos hacer que fetchmail corra en forma de demonio (el equivalente en MSDOS sería como un programa residente), y que recoja el correo sólo cada X segundos, cosa muy sencilla de realizar añadiendo la siguiente opción al fichero .fetchmailrc:

 set daemon X
 
 (ejemplo: set daemon 300)
Una vez recogidos los mensajes (ya sea en forma manual o como daemon), éstos son depositados por sendmail en /var/spool/mail, de manera que puedan ser accedidos por cualquier programa de correo del sistema (mailx, pine, y, como veremos ahora, Netscape).


CONFIGURACION DE NETSCAPE PARA TRABAJAR OFFLINE

Si disponemos de nuestros emails en /var/spool/mails nada nos impide utilizar Netscape para trabajar con ellos, y así de paso trabajar en modo desconectado u offline. Para ello tan sólo hemos de ir a las opciones del programa (edit->preferences), y modificar los datos que especifican nuestro servidor de correo entrante y saliente.

Para ello vamos a la pestaña Mail & Groups, submenú Mail Server y como Outgoing mail (SMTP) server especificamos localhost (nuestro ordenador), de manera que al enviar emails con Netscape vayan a parar al directorio /var/spool/mail. Como Mail server type especificamos la opción Movemail Application, y seleccionamos Built in, para que utilice la herramienta interna de Netscape para la recogida del correo.

Por último como root habremos de cambiar los permisos del directorio /var/spool/mail para que Netscape pueda escribir en ellos:


 [root@localhost root]# cd /var/spool
 [root@localhost spool]# chmod 01777 mail

Una vez realizado esto, todas las recepciones y envíos se realizan sobre el directorio /var/spool/mail, con lo que podremos leer y responder desde Netscape los emails recogidos con fetchmail, y cuyas respuestas serán enviadas por sendmail en la siguiente conexión a Internet.

De la misma manera, podemos especificar localhost como servidor de correo entrante (pop) y saliente (smtp) en otros programas de correo para que accedan a nuestra máquina y podamos trabajar en modo desconectado, como en el programa Kmail incluido en KDE.


SENCILLEZ Y VELOCIDAD

Gracias a las herramientas hoy comentadas, realizar el envío y recogida del correo se reduce a llamadas como las siguientes:


 [root@localhost root]# pppd
 [root@localhost root]# sendmail -q
 [root@localhost root]# fechmail
 [root@localhost root]# killall pppd

Tras lo cual (apenas un minuto) ya podremos acudir a nuestro programa de lectura de correo con el fin de responder nuestro email personal. Otra opción es incluir las llamadas a las funciones de envío y recogida en el fichero /etc/ppp/ip-up, de manera que la recogida sea automática al realizarse la conexión. Además podremos utilizar procmail para distribuir el correo, de manera que todos los usuarios de una red tengan la misma dirección de email en Internet pero luego puedan enviarse mensajes a usuarios individuales con esa misma dirección, etc. Las posibilidades de actuación de Linux son infinitas en este campo, pudiendo crear listas de correo, filtros anti-spam, etc.


EN LA PRÓXIMA ENTREGA

En las próximas entregas analizaremos más programas de Linux y sus configuraciones, tales como leafnode, para la recogida y lectura de news offline, ftp, telnet e irc, de los que veremos sus comandos más comunes y útiles, y como entre estos 3 últimos programas disponemos de acceso a los recursos más habituales de Internet.

Figura 1: "Instantánea de mailx."
Figura 2: "Menú principal de PINE."
Santiago Romero


Volver a la tabla de contenidos.