<!-- review: finished -->

<a id="mail-core"></a>

# Módulo de Correo

El módulo principal de correo implementa la funcionalidad básica de un servidor proxy de correo:
esto incluye soporte para los protocolos SMTP, IMAP y POP3, configuración de
bloques de servidor, enrutamiento de solicitudes de correo, autenticación de usuarios y soporte SSL/TLS para
asegurar las conexiones de correo.

Los otros módulos en esta sección amplían esta funcionalidad, permitiéndote
configurar y optimizar de manera flexible el servidor de correo para varios escenarios y
requisitos.

Cuando se [compila desde el código fuente](https://es.angie.software//angie/docs/installation/sourcebuild.md#sourcebuild),
este módulo no se compila de forma predeterminada;
debe habilitarse con la
[opción de compilación](https://es.angie.software//angie/docs/installation/sourcebuild.md#configure) `--with-mail`.
En paquetes e imágenes de [nuestros repositorios](https://es.angie.software//angie/docs/installation/index.md#install-packages),
el módulo está incluido en la compilación.

<a id="configuration-example-52"></a>

## Ejemplo de configuración

```nginx
worker_processes auto;

error_log /var/log/angie/error.log info;

events {
    worker_connections  1024;
}

mail {
    server_name       mail.example.com;
    auth_http         localhost:9000/cgi-bin/auth.cgi;

    imap_capabilities IMAP4rev1 UIDPLUS IDLE LITERAL+ QUOTA;

    pop3_auth         plain apop cram-md5;
    pop3_capabilities LAST TOP USER PIPELINING UIDL;

    smtp_auth         login plain cram-md5;
    smtp_capabilities "SIZE 10485760" ENHANCEDSTATUSCODES 8BITMIME DSN;
    xclient           off;

    server {
        listen   25;
        protocol smtp;
    }
    server {
        listen   110;
        protocol pop3;
        proxy_pass_error_message on;
    }
    server {
        listen   143;
        protocol imap;
    }
    server {
        listen   587;
        protocol smtp;
    }
}
```

<a id="directives-56"></a>

## Directivas

<a id="index-0"></a>

<a id="m-listen"></a>

### listen

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `listen` dirección[:puerto] [`ssl`] [`proxy_protocol`] [`backlog=`número] [`rcvbuf=`tamaño] [`sndbuf=`tamaño] [`bind`] [`ipv6only=``on` | `off`] [`reuseport`] [`so_keepalive=`on|off|[`keepidle`]:[`keepintvl`]:[`keepcnt`]];   |
|--------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Predeterminado                                                                             | —                                                                                                                                                                                                                                |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | server                                                                                                                                                                                                                           |

Establece la dirección y el puerto para el socket en el que el servidor aceptará conexiones. Es posible especificar solo el puerto, de modo que Angie escuche en todas las interfaces IPv4 disponibles (y IPv6, si está habilitado). La dirección también puede ser un nombre de host, por ejemplo:

```nginx
listen 127.0.0.1:110;
listen *:110;
listen 110;     # equivalente a *:110
listen localhost:110;
```

Las direcciones IPv6 se especifican entre corchetes:

```nginx
listen [::1]:110;
listen [::]:110;
```

Los sockets de dominio UNIX se especifican con el prefijo `unix:`:

```nginx
listen unix:/var/run/angie.sock;
```

#### NOTE
Los diferentes servidores deben escuchar en distintos pares dirección:puerto.

| `ssl`            | especifica que todas las conexiones aceptadas en este puerto funcionen en modo SSL.                                                                                                                                                                                                                                                                                                                                      |
|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `proxy_protocol` | especifica que todas las conexiones aceptadas en este puerto usen<br/>el protocolo PROXY. La información obtenida se pasa al<br/>[servidor de autenticación](https://es.angie.software//angie/docs/configuration/modules/mail/mail_auth_http.md#mail-auth-http) y puede usarse para<br/>[cambiar la dirección del cliente](https://es.angie.software//angie/docs/configuration/modules/mail/mail_realip.md#mail-realip). |

La directiva `listen` puede tener varios parámetros adicionales específicos para llamadas al sistema relacionadas con sockets.

| `backlog=`número      | establece el parámetro backlog en la llamada `listen()` que limita la<br/>longitud máxima de la cola de conexiones pendientes. Por defecto,<br/>backlog se establece en -1 en FreeBSD, DragonFly BSD y macOS, y<br/>en 511 en otras plataformas.                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `rcvbuf=`tamaño       | establece el tamaño del buffer de recepción (la opción SO_RCVBUF) para el socket de escucha.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `sndbuf=`tamaño       | establece el tamaño del buffer de envío (la opción SO_SNDBUF) para el socket de escucha.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `bind`                | indica hacer una llamada `bind()` separada para un<br/>par dirección:puerto dado. Si existen varias<br/>directivas `listen` con el mismo puerto pero diferentes direcciones,<br/>y una de las directivas `listen` escucha en todas las direcciones para el<br/>puerto dado (\*:puerto), Angie solo hará `bind()` a \*:puerto.<br/>Debe tenerse en cuenta que en este caso se ejecutará la llamada al sistema<br/>`getsockname()` para determinar la dirección que aceptó la conexión.<br/>Si se utilizan los parámetros backlog, rcvbuf, sndbuf, ipv6only,<br/>reuseport o so_keepalive, entonces para un<br/>par dirección:puerto dado siempre se realizará una llamada `bind()` separada. |
| `ipv6only=on` | `off` | determina (mediante la opción de socket IPV6_V6ONLY) si un socket IPv6 que escucha en una dirección comodín [::] aceptará solo conexiones IPv6 o tanto IPv6 como IPv4. Este parámetro está activado por defecto. Solo puede configurarse una vez al inicio.                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `multipath`           | habilita la aceptación de conexiones a través de [Multipath TCP](https://en.wikipedia.org/wiki/Multipath_TCP) (MPTCP),<br/>compatible desde la versión 5.6 del kernel de Linux.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |

`so_keepalive=on` | `off` | [`keepidle`]:[`keepintvl`]:[`keepcnt`]

Configura el comportamiento "TCP keepalive" para el socket de escucha.

| `''`   | si se omite este parámetro, se aplicarán los valores predeterminados del sistema operativo para el socket   |
|--------|-------------------------------------------------------------------------------------------------------------|
| `on`   | la opción SO_KEEPALIVE se activa para el socket                                                             |
| `off`  | la opción SO_KEEPALIVE se desactiva para el socket                                                          |

Algunos sistemas operativos permiten configurar parámetros de TCP keepalive por
socket mediante las opciones de socket `TCP_KEEPIDLE`,
`TCP_KEEPINTVL` y `TCP_KEEPCNT`. En dichos sistemas, pueden
configurarse mediante los parámetros `keepidle`, `keepintvl` y
`keepcnt`. Se pueden omitir uno o dos parámetros, en cuyo caso se
aplicarán los valores predeterminados del sistema para la opción de socket
correspondiente.

Por ejemplo:

```nginx
so_keepalive=30m::10
```

establecerá el tiempo de inactividad (`TCP_KEEPIDLE`) en 30 minutos,
dejará el intervalo de sondeo (`TCP_KEEPINTVL`) en su valor predeterminado
del sistema y establecerá el número de sondeos (`TCP_KEEPCNT`) en 10
sondeos.

Los diferentes servidores deben escuchar en distintos pares dirección:puerto.

<a id="index-1"></a>

<a id="m-mail"></a>

### mail

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `mail` { ... }   |
|--------------------------------------------------------------------------------------------|------------------|
| Predeterminado                                                                             | —                |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | main             |

Proporciona el contexto del archivo de configuración en el que se especifican las directivas del servidor de correo.

<a id="index-2"></a>

<a id="max-commands"></a>

### max_commands

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `max_commands` número;   |
|--------------------------------------------------------------------------------------------|--------------------------|
| Predeterminado                                                                             | `max_commands 1000;`     |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | mail, server             |

Establece el número máximo de comandos emitidos durante la autenticación
para mejorar la protección contra ataques DoS.

<a id="index-3"></a>

<a id="m-max-errors"></a>

### max_errors

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `max_errors` número;   |
|--------------------------------------------------------------------------------------------|------------------------|
| Predeterminado                                                                             | `max_errors 5;`        |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | mail, server           |

Establece el número de errores de protocolo tras los cuales se cierra la conexión.

<a id="index-4"></a>

<a id="m-protocol"></a>

### protocol

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `protocol` imap | pop3 | smtp;   |
|--------------------------------------------------------------------------------------------|----------------------------------|
| Predeterminado                                                                             | —                                |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | server                           |

Establece el protocolo para un servidor proxy. Los protocolos admitidos son [IMAP](https://es.angie.software//angie/docs/configuration/modules/mail/mail_imap.md#mail-imap), [POP3](https://es.angie.software//angie/docs/configuration/modules/mail/mail_pop3.md#mail-pop3) y [SMTP](https://es.angie.software//angie/docs/configuration/modules/mail/mail_smtp.md#mail-smtp).

Si la directiva no se especifica, el protocolo puede detectarse automáticamente en función del puerto bien conocido indicado en la directiva `listen`:

```console
imap: 143, 993
pop3: 110, 995
smtp: 25, 587, 465
```

Cuando se [compila desde el código fuente](https://es.angie.software//angie/docs/installation/sourcebuild.md#sourcebuild), pueden deshabilitarse los protocolos innecesarios usando las [opciones de compilación](https://es.angie.software//angie/docs/installation/sourcebuild.md#configure)
`--without-mail_imap_module`, `--without-mail_pop3_module` y
`--without-mail_smtp_module`.

<a id="index-5"></a>

<a id="m-resolver"></a>

### resolver

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `resolver` dirección ... [`valid=`tiempo] [`ipv4=``on` | `off`] [`ipv6=``on` | `off`] [`status_zone=`zona] | `off`;   |
|--------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|
| Predeterminado                                                                             | `resolver off;`                                                                                                       |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | mail, server                                                                                                          |

Configura los servidores de nombres usados para obtener el nombre de host del cliente y pasarlo al [servidor de autenticación](https://es.angie.software//angie/docs/configuration/modules/mail/mail_auth_http.md#mail-auth-http), así como en el comando [XCLIENT](https://es.angie.software//angie/docs/configuration/modules/mail/mail_proxy.md#m-xclient) al hacer proxy de SMTP. Por ejemplo:

```nginx
resolver 127.0.0.53 [::1]:5353;
```

El valor especial `off` deshabilita la resolución del nombre de host del cliente y cancela el valor heredado de la directiva.

La dirección puede especificarse como un nombre de dominio o una dirección IP, con un puerto opcional. Si no se especifica el puerto, se usa el puerto 53. Los servidores de nombres se consultan de forma round-robin.

#### NOTE
Se recomienda usar un resolver local de confianza, como `127.0.0.53`
(systemd-resolved), en lugar de uno público (p.ej., `8.8.8.8`). Los
resolvers públicos exponen las consultas DNS a terceros y aumentan el
riesgo de ataques de envenenamiento de caché.

#### NOTE
El valor de la directiva es heredado por los bloques anidados
y puede ser sobrescrito en ellos si es necesario.
Dentro de un único bloque, la directiva solo puede especificarse una vez.
Si se repite, la última definición tiene efecto.

Por defecto, Angie almacena en caché las respuestas usando el valor TTL de la respuesta. Si
la directiva `resolver` no se especifica y no se realizan consultas DNS dinámicas
(por ejemplo, al usar nombres fijos en [Proxy](https://es.angie.software//angie/docs/configuration/modules/mail/mail_proxy.md#mail-proxy) sin
variables), no es necesario especificar un resolver: los nombres se resolverán al inicio
usando el resolver del sistema. El parámetro opcional `valid` permite
sobrescribir esto:

| `valid`   | parámetro *opcional* que permite sobrescribir la validez de las entradas en caché   |
|-----------|-------------------------------------------------------------------------------------|
```nginx
resolver 127.0.0.53 [::1]:5353 valid=30s;
```

De forma predeterminada, Angie buscará tanto direcciones IPv4 como IPv6 al resolver.

| `ipv4=off`    | deshabilita la búsqueda de direcciones IPv4                                                                                                  |
|---------------|----------------------------------------------------------------------------------------------------------------------------------------------|
| `ipv6=off`    | deshabilita la búsqueda de direcciones IPv6                                                                                                  |
| `status_zone` | parámetro *opcional* que habilita la recopilación de información sobre las solicitudes y respuestas del servidor DNS en la zona especificada |

<a id="index-6"></a>

<a id="m-resolver-timeout"></a>

### resolver_timeout

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `resolver_timeout` tiempo;   |
|--------------------------------------------------------------------------------------------|------------------------------|
| Predeterminado                                                                             | `resolver_timeout 30s;`      |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | mail, server                 |

Establece un tiempo de espera para la resolución de nombres, por ejemplo:

```nginx
resolver_timeout 5s;
```

<a id="index-7"></a>

<a id="m-server"></a>

### server

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `server` { ... }   |
|--------------------------------------------------------------------------------------------|--------------------|
| Predeterminado                                                                             | —                  |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | mail               |

Establece la configuración de un servidor.

<a id="index-8"></a>

<a id="m-server-name"></a>

### server_name

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `server_name` nombre;   |
|--------------------------------------------------------------------------------------------|-------------------------|
| Predeterminado                                                                             | `server_name hostname`; |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | mail, server            |

Establece el nombre del servidor que se usa:

* en el saludo inicial del servidor POP3/SMTP;
* en la sal durante la autenticación SASL CRAM-MD5;
* en el comando EHLO al conectarse al backend SMTP, si el envío del comando [XCLIENT](https://es.angie.software//angie/docs/configuration/modules/mail/mail_proxy.md#m-xclient) está habilitado.

Si la directiva no se especifica, se usará el hostname de la máquina.

<a id="index-9"></a>

<a id="m-timeout"></a>

### timeout

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `timeout` tiempo;   |
|--------------------------------------------------------------------------------------------|---------------------|
| Predeterminado                                                                             | `timeout 60s;`      |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | mail, server        |

Establece el tiempo de espera que se utiliza antes de iniciar el proxy hacia el backend.
