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.
- 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.
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:
1 |
sudo apt-get install postfix |
Para distribuciones CentOS o Red Hat podremos usar el siguiente comando (añadiendo posibles paquetes dependientes):
1 |
yum install postfix mailx cyrus-sasl-plain cyrus-sasl cyrus-sasl-lib cyrus-sasl-md5 cyrus-sasl-scram cyrus-sasl-gssapi |
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:
1 |
nano /etc/postfix/sasl_passwd |
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.
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:
1 |
chmod 600 /etc/postfix/sasl_passwd<br>chown root:root /etc/postfix/sasl_passwd |
Crearemos el fichero donde estableceremos el tipo de conexión con el servidor:
1 |
nano /etc/postfix/tls_policy |
Añadiendo la siguiente línea (como ejemplo para un servidor GMail):
[smtp.gmail.com]:587 encrypt
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:
1 |
chmod 600 /etc/postfix/tls_policy<br>chown root:root /etc/postfix/tls_policy |
Convertiremos los dos ficheros a hash con los comandos:
1 2 |
postmap /etc/postfix/sasl_passwd postmap /etc/postfix/tls_policy |
Los dos comandos anteriores crearán los ficheros:
1 2 |
/etc/postfix/sasl_passwd.db /etc/postfix/tls_policy.db |
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/:
1 |
nano /etc/postfix/main.cf |
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
Para que los cambios se aplique tendremos que reiniciar el servicio de Postfix:
1 |
/etc/init.d/postfix restart |
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:
1 |
mail direccion_de_correo_destino |
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:
También podría ejecutarse en un único comando:
1 |
echo "Prueba de envío de mail usando Postfix." | mail -s "Prueba envío mail" ccc@cccc.com |
O incluso enviar un fichero adjunto:
1 |
echo "Prueba de envío de mail usando Postfix." | mail -s "Prueba envío mail" -a ruta_nombre_fichero ccc@cccc.com |
Para ver el fichero de log de envío de mails podemos ejecutar:
1 |
tail /var/log/maillog |
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
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: