Forum Linux.général Coup de main pour la config de maildrop

Posté par  (site web personnel) .
Étiquettes :
0
28
sept.
2008
Bonjour,

Avant de vous exposer ce que je veut faire, je vous expose mon environnement (mail sur serveur Debian Lenny).

Logiciels installés : Postfix (patché avec VDA), courier(authmysql, pop, imap), amavis, clamav et spamassassin.

Je voudrais rajouter maildrop comme MDA afin de pouvoir envoyer les spam dans un dossier spam dans le home de l'utilisateur (et donc consultable par ce dernier).

Mon problème est le suivant : L'authentification via MySQL utilise comme identifiant un champ qui n'a rien à voire avec l'adresse e-mail hors dans le fichier master.cf de postfix je peut utiliser les champs : ${recipient} ${user} ${nexthop} ${sender} (ou bien, l'adresse complète, le préfixe, la dns ou l'expéditeur) mais pas mon champ.

La solution la plus simple pour moi est donc d'écrire un wrapper pour maildrop qui me trouve le login à partir de l'adresse e-mail complète (en gros l'idée serait de récupérer le login via une requête SQL, ensuite de lancer maildrop et d'écrire dans son stdin en lisant le stdin du wrapper).

Bon, jusque là tout va bien (dans la théorie). Maintenant je fait un bête test : je retire un email de mon répertoire new pour le mettre n'importe ou ailleurs puis je lance la commande cat le_mail | le_wrapper.php henry.nicolas@tourneur.be et là je m'attend à ce que maildrop remette l'e-mail dans le répertoire new et ben non.

Le script est disponible ici.

Il me donne un code de retour de valeur 75 et ne m'affiche rien de particulier et surtout le mail n'est pas envoyé dans le répertoire de l'utilisateur.

Alors si quelqu'un peut me filer un coup de main, soit si vous avez un méthode plus facile, soit s'il y a moyen de corriger ce script, ce serait sympathique de m'aider.
  • # pas grand chose

    Posté par  . Évalué à 2.

    j'y connais pas grand chose mais d'apres
    http://fr.php.net/proc_open

    $process = proc_open($command, $descriptorspec, [1]$pipes, $cwd, [2]$env);
    if(is_resource($process)) {
    fwrite($pipes[0], 'php://stdin');//send the email
    fclose($pipes[0]);//close the input
    echo stream_get_contents($pipes[1]);
    fclose($pipes[1]);//maildrop shouldn't display anything
    $return_value = proc_close($process);
    echo 'traceur : '.$return_value;
    exit($return_value);
    }
    mais tu fais un fwrite de ton stdin plutot que fopen

    [1] $pipes doit etre defini

    [2] $env doit contenir les variables d'environnement à passer à la commande sous forme d'un tableau ou NULL s'il faut utiliser l'environnement de PHP
    alors que toi tu fait un env=array() mais tu ne le remplis pas

    bref il semblerait qu'il y ait qques corrections à faire.
    • [^] # Re: pas grand chose

      Posté par  . Évalué à 2.

      [1] $pipes doit etre defini

      La version anglaise dit "pipes : Will be set to an indexed array of file pointers...". En fait, comme c'est une variable passée par référence, elle devrait être déclarée mais ca fonctionne quand même.

      fwrite($pipes[0], 'php://stdin');//send the email
      C'est la chaine 'php://stdin' qui est envoyé sur $pipes[0] et non le contenu de stdin.

      Le code suivant devrait fonctionner :

      if(is_resource($process)) {
      $stdin = fopen("php://stdin", "r");
      while(!feof($stdin)) { // send the email
      $data = fgets($stdin,4096 )));
      fwrite($pipes[0], $data);
      }
      fclose($pipes[0]);//close the input
      ...
      }
      • [^] # Re: pas grand chose

        Posté par  (site web personnel) . Évalué à 1.

        Merci beaucoup.

        Au final ça marche, le script est dispo à la même adresse.
        J'ai juste eu une ou deux erreurs à cause de la config de maildrop mais rien de bien bien grave.

        Encore merci pour l'aide.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.