Tâche #35491
Scénario #35067: Problème d'envoi de mail sur Zéphir
Étude
100%
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