Justin Ellingwood escribió una versión anterior de este tutorial.
Postfix es un popular agente de transferencia de correo (MTA) de código abierto que puede usarse para dirigir y entregar correo electrónico en un sistema Linux. Se estima que alrededor del 25 % de los servidores de correo público de Internet cuentan con Postfix.
En esta guía, se mostrará la manera de instalar y configurar Postfix en un servidor de Ubuntu 20.04. Luego, comprobará que Postfix puede dirigir correctamente el correo instalando s-nail
, un Agente de usuario de correo (MUA), también conocido como cliente de correo electrónico
Tenga en cuenta que el objetivo de este tutorial es ayudarlo a tener en funcionamiento Postfix rápidamente con alguna funcionalidad de correo electrónico básica. Al final de esta guía no tendrá un servidor de correo electrónico con funcionalidad completa, pero tendrá algunos de los componentes básicos de dicha configuración para ayudarlo a comenzar.
Para seguir esta guía, necesitará lo siguiente:
sudo
y un firewall configurado con UFW. Puede seguir nuestra guía de configuración inicial del servidor Ubuntu 20.04 para configurar esto.Tenga en cuenta que este tutorial asume que está configurando un host que tiene el FQDN de mail.example.com
. Siempre que sea necesario, asegúrese de cambiar example.com
o mail.example.com
para que refleje su propio FQDN.
Postfix se incluye en los repositorios predeterminados de Ubuntu, para que pueda instalarlo con APT.
Para comenzar, actualice su caché de paquetes apt
local:
- sudo apt update
Luego instale el paquete postfix
con el siguiente comando. Observe que aquí pasamos la variable ambiental DEBIAN_PRIORITY=low
en el comando de instalación. Esto hará que el proceso de instalación le solicite que configure algunas opciones adicionales:
- sudo DEBIAN_PRIORITY=low apt install postfix
Este proceso de instalación abrirá una serie de solicitudes interactivas. A efectos de este tutorial, utilice la siguiente información para completar las solicitudes:
mail.example.com
. Probablemente quiera establecer el nombre de correo del sistema a example.com
, para que, dado el nombre de usuario user1
, Postfix usará la dirección user1@example.com
.root@
y postmaster@
. Utilice su cuenta principal para esto. En este ejemplo, sammy.0
, se deshabilitará la restricción de tamaño.+
funcionará para este tutorial.Para ser explícito, estos son los ajustes usados en esta guía:
example.com
(no mail.example.com
)$myhostname, example.com, mail.example.com, localhost.example.com, localhost
127.0.0.0/8 [:ffff:127.0.0.0]/104 [::1]/128
.0
+
Nota: Si alguna vez necesita volver para configurar estos ajustes, puede hacerlo escribiendo lo siguiente:
- sudo dpkg-reconfigure postfix
Las instrucciones se completarán previamente con sus respuestas anteriores.
Cuando finalice el proceso de instalación, estará listo para realizar algunas actualizaciones a su configuración de Postfix.
Ahora puede realizar ciertos ajustes que el proceso de instalación del paquete no le solicitó. Muchos de los ajustes de configuración de Postfix se definen en el archivo /etc/postfix/main.cf
. En vez de editar este archivo directamente, puede usar el comando postconf
de Postfix para consultar o establecer los ajustes de configuración.
Para comenzar, establezca la ubicación para el buzón de su usuario Ubuntu non-root. En esta guía, usaremos el formato Maildir, que separa los mensajes en archivos individuales que luego se mueven entre directorios según la acción del usuario. La opción alternativa que no está cubierta en esta guía es el formato mbox, que almacena todos los mensajes en un archivo único.
Establezca la variable home_mailbox
a Maildir/
. Más tarde, creará una estructura de directorio bajo ese nombre en el directorio de inicio de su usuario. Configure home_mailbox
escribiendo lo siguiente:
- sudo postconf -e 'home_mailbox= Maildir/'
A continuación, establezca la ubicación de la tabla virtual_alias_maps
, que asigna cuentas de correo arbitrarias a las cuentas del sistema Linux. Ejecute el siguiente comando, que asigna la ubicación de la tabla a un archivo hash de la base de datos llamado /etc/postfix/virtual
:
- sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'
Ahora que ha definido la ubicación del archivo de asignaciones virtuales en su archivo main.cf
, puede crear el archivo en sí mismo y comenzar a asignar cuentas de correo a cuentas de usuario en su sistema Linux. Cree el archivo con su editor de texto preferido; en este ejemplo, usaremos nano
:
- sudo nano /etc/postfix/virtual
Liste cualquier dirección para la que desee aceptar correo, seguido de un espacio en blanco y el usuario Linux al que desea que se le entregue el mensaje.
Por ejemplo, si desea aceptar correo electrónico en contact@example.com
y admin@example.com
y quiere que esos correos electrónicos se entreguen al usuario de Linux sammy, podría configurar su archivo de la siguiente forma:
contact@example.com sammy
admin@example.com sammy
Después de asignar todas las direcciones a las cuentas del servidor correspondientes, guarde y cierre el archivo. Si utiliza nano
, podrá hacer esto pulsando CTRL+X
, Y
y, luego, ENTER
.
Aplique la asignación escribiendo:
- sudo postmap /etc/postfix/virtual
Reinicie el proceso Postfix para asegurarse de que todos sus cambios se hayan aplicado:
- sudo systemctl restart postfix
Asumiendo que siguió la guía de requisitos previos para la configuración inicial del servidor, habrá configurado un firewall con UFW. Este firewall bloqueará las conexiones externas a los servicios en su servidor por defecto a menos que esas conexiones se permitan explícitamente, de forma que tendrá que añadir una regla de firewall para permitir una excepción para Postfix.
Puede permitir conexiones al servicio escribiendo lo siguiente:
- sudo ufw allow Postfix
Con esto, Postfix está configurado y listo para aceptar conexiones externas. Sin embargo, aún no está listo para probar con un cliente de correo. Antes de poder instalar un cliente y usarlo para interactuar con el correo que se entrega a su servidor, deberá realizar algunos cambios a la configuración de su servidor de Ubuntu.
Para interactuar con el correo que se entrega, este paso explicará el proceso de instalar el paquete s-nail
. Esta es una variante rica en funciones del cliente xmail
de BSD que puede gestionar el formato Maildir correctamente.
Antes de instalar el cliente, sin embargo, sería prudente garantizar que su variable de entorno MAIL
está configurada correctamente. s-nail
buscará esta variable para determinar dónde encontrar el correo para su usaurio.
Para garantizar que la variable MAIL
está configurada independientemente de cómo accede a su cuenta (ya sea a través de ssh
, su
, su
- o sudo
, por ejemplo), deberá establecer la variable en el archivo /etc/bash.bashrc
y añadirlo a un archivo en /etc/profile.d
para asegurar que está configurado para todos los usuarios por defecto.
Para agregar la variable a estos archivos, escriba lo siguiente:
- echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh
Para leer la variable en su sesión actual, recurra al archivo /etc/profile.d/mail.sh
:
- source /etc/profile.d/mail.sh
Con eso completado, instale el cliente de correo s-nail
con APT:
- sudo apt install s-nail
Antes de ejecutar el cliente, hay algunos ajustes que deberá realizar. Abra el archivo /etc/s-nail.rc
en su editor:
- sudo nano /etc/s-nail.rc
Al final del archivo, añada las siguientes opciones:
. . .
set emptystart
set folder=Maildir
set record=+sent
Estas líneas hacen lo siguiente:
set emptystart
: permite al cliente abrir incluso con una bandeja de entrada vacíaset folder=Maildir
: establece el directorio Maildir
a la variable interna folder
set record=+sent
crea un archivo de mbox sent
para almacenar el correo enviado en el directorio que se establezca como la variable folder
, en este caso Maildir
Guarde y cierre el archivo cuando haya terminado. Ahora está listo para iniciar la estructura Maildir de su sistema.
Una forma rápida de crear la estructura Maildir en su directorio de inicio es enviarse a usted mismo un correo con el comando s-nail
. Debido a que el archivo sent
solo estará disponible una vez que se cree Maildir, deberíamos deshabilitar la escritura para este correo electrónico inicial. Haga esto pasando la opción -Snorecord
.
Envíe el correo electrónico dirigiendo una cadena al comando s-nail
. Ajuste el comando para marcar su usuario Linux como el destinatario:
- echo 'init' | s-nail -s 'init' -Snorecord sammy
Nota: Es posible que reciba la siguiente respuesta:
OutputCan't canonicalize "/home/sammy/Maildir"
Esto es normal y puede aparecer únicamente cuando se envíe este primer mensaje.
Puede verificar para asegurar que el directorio se creó buscando su directorio ~/Maildir
:
- ls -R ~/Maildir
Verá que la estructura del directorio se ha creado y que hay un nuevo archivo de mensaje en el directorio ~/Maildir/new
:
Output/home/sammy/Maildir/:
cur new tmp
/home/sammy/Maildir/cur:
/home/sammy/Maildir/new:
1463177269.Vfd01I40e4dM691221.mail.example.com
/home/sammy/Maildir/tmp:
Ahora que se ha creado la estructura del directorio, está listo para probar el cliente s-nail
visualizando el mensaje init
que envió y enviando un mensaje a una dirección de correo externa.
Para abrir el cliente, ejecute el comando s-nail
:
- s-nail
En su consola, verá una bandeja de entrada rudimentaria con el mensaje init
esperando:
Outputs-nail version v14.9.15. Type `?' for help
"/home/sammy/Maildir": 1 message 1 new
>N 1 sammy@example.com 2020-05-19 15:40 14/392 init
Pulse ENTER
para mostrar el mensaje:
Output[-- Message 1 -- 14 lines, 369 bytes --]:
From sammy@example.com Tue May 19 15:40:48 2020
Date: Tue, 19 May 2020 15:40:48 +0000
To: sammy@example.com
Subject: init
Message-Id: <20160513220749.A278F228D9@mail.example.com>
From: sammy@example.com
init
Puede volver a su lista de mensajes escribiendo h
y pulsando ENTER
:
- h
Output>R 1 sammy@example.com 2020-05-19 15:40 14/392 init
Observe que el mensaje tiene un estado de R
, lo que indica que ha sido leído.
Ya que este mensaje no es muy útil, podemos borrarlo escribiendo d
y pulsando ENTER
:
- d
Para volver al terminal, escriba q
y luego pulse ENTER
:
- q
Como prueba final, compruebe si s-nail
puede enviar correctamente mensajes de correo. Para hacer esto, puede canalizar los contenidos de un archivo de texto al proceso s-nail
, como hizo con el mensaje init
que envió en el paso anterior.
Comience escribiendo un mensaje de prueba en un editor de texto:
- nano ~/test_message
Dentro, introduzca el texto que desee enviar:
Hello,
This is a test. Please confirm receipt!
Guarde y cierre el archivo después de escribir su mensaje.
A continuación, utilice el comando cat
para canalizar el mensaje al proceso s-nail
. Puede hacerlo con el siguiente ejemplo, que utiliza estas opciones:
-s
: esto define el asunto del mensaje de correo electrónico-r
: cambio opcional en el campo “De” del correo electrónico. Por defecto, el usuario Linux con el que inició sesión se utilizará para completar este campo. La opción -r
le permite anular esto con una dirección válida, como una de las definidas en el archivo /etc/postfix/virtual
. Para ilustrar esto, el siguiente comando utiliza contact@example.com
Además, asegúrese de cambiar user@email.com
por una dirección de correo válida a la que tenga acceso:
- cat ~/test_message | s-nail -s 'Test email subject line' -r contact@example.com user@email.com
A continuación, navegue al buzón de entrada de la dirección de correo a la que envió el mensaje. Verá su mensaje esperando ahí casi de inmediato.
Nota: Si el mensaje no está en su bandeja de entrada, es posible que haya sido enviado a su carpeta de spam.
Puede ver sus mensajes enviados en su cliente s-nail
. Inicie el cliente interactivo de nuevo:
- s-nail
Desde el cliente de correo, vea sus mensajes enviados escribiendo:
- file +sent
Verá un resultado como este:
Output+[/home/sammy/Maildir/]sent: 1 message 1 new
▸N 1 contact@example.com 2020-05-19 15:47 12/297 Test email subject line
Puede administrar el correo enviado usando los mismos comandos que emplee para el correo entrante.
Con esto, debería tener Postfix configurado en su servidor de Ubuntu 20.04. Administrar servidores de correo puede ser una tarea difícil para los administradores de sistemas novatos, pero con esta configuración, debería tener la suficiente funcionalidad MTA para comenzar.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
I couldn’t create Maildir structure, I used maildirmake from qmail but I’m not sure if create it that way is the same or something is missing, because I don’t have my mail server working, no mail receiving… Any suggestions? Regards,
Because I can’t send email to an external email. Having port 25 enabled on the firewall.
definitivo ya hice todo y sigue sin funcionar
Hola, necesito por favor ayuda sobre como leer los mails entrantes, extraer el payload y los archivos attach y enviarlos a un py script, solo necesita la union, ya he visto varias opciones pero no he logrado ninguna, no necesito filtrado, todos los mensajes q llegen deben ir al py script…
Hola, Si no se ha creado el buzon MailDir, probar a dejar un espacio al final antes de “/”
Uhhh… I coudn’t create a Maildir structure either. Can you help me out?