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

Posté par  (site web personnel) .
Étiquettes : aucune
0
10
oct.
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 :/ )
  • # php.ini

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

    Hello, Dans php.ini, tu as une section genre:
    [mail function]
    ...
    sendmail_path = /mon/chemin/vers/sendmail
    ...
    Est-il configuré correctement ?
    • [^] # Re: php.ini

      Posté par  (site web personnel) . É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... :/

      ce commentaire est sous licence cc by 4 et précédentes

      • [^] # Re: php.ini

        Posté par  (site web personnel) . É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.
        • [^] # Re: php.ini

          Posté par  (site web personnel) . É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

          ce commentaire est sous licence cc by 4 et précédentes

        • [^] # Re: php.ini

          Posté par  . É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  (site web personnel) . É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 !

            ce commentaire est sous licence cc by 4 et précédentes

            • [^] # Re: php.ini

              Posté par  . É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  (site web personnel) . É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 !

        ce commentaire est sous licence cc by 4 et précédentes

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

          Posté par  (site web personnel) . É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.
          • [^] # Re: droits d'exécution sendmail

            Posté par  . É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  . É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  (site web personnel) . É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 ?

              ce commentaire est sous licence cc by 4 et précédentes

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

                Posté par  . É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  (site web personnel) . É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 ?

                  ce commentaire est sous licence cc by 4 et précédentes

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

                    Posté par  (site web personnel) . É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 ?

                    ce commentaire est sous licence cc by 4 et précédentes

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

                      Posté par  . É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  (site web personnel) . É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

                        ce commentaire est sous licence cc by 4 et précédentes

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

                          Posté par  (site web personnel) . É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]

                          ce commentaire est sous licence cc by 4 et précédentes

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

                      Posté par  . É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  . É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  (site web personnel) . É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...

                  ce commentaire est sous licence cc by 4 et précédentes

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

                    Posté par  . É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  . Évalué à 0.

                      > Bonne courage.

                      Misère.
                      Bon courage.
                    • [^] # Re: droits d'exécution sendmail

                      Posté par  (site web personnel) . É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 !

                      ce commentaire est sous licence cc by 4 et précédentes

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

          Posté par  . É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().

Suivre le flux des commentaires

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