Explicamos cómo enviar correos electrónicos desde la línea de comandos de un equipo con Linux, utilizando Postfix y el comando «mail». Mostramos cómo enviar un correo electrónico mediante Postfix y un servidor SMTP externo al equipo, como por ejemplo GMail.

Requisitos para enviar correos electrónicos email desde la consola Linux

Para realizar el tutorial usaremos un equipo Linux, con la distribución CentOS. Aunque el procedimiento explicado aquí servirá para distribuciones como Ubuntu, Red Hat y otras, puede variar la ruta de algún fichero de log y muy poco más.

El equipo que usemos deberá estar en una red con acceso a Internet y si usamos un firewall de seguridad perimetral deberá tener abiertos los puertos correspondientes para el envío de mail. Si usamos el envío normal con SMTP será el 25 y si usamos SSL será el 587 (o el que corresponda).

Necesitaremos acceder a la consola de Linux con un usuario con permisos suficientes para modificar ficheros de configuración de Postfix y poder ejecutar el comando mail. Si aún no tenemos instalado Postfix también deberá tener permisos suficientes para instalar paquetes.

En este tutorial usamos Postfix para el envío de email, normalmente suele venir instalado en casi todas las distribuciones de Linux, si no está instalado será preciso hacerlo, en el caso de distribuciones Linux Ubuntu podremos usar el comando:

Para distribuciones CentOS o Red Hat podremos usar el siguiente comando (añadiendo posibles paquetes dependientes):

Configuración previa para enviar correos electrónicos e-mail usando servidor SMTP externo en Linux

En primer lugar crearemos el fichero con los datos de conexión al servidor SMTP (el servidor, usuario y contraseña). Para ello ejecutaremos:

Para un servidor de correo electrónico como GMail el contenido podría ser:

[smtp.gmail.com]:587 proyectoa@gmail.com:contraseña_correo

Donde:

  • smtp.gmail.com: será la dirección del servidor de correo.
  • 587: será el puerto de conexión al servidor de mail.
  • proyectoa@gmail.com: nombre de usuario (normalmente el correo electrónico) con el que nos conectaremos al servidor de correo.
  • contraseña_correo: contraseña del usuario/cuenta anterior.
Configuración previa para enviar correos electrónicos e-mail usando servidor SMTP externo en Linux

Añadiremos la línea y guardaremos los cambios con Control + O, y cerraremos la edición con Control + X.

Estableceremos la seguridad para este fichero con los comandos:

Crearemos el fichero donde estableceremos el tipo de conexión con el servidor:

Añadiendo la siguiente línea (como ejemplo para un servidor GMail):

[smtp.gmail.com]:587 encrypt

Configuración previa para enviar correos electrónicos e-mail usando servidor SMTP externo en Linux

En el fichero anterior podemos añadir, incluso, más opciones de conexión, por ejemplo:

[smtp.gmail.com]:587 encrypt protocols=TLSv1 ciphers=high

Haremos lo mismo que para el fichero anterior:

Convertiremos los dos ficheros a hash con los comandos:

Los dos comandos anteriores crearán los ficheros:

Configuración previa para enviar correos electrónicos e-mail usando servidor SMTP externo en Linux

Deberemos comprobar que existe el fichero:

/etc/pki/tls/cert.pem

Que suele venir en las distribuciones Linux.

Por último, editaremos el fichero de configuración de PostFix, main.cf, ubicado en /etc/postfix/:

Y añadiremos las siguientes líneas al final del fichero (el ejemplo actual sirve para GMail). En myhostname introduciremos el nombre de red del equipo (hostname):

myhostname = pcoracle
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
smtp_sasl_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_CAfile = /etc/pki/tls/cert.pem
smtp_tls_security_level = encrypt

Configuración previa para enviar correos electrónicos e-mail usando servidor SMTP externo en Linux

Para que los cambios se aplique tendremos que reiniciar el servicio de Postfix:

Configuración previa para enviar correos electrónicos e-mail usando servidor SMTP externo en Linux

Prueba de envío de email desde la consola de Linux con el comando mail

Para comprobar que hemos establecido la configuración correcta de Postfix en Linux podemos usar el comando mail. Por ejemplo introduciendo:

Nos pedirá el asunto, lo introducimos y pulsamos INTRO. Luego podemos escribir el cuerpo del mensaje. Una vez escrito pulsamos INTRO y Control + D. Devolverá EOT, indicando que el comando se ha ejecutado:

Prueba de envío de email desde la consola de Linux con el comando mail

También podría ejecutarse en un único comando:

O incluso enviar un fichero adjunto:

Para ver el fichero de log de envío de mails podemos ejecutar:

Nos devolverá algo así:

tail /var/log/maillog
Jul 31 21:02:14 pcmail postfix/pickup[16503]: 0CC6212718: uid=0 from=
Jul 31 21:02:14 pcmail postfix/cleanup[10567]: 0CC6212718: message-id=<20190731190214.0CC6212718@pcmail>
Jul 31 21:02:14 pcmail postfix/qmgr[2795]: 0CC6212718: from=root@pcmail.localdomain, size=493, nrcpt=1 (queue active)
Jul 31 21:02:14 pcmail postfix/smtp[10569]: connect to smtp.gmail.com[2a00:1450:400c:c0a::6d]:587: Network is unreachable
Jul 31 21:02:15 pcmail postfix/smtp[10569]: 0CC6212718: to=ccc@cccc.com, relay=smtp.gmail.com[74.125.140.108]:587, delay=1.5, delays=0.1/0/0.58/0.86, dsn=2.0.0, status=sent (250 2.0.0 OK 1564600964 v12sm58875948wrr.87 – gsmtp)
Jul 31 21:02:15 pcmail postfix/qmgr[2795]: 0CC6212718: removed

Prueba de envío de email desde la consola de Linux con el comando mail

Si nos muestra «status=send (250 2.0.0 OK…)» normalmente es porque el correo se ha enviado correctamente. Por lo tanto podremos acceder a nuestro cliente de correo y comprobar que, efectivamente, ha llegado:

Prueba de envío de email desde la consola de Linux con el comando mail