Escenarios en plural porque me he encontrado con varios de ellos que he resuelto o estoy en proceso de resolver y a los que no quiero perder la pista.
Cuentas de correo totalmente virtuales
En este dominio resulta que todas las cuentas son virtuales. Están registradas en un directorio LDAP que se emplea para verificar credenciales y para obtener el ID de los usuarios y crear sus buzones.
Los siguientes fragmentos de configuración son para el programa exim4 teniendo como destino final los buzones IMAP gestionados por Dovecot. Las últimas mejoras en exim han considerado que emplear datos procedentes directamente del exterior, de las cabeceras del mensaje, para construir rutas en el sistema no son buena idea. La configuración se ha complicado lo suyo pero al final más o menos empiezo a entender cómo va.
Autentificación
plain_server: driver = plaintext public_name = PLAIN server_prompts = : server_condition = ${if \ ldapauth \ { user="cn=${quote_ldap:$auth2},ou=users,dc=zeine,dc=es" \ pass=${quote:$auth3} \ ldap://LDAP_SERVER\ }{yes}{no}} server_set_id = $auth2
El nombre del usuario y la contraseña se emplean para crear la acreditación con el servidor LDAP y ver si admite o no la conexión.
Enrutado
ldap_users: debug_print = "R: LDAP users lookup for $local_part@$domain" driver = accept domains = zeine.es local_parts = ${lookup ldap {ldap://LDAP_SERVER/LDAP_BASE?cn?sub?(cn=${quote_ldap:$local_part})}} transport = LOCAL_DELIVERY a
La condición para este enrutador es que el dominio sea el local (zeine.es) y se efectúa una búsqueda empleando la parte local del remitente ($local_part) para obtener el campo cn de la entrada que se utilizará en $local_part_data tras la directiva local_parts.
El transporte directo es el predeterminado que en el caso de esta instalación es el envío a dovecot.
Transporte
dovecot_transport: debug_print = "T: dovecot for $local_part@$domain" driver = appendfile user = vmail group = vmail mode = 0700 directory = /srv/mail/${lc:$local_part_data}/ maildir_format = true mode_fail_narrower = false envelope_to_add = true return_path_add = true
En este caso añadimos directamente el archivo al directorio cuya ruta hemos construido con $local_part_data y que ya no se considera emponzoñado (tainted) por lo que puede usarse tranquilamente.
La idea es utilizar mejor una conexión con dovecot vía LMTP o similar para independizar mejor el despacho de correo.