Projet

Général

Profil

Tâche #35491

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

Étude

Ajouté par Benjamin Bohard il y a 10 mois. Mis à jour il y a 10 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Début:
01/10/2022
Echéance:
% réalisé:

100%

Restant à faire (heures):
0.0

Historique

#1 Mis à jour par Benjamin Bohard il y a 10 mois

  • Statut changé de Nouveau à 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 Mis à jour par Benjamin Bohard il y a 10 mois

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 Mis à jour par Benjamin Bohard il y a 10 mois

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 Mis à jour par Daniel Dehennin il y a 10 mois

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 Mis à jour par Benjamin Bohard il y a 10 mois

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 Mis à jour par Benjamin Bohard il y a 10 mois

  • Statut changé de En cours à À valider
  • % réalisé changé de 0 à 100

#7 Mis à jour par Laurent Gourvenec il y a 10 mois

  • Statut changé de À valider à Résolu

#8 Mis à jour par Joël Cuissinat il y a 10 mois

  • Statut changé de Résolu à Fermé
  • Restant à faire (heures) mis à 0.0

Formats disponibles : Atom PDF