Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Programmation.php : FC4 + php5 + mail() == ?

Posté par Thomas DEBESSE (page perso, ) le 10 octobre 2006
Bonjour, voilà, j'ai un problème très obscure avec la fonction mail() de php5 sous FC4.

j'ai un script simple :





ini_set("display_errors", true);

ini_set("error_reporting", E_ALL);

$Email="foo@bar.com";

$headers = "Content-type: text/\r\nFrom: " . $Email . "\r\n";

if ( mail("monadresse@monserveur.plop" , "essai" , "test", $headers) )

echo "OK\n";

else

echo "NOK\n";





Si j'exécute le code via la ligne de commande : php essai.php

ça me renvoie OK, et en effet, le mail est envoyé, et reçu.



Si j'exécute le code via le serveur apache, avec mod_php donc http://monserveur.com/essai.php , bah ça me renvoie NOK, et en effet, aucune trace du mail nulle part.



De plus, PHP ne me renvoie aucune erreur...

La seule info que j'aie, c'est que la fonction mail n'a pas fait son travail, et qu'elle le sait.



Alors voilà, si vous aviez la moindre idée....

Est ce qu'il est possible que php soit configuré d'une manière pour l'exécution en ligne de commande et d'une autre manière pour apache ?

Est ce que mon problème est du à un tiers autre que Apache et PHP ?



Si vous avez la moindre idée farfelue (ou pas) de chose à vérifier, je suis preneur ! Merci :)



( j'ai peur qu'avec un problème aussi flou, la solution le soit tout autant :/ )

> Lire le message (25 commentaires, moyenne: 1,6).  

Vous avez demandé le commentaire #763457.

php.ini

Posté par nakan (page perso, ) le 10/10/2006 à 19:26. (lien). Évalué à 2.

Hello, Dans php.ini, tu as une section genre:

[mail function]
...
sendmail_path = /mon/chemin/vers/sendmail
...
Est-il configuré correctement ?

--
Au pays des pingouins, les manchots sont empereurs.
  • [^]Re: php.ini

    Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 19:43. (lien). Évalué à 2.

    Merci pour ton aide.
    Cependant, il faut croire que ce soit autrechose :

    # cat /etc/php.ini | grep sendmail_path
    sendmail_path = /usr/sbin/sendmail -t -i
    # which sendmail
    /usr/sbin/sendmail


    Ce sont les paramètres par défaut du php.ini

    De plus je pense que cette partie est correcte, vu que php arrive très bien à causer à sendmail lorsque je l'utilise en ligne de commande...

    Je suis un peu perdu... :/

    --
    † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.
    • [^]Re: php.ini

      Posté par nakan (page perso, ) le 10/10/2006 à 20:06. (lien). Évalué à 2.

      N'y a-t-il pas plusieurs php.ini, un pour la ligne de commande, et un autre pour apache ? Sous mon gentoo:

      rodeo gandalf # find /etc/ -name "php.ini"
      /etc/apache2/conf.old/php.ini
      /etc/php/apache2-php4/php.ini
      /etc/php/cli-php4/php.ini
      /etc/php/cli-php5/php.ini
      /etc/php/apache2-php5/php.ini
      On voit clairement un command line (cli) et un apache2 différents pour php 4 et php 5.

      --
      Au pays des pingouins, les manchots sont empereurs.
      • [^]Re: php.ini

        Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 20:13. (lien). Évalué à 2.

        Sur le système que j'ai sous la main il n'y a à priori qu'un seul php.ini, ou alors il porte un nom différent.

        # find /etc -name "php.ini"
        /etc/php.ini

        --
        † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.

        [^]Re: php.ini

        Posté par clearstream () le 10/10/2006 à 20:15. (lien). Évalué à 0.

        Sous FC6 (ça doit être la même chose pour FC4) il n'y a qu'un fichier d'installé : /etc/php.ini .
        Il y a aussi évidement /etc/httpd/conf.d/php.conf pour la prise en compte par apache de php.

        Ce que peut faire Thomas Debesse, c'est lancer "phpinfo()" pour la version cgi (ligne de commande) et la version mod_php et regarder la différence.

        Pour la version mod_php, il faut parfois renseigner "sendmail_from" dans la configuration.

        • [^]Re: php.ini

          Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 20:57. (lien). Évalué à 2.

          Ce que renvoie phpinfo() via apache et mod_php (oui c'est mod_php, pas php en cgi) :

          Dans le tableau "PHP-Core" :
          Directive => Local Value => Master Value
          sendmail_from => no value => no value
          sendmail_path => /usr/sbin/sendmail -t -i -f ladresse@lesite.com => /usr/sbin/sendmail -t -i

          Dans le tableau "Standard" :
          Path to sendmail => /usr/sbin/sendmail -t -i -f ladresse@lesite.com

          ----------------------------
          Ce que renvoie phpinfo() en ligne de commande :

          Dans la table PHP-Core :
          Directive => Local Value => Master Value
          sendmail_from => no value => no value
          sendmail_path => /usr/sbin/sendmail -t -i => /usr/sbin/sendmail -t -i

          Dans le tableau "Standard" :
          Path to sendmail => /usr/sbin/sendmail -t -i

          ----------------------------
          Il y a une petite différence, je ne sais pas si ça change grand chose, en tout cas, oui, en effet, ça sort pas la même chose que ce soit en cgi ou en module.

          Pour résumer : ça marche en root en cgi, ça ne marche pas en user en cgi.
          Ça ne marche pas en user en module, et en root en module, je ne peux pas essayer. ^^

          La solution doit sûrement se trouver du côté des droits !

          --
          † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.
          • [^]Re: php.ini

            Posté par clearstream () le 10/10/2006 à 21:12. (lien). Évalué à 0.

            > Ce que renvoie phpinfo() via apache et mod_php (oui c'est mod_php, pas php en cgi) :

            Donc tous les sites tournent sous le même compte (probablement le compte apache) et donc ce n'est pas un problème de droit de fichier (puisque apache lit les fichiers).

            > Path to sendmail => /usr/sbin/sendmail -t -i -f ladresse@lesite.com
            > Path to sendmail => /usr/sbin/sendmail -t -i

            Le "-f", c'est sendmail_form.

            > Pour résumer : ça marche en root en cgi, ça ne marche pas en user en cgi.

            Sendmail va utilise "from: root@host" pour root (qui a peut-être le droit d'envoyer du courrier selon la conf de sendmail), et sendmail va utiliser "from: user@host" pour user (qui n'a peut-être pas le droit d'envoyer du courrier selon la conf de sendmail). Car sendmail_form n'est pas renseigné en mode cgi.

            Puisqu'il y a un site qui marche, regardes ce qui est utilisé dans "sendmail_form" (ou l'option "-f" de sendmail).

            > La solution doit sûrement se trouver du côté des droits !

            Quels droits ?
            Droits des fichiers ? Je ne crois pas.

            Je suis assez persuadé que tu as un problème de sendmail_form mal configuré.

      [^]Re: droits d'exécution sendmail

      Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 20:09. (lien). Évalué à 2.

      \o/ Lumière de lucidité \o/ Je me répond à moi même...

      Sur la machine il y a plusieurs sites hébergés dessus (c'est pas la mienne), je suppose qu'apache tourne avec le compte du propriétaire des fichiers...

      Je me suis loggé sous ce compte, et là mon script me renvoie un gros NOK !
      Donc voilà, ce compte n'a pas le droit de causer à sendmail.

      Donc maintenant : comment faire pour que le compte puisse s'entendre avec sendmail ?
      De plus, comme dit plus haut, il y a plusieurs sites hébergés, il faudrait résoudre le problème pour tout le monde, évidemment avec la solution la plus propre et la plus sécurisée possible.

      Pour info, voici les droits, groupe et user de sendmail :

      # ls -l /usr/sbin/sendmail.sendmail
      -rwsr-sr-x 1 root smmsp 779096 mar 22 2006 /usr/sbin/sendmail.sendmail


      (/usr/sbin/sendmail est un symlink vers /etc/alternatives/mta qui est un symlink vers /usr/sbin/sendmail.sendmail , ne me demandez pas pourquoi, c'est pas moi qu'ai fait l'install, ça se trouve c'est même la distrib qu'est comme ça)

      Suffirait-il que j'ajoute les comptes de sites internet au groupe smnp ? *

      Tiens d'ailleurs, qu'est ce que la permission s ? je connais r, w et x, mais s c'est quoi ?

      Merci d'avance !

      * Je préfère être sûr de la solution, que de la trouver en tatonnant, on m'a demandé de trouver la solution au problème, et de fournir une solution à faire valider, je veux pas prendre la liberté de toucher aux systême sans un aval préalable (machine en prod). Donc je suis peut être très demandeur, mais si vous aviez une procédure bien précise à me donner, ça m'aiderai beaucoup !

      Merci beaucoup !

      --
      † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.
      • [^]Re: droits d'exécution sendmail

        Posté par nakan (page perso, ) le 10/10/2006 à 20:17. (lien). Évalué à 2.

        s On POSIX-compliant and UNIX systems, this stands for setuid on execution or setgid on execution permission.

        Oui, en ajoutant un user au groupe, il aura le droit d'executer sendmail en setuid, à voir les permissions, ca devrait marcher.

        --
        Au pays des pingouins, les manchots sont empereurs.
        • [^]Re: droits d'exécution sendmail

          Posté par clearstream () le 10/10/2006 à 20:29. (lien). Évalué à 0.

          > Oui, en ajoutant un user au groupe, il aura le droit d'executer sendmail en setuid, à voir les permissions, ca devrait marcher.

          Je doute beaucoup.
          Je comprend le setgid de sendmail, mais je ne comprend pas pourquoi il y a un setuid sur root.

          Thomas Debesse, pourrais-tu faire "rpm -V sendmail" ?

          • [^]Re: droits d'exécution sendmail

            Posté par clearstream () le 10/10/2006 à 20:33. (lien). Évalué à 1.

            > Thomas Debesse, pourrais-tu faire "rpm -V sendmail" ?

            Regardes aussi ce qu'il y a dans /var/log/maillog.

            [^]Re: droits d'exécution sendmail

            Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 20:34. (lien). Évalué à 2.

            # rpm -V sendmail
            S.5....T c /etc/mail/access
            ..?..... c /etc/mail/domaintable
            S.5....T c /etc/mail/local-host-names
            ..?..... c /etc/mail/mailertable
            S.5....T c /etc/mail/sendmail.cf
            S.5....T c /etc/mail/sendmail.mc
            SM5....T c /etc/mail/submit.cf
            S.5....T c /etc/mail/virtusertable
            S.5....T c /usr/lib/sasl2/Sendmail.conf
            .M...... /usr/sbin/sendmail.sendmail
            S.5....T c /var/log/mail/statistics

            ça peut aider ?

            --
            † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.
            • [^]Re: droits d'exécution sendmail

              Posté par clearstream () le 10/10/2006 à 20:39. (lien). Évalué à 1.

              > .M...... /usr/sbin/sendmail.sendmail

              Je m'en doutais. Selon rpm :

              M le Mode diffère (inclut les permissions et le type du fichier)

              Quelqu'un a changer le mode du fichier. Il y a peut-être de bonnes raisons à ça, ni touche pas à la légère.

              Pour avoir le mode à l'installation, fait rpm -q -l -v sendmail | grep /usr/sbin/sendmail.sendmail

              • [^]Re: droits d'exécution sendmail

                Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 21:02. (lien). Évalué à 2.

                Hum oui, selon l'écho des clients, avant ça marchait, et maintenant ça ne marche plus, donc il y a eu une modification de faite qui a tout cassé.

                La commande que tu m'as donné c'est pour rétablir comme à l'install' par défaut c'est ça ?
                En d'autres termes c'est une commande que je peux proposer comme solution, mais qu'il ne faut pas que je lance moi même ?

                --
                † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.
                • [^]Re: droits d'exécution sendmail

                  Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 21:09. (lien). Évalué à 2.

                  tout d'un coup j'ai l'impression d'avoir dit une bêtise (en même temps je ne suis pas un utilisateur de rpm, moi je ne connais que les tgz de slack et les ebuild de gentoo ^^)

                  Plutôt, ta commande elle me donne (== m'affiche) les permissions originales c'est ça ?
                  Je peux la faire sans crainte ?

                  Et que donc pour rétablir, la solution que je peux proposer serait quelquechose comme :
                  # chmod `ta_commande` /usr/sbin/sendmail.sendmail
                  (ou autre, dans ce même esprit)

                  c'est ça ?

                  --
                  † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.
                  • [^]Re: droits d'exécution sendmail

                    Posté par clearstream () le 10/10/2006 à 21:19. (lien). Évalué à 0.

                    > Je peux la faire sans crainte ?

                    0 conséquence sur le système.

                    > # chmod `ta_commande` /usr/sbin/sendmail.sendmail

                    non, ça ne marchera pas.

                    > > donc il y a eu une modification de faite qui a tout cassé.

                    Oui, mais quelles modifications ? Là est le problème. Il ne faut pas annuler ses modifications sans en connaitre les tenants et aboutissants.

                    As-tu regardé ce qu'il y a dans /var/log/maillog ? CECI EST IMPORTANT !

                    • [^]Re: droits d'exécution sendmail

                      Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 21:37. (lien). Évalué à 2.

                      justement c'est ce que je veins de faire ! :D (voici un extrait)

                      # cat /var/log/maillog | grep adressedetest
                      Oct 10 17:45:02 lamachine sendmail[673]: k9AFj2Lp000673: to=adressedetest@yahoo.fr, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30186, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (k9AFj2J3000674 Message accepted for delivery)
                      Oct 10 17:45:05 lamachine sendmail[676]: k9AFj2J3000674: to=<adressedetest@yahoo.fr>, delay=00:00:03, xdelay=00:00:03, mailer=esmtp, pri=120421, relay=mx1.mail.yahoo.com. [4.79.181.14], dsn=2.0.0, stat=Sent (ok dirdel)
                      Oct 10 17:48:35 lamachine sendmail[786]: k9AFmZ3f000786: to=adressedetest@yahoo.fr, ctladdr=ladresse@monsite.com (48/48), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30186, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=Data format error
                      Oct 10 18:01:04 lamachine sendmail[1139]: k9AG140C001139: to=adressedetest@yahoo.fr, ctladdr=ladresse@monsite.com (48/48), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30186, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=Data format error
                      Oct 10 18:08:22 lamachine sendmail[1364]: k9AG8MKD001364: to=adressedetest@yahoo.fr, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30186, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (k9AG8MXP001365 Message accepted for delivery)
                      Oct 10 18:08:23 lamachine sendmail[1367]: k9AG8MXP001365: to=<adressedetest@yahoo.fr>, delay=00:00:01, xdelay=00:00:01, mailer=esmtp, pri=120421, relay=mx3.mail.yahoo.com. [4.79.181.12], dsn=2.0.0, stat=Sent (ok dirdel)
                      Oct 10 18:09:15 lamachine sendmail[1395]: k9AG9F57001395: to=adressedetest@yahoo.fr, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30192, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (k9AG9Fiq001396 Message accepted for delivery)
                      Oct 10 18:09:19 lamachine sendmail[1398]: k9AG9Fiq001396: to=<adressedetest@yahoo.fr>, delay=00:00:04, xdelay=00:00:04, mailer=esmtp, pri=120427, relay=mx3.mail.yahoo.com. [4.79.181.12], dsn=2.0.0, stat=Sent (ok dirdel)
                      Oct 10 18:10:00 lamachine sendmail[1427]: k9AGA0U7001427: to=adressedetest@yahoo.fr, ctladdr=ladresse@monsite.com (48/48), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30192, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=Data format error
                      Oct 10 18:23:20 lamachine sendmail[1855]: k9AGNJSN001855: to=adressedetest@yahoo.fr, ctladdr=ladresse@monsite.com (48/48), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=30192, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=Data format error


                      sachant que ladresse@monsite.com est de la forme proprietaireDuCompteDansLeSystemeDeFichier@lenomdusite.com

                      On remarque que ça marche lorsque ctladdr=root

                      Je ne m'y connais pas vraiment en sendmail, mais à priori, à ce que je vois, c'est le compte de celui qui envoie le mail, je ne sais pas si ça apporte grand chose à part une confirmation que seul root arrive à envoyer un mail, ce qu'on sait déjà.

                      Quoique, \o/ Lumière \o/ , Ça marche pas en user, mais le user il y accède quand même.... donc il arrive à causer à sendmail quand même il faut croire...

                      Sinon, comparaison des droits originaux et actuels :
                      # rpm -q -l -v sendmail | grep /usr/sbin/sendmail.sendmail && ls -l /usr/sbin/sendmail.sendmail
                      -rwxr-sr-x 1 root smmsp 779096 mar 22 2006 /usr/sbin/sendmail.sendmail
                      -rwsr-sr-x 1 root smmsp 779096 mar 22 2006 /usr/sbin/sendmail.sendmail

                      --
                      † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.
                      • [^]Re: droits d'exécution sendmail

                        Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 22:03. (lien). Évalué à 2.

                        j'ajoute ceci :

                        en user en cgi j'obtiens cela dans le maillog :
                        Oct 10 23:58:12 lamachine sendmail[8836]: k9ALwCT5008836: to=adressedetest@yahoo.fr, ctladdr=NomDuCompte (517/512), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30083, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0, stat=Data format error

                        Pour récapituler les différences visibles dans maillog :

                        en module en user, ctladdr=user@lesite.com [marche pas]
                        en cgi en user, ctladdr=user [marche pas]
                        en cgi en root, ctladdr=root [marche]

                        --
                        † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.

                    [^]Re: droits d'exécution sendmail

                    Posté par clearstream () le 10/10/2006 à 21:23. (lien). Évalué à 0.

                    > # chmod `ta_commande` /usr/sbin/sendmail.sendmail

                    Un "chmod u-s /usr/sbin/sendmail.sendmail" devrait faire l'affaire.
                    Pour annuler, utiliser un "chmod u+s /usr/sbin/sendmail.sendmail".

              [^]Re: droits d'exécution sendmail

              Posté par clearstream () le 10/10/2006 à 21:34. (lien). Évalué à 0.

              T'as beaucoup de /etc/mail modifié. Ça peut-être normal, ce sont des fichiers de configuration.

              Tu pourrais voir ce que ça donne avec les fichiers d'origine.
              Voilà une procédure possible.
              [root@here ~]# cd /tmp/
              [root@here tmp]# mkdir sendmail
              [root@here tmp]# cd sendmail
              [root@here sendmail]# rpm2cpio /var/fedora/core/i386/sendmail-8.13.8-2.i386.rpm | cpio -i -m -d
              2578 blocks
              [root@here sendmail]# mv etc/mail /etc/mail.default
              [root@here sendmail]# cd /etc
              [root@here etc]# mv mail mail.bak
              [root@here etc]# ln -s mail.default mail
              [root@here etc]# /etc/init.d/sendmail restart
              Arrêt de sm-client : [ OK ]
              Arrêt de sendmail : [ OK ]
              Démarrage de sendmail : [ OK ]
              Démarrage de sm-client : [ OK ]
              [root@here etc]# rm -r -f /tmp/sendmail
              [root@here etc]#


              Si ça marche avec la configuration par défaut, alors tu as fort probablement un problème de configuration de sendmail.
              Désolé, mais je ne connais pas sendmail.
              Pour revenir à la configuration d'avant :
              [root@here ~]# cd /etc
              [root@here etc]# rm mail
              rm: détruire lien symbolique `mail'? y
              [root@here etc]# mv mail.bak mail
              [root@here etc]# rm -r -f mail.default
              [root@here etc]# /etc/init.d/sendmail restart
              Arrêt de sm-client : [ OK ]
              Arrêt de sendmail : [ OK ]
              Démarrage de sendmail : [ OK ]
              Démarrage de sm-client : [ OK ]
              [root@here etc]#

              • [^]Re: droits d'exécution sendmail

                Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 21:43. (lien). Évalué à 2.

                Malheureusement, une manip aussi complexe qui touche autant le systême (et en plus qui interrompt un service), je ne peux pas me permettre de mon propre avis...

                --
                † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.
                • [^]Re: droits d'exécution sendmail

                  Posté par clearstream () le 10/10/2006 à 22:04. (lien). Évalué à 0.

                  > Malheureusement, une manip aussi complexe qui touche autant le systême

                  Le système est à peine touché. Tout ce qu'il y a sur le système n'est pas modifié ou supprimé. Il y a que le répertoire /etc/mail qui est renomé /etc/mail.bak.

                  > je ne peux pas me permettre de mon propre avis...

                  C'est toi le reponsable de tes actes. Fais selon ta conscience.

                  Je ne peux plus d'aider, je n'ai plus d'idée. Bonne courage.

                  • [^]Re: droits d'exécution sendmail

                    Posté par clearstream () le 10/10/2006 à 22:10. (lien). Évalué à 0.

                    > Bonne courage.

                    Misère.
                    Bon courage.

                    [^]Re: droits d'exécution sendmail

                    Posté par Thomas DEBESSE (page perso, ) le 10/10/2006 à 22:15. (lien). Évalué à 2.

                    ok, bah j'en parlerai avant.

                    Merci beaucoup en tout cas de tes conseil et de ta patience.
                    Sinon, j'ai fait la manip du chmod u-s, j'ai fais un essai, puis chmod u+s pour restaurer après, et en effet ça n'a rien changé.

                    Menfin, j'ai déjà bien avancé dans ma recherche ! Merci !

                    --
                    † In te confirmátus sum ex útero : de ventre matris meæ tu es protéctor meus.

        [^]Re: droits d'exécution sendmail

        Posté par clearstream () le 10/10/2006 à 20:23. (lien). Évalué à 0.

        > je suppose qu'apache tourne avec le compte du propriétaire des fichiers...

        Donc, tu utilises fort probablement le cgi de php et non mod_php (ou peut-être mod_suphp).
        Il se peut aussi que la configuration php change par site (on peut avoir un php.ini spécifique).
        Donc, j'"insiste" à nouveau, regardes ce que te donnes la sortie de phpinfo().