• # Solution retenue au final

    Posté par . En réponse au message Exim : Serveur mail secondaire "cache". Évalué à 2.

    Bon finalement, la solution que j'envisage dans le post initial fonctionne parce que quand exim met en "retry" un message au niveau d'un router ou d'un transport, ce message ne repasse pas dans la chaine complète de routers. Il reprend là dans le router/transport où il s'était arrêté (ce qui est assez logique au final).

    Si jamais y'en a que ça intéresse (ou toi lecteur qui verra cette page au hasard d'une requête google dans un an :-D), voilà les détails (intéressants de la configuration).
    Pour chaque domaine dont on veut être le MX secondaire:
    - On crée (éventuellement) un fichier d'alias dans /etc/exim/domains_secondary_aliases/$nom_domaine (Peut juste être une copie du /etc/aliases du MX principal qui gère le domaine)
    - On crée un dossier dans /var/mail/domains_secondary/$nom_domaine, puis un sous-dossier par utilisateur (dans le dossier là). Toutes les boites mails sont la propriété de mail:mail
    - Il reste a configurer le serveur POP/IMAP pour authentifier les utilisateurs sur un fichier de mots de passe/base de données.

    Voici les routers exim utilisés :
    Ces routers sont a placer AVANT celui qui gère la redirection vers un serveur SMTP externe (dnslookup en général)

    Le premier gère les alias pour chaque domaine. (ex: toto_la_follette@mondomaine.net est un alias pour thomas@mondomaine.net). On utilise un routeur redirect avec pas mal de restrictions : on veut juste autoriser la possibilité de faire des alias sur les adresses mail (pas de filtres, pas de redirection directe vers un pipe, pas de livraison directe) pour éviter qu'il y ait des conflits entre les fichiers d'alias de tous les domaines.

    domains_secondary_aliases:
    ## Address rewrite no need to use unseen
    driver = redirect
    allow_defer
    allow_fail
    no_allow_filter
    domains = dsearch;/etc/exim/domains_secondary_aliases
    debug_print = "R: domains_secondary_aliases for $local_part@$domain found: ${expand:${lookup{$local_part}lsearch*@{/etc/exim/domains_secondary_aliases/$domain}}}"
    data = ${expand:${lookup{$local_part}lsearch*@{/etc/exim/domains_secondary_aliases/$domain}}}
    retry_use_local_part
    qualify_preserve_domain
    # You want to keep the same not to mix up different domains
    forbid_file

    Le second router correspond a celui qui délivre effectivement une copie du mail dans /var/mail/mondomaine.tld/mon_utilisateur. La seule option importante de ce router est unseen qui permet de faire en sorte que le message ne sorte pas de la chaine de routers à ce moment et reste dans la file d'attente pour éventuellement être transmis au MX primaire.

    domains_secondary_domains_cache:
    unseen
    # Keep the message in spool, we also want to redirect it to the primary MX
    driver = redirect
    allow_defer
    allow_fail
    domains = dsearch;/var/mail/domains_secondary
    debug_print = "R: domains_secondary_domains_cache for $local_part@$domain found: /var/mail/domains_secondary/$domain/$local_part/"
    data = /var/mail/domains_secondary/$domain/$local_part/
    directory_transport = address_directory
    pipe_transport = address_pipe
    file_transport = address_file
    user = mail
    group = mail


    Du coup, si jamais y'en a que ça intéresse, je peux fournir un mini-service de MX secondaire (rajouter un domaine prend 10 secondes).