Project

General

Profile

Tâche #35491

Scénario #35067: Problème d'envoi de mail sur Zéphir

Étude

Added by Benjamin Bohard 11 months ago. Updated 11 months ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Start date:
10/01/2022
Due date:
% Done:

100%

Remaining (hours):
0.0

History

#1 Updated by Benjamin Bohard 11 months ago

  • Status changed from Nouveau to En cours

La fonction _sendmail dans uucp_rpc.py utilise la configuration zéphir pour déterminer comment ouvrir une connexion au serveur SMTP à l’aide de smtplib.
Dans la configuration, le serveur smtp est "localhost" et ne semble pas modifier par ailleurs. Dans ce cas, on pourrait utiliser la fonction pyeole.sendmail.send_mail plutôt que smtplib pour envoyer le mail. Pour parer l’éventualité où le serveur pourrait être configuré autrement qu’avec "localhost", on peut préserver le comportement actuel par défaut.

Au passage, il faut corriger pyeole.sendmail.send_mail pour ajouter la date dans les en-têtes.
La commande sendmail se charge d’ajouter l’en-tête Date lors de l’envoi du courrier.

#2 Updated by Benjamin Bohard 11 months ago

L’autre alternative consisterait à ajouter une ACL au début de la liste, acceptant l’envoi de system_mail_from vers une liste de courriel définie par extraction des utilisateurs du zéphir, par exemple.

Cette règle doit être évaluée avant les règles

    deny
        message  = Local domain sender must be authenticated
        !authenticated = *
        sender_domains = +local_domains

qui implique de s’authentifier,

    deny
        message     = Relay not permitted
        !domains    = +local_domains : +relay_to_domains

qui contraint l’adresse mail du destinataire, à moins de renseigner les domaines vers qui relayer (mais les adresses des destinataires utilisées ici peuvent être hébergées par des domaines grand public)

Une dernière ACL est associée au message « Relay not permitted » mais elle ne devrait pas s’appliquer dans le cas présent puisque l’émetteur du courriel correspond bien à la variable system_mail_from.

    deny
        message     = Relay not permitted
        domains     = +private_domain
        !senders    = SYSTEM_MAIL_FROM
        condition   = ${if !match_domain{$sender_address_domain}{ +private_granted }}

Le cas particulier où system_mail_from est une adresse d’un domaine local ou dont le relai est autorisé, vers un destinataire hors domaine local est déjà pris en compte

    accept
        hosts          = : +relay_from_hosts
        sender_domains = +local_domains
    !domains       = +local_domains

#3 Updated by Benjamin Bohard 11 months ago

Une acl de ce type en seconde position pourrait faire l’affaire a priori

    accept
        senders = SYSTEM_MAIL_FROM
        recipients = ${if exists{CONF_DIR/whitelist-recipients}\
                                {CONF_DIR/whitelist-recipients}{}}

Avec création du fichier whitelist-recipients contenant le retour de zephirListUsers (remis en forme).

#4 Updated by Daniel Dehennin 11 months ago

La modification du code pour utiliser la lib pyeole me semble avoir moins d’impact non ?

Les ACLs exim4 doivent fonctionner correctement pour tous les autres modules dans tous les autres cas.

#5 Updated by Benjamin Bohard 11 months ago

Il s’agit davantage d’utiliser la fonction définie dans pyeole que de la modifier mais je suis également d’accord pour dire que le risque de régression est moins élevé en modifiant l’appel côté zéphir plutôt qu’en insérant une nouvelle ACL, à moins de vérifier à nouveau les cas d’usage.

#6 Updated by Benjamin Bohard 11 months ago

  • Status changed from En cours to À valider
  • % Done changed from 0 to 100

#7 Updated by Laurent Gourvenec 11 months ago

  • Status changed from À valider to Résolu

#8 Updated by Joël Cuissinat 11 months ago

  • Status changed from Résolu to Fermé
  • Remaining (hours) set to 0.0

Also available in: Atom PDF