Version complète: sur le forum Webmaster Hub : Exectuer un script à la réception d'1 mail
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net
Bolbo
Bonjour,

Je ne sais pas si c'est le meilleur endroit pour poster ce message, je m'excuse si ce n'est pas le cas.

J'esssaie actuellement de créer un fichier .forward qui s'éxécute à la réception d'un mail.

Le but: Recevoir des données par mail à l'adresse demo @ example.com et lors de la réception du mail, éxécuter un script qui traitera les données (enregistrement de la base de données, etc ...).

J'ai donc créé la boite mail , à la home du nouvel utilisateur ainsi créé j'ai mis un fichier .forward avec les droits 777.
Contenu du .forward :
CODE
|/home/monlogin/public_html/forward/script.php


==> Cette ligne devrait lancer le script script.php à la réception d'un mail à demo @ example.com.

Contenu de script.php :
CODE
#!/usr/bin/php
<?php
$to="destinataire de test<moi @ example.com>";
mail($to,"sujet","mail recu","From:Nom de expediteur<moi @ example.com>\n");
?>


Script.php est également en chmod 777.

Le problème, lorsque j'envoie un mail à demo @ example.com, le script ne se lance pas, je ne suis meme pas sur qu'il soit appelé.

Quelqu'un aurait une idée ?

Merci d'avance,

Bolbo
Bolbo
Bonjour,

CITATION("Gilbert")
il faut que l'utilisateur de mail (root ou spécifique) ait les droits
d'éxécution sur le script.


Concernant les droits je pensais à ca également, mais j'ai mis les deux en 777, donc tout le monde devrait pouvoir l'éxécuter en théorie non ?


Bolbo
Dan
Bonjour et bienvenue sur le Hub !

As-tu essayé de lancer ce script en ligne de commande pour t'assurer qu'il tourne correctement ?
Bolbo
CITATION(Dan @ jeudi 30 mars 2006, 17h22)
Bonjour et bienvenue sur le Hub !

As-tu essayé de lancer ce script en ligne de commande pour t'assurer qu'il tourne correctement ?
*


Bonjour,

Oui, lorsque j'execute le script php
CODE
php script.php
, je recois bien mon mail.
A mon avis c'est le .forward qui ne renvoie pas vers mon script, mais je ne vois pas pourquoi.

sad.gif

Bolbo
Dan
Tu utilises quoi ? Sendmail, Qmail/Vpopmail, autre ?
Bolbo
CITATION(Dan @ jeudi 30 mars 2006, 17h29)
Tu utilises quoi ? Sendmail, Qmail/Vpopmail, autre ?
*


Sendmail il me semble, envoyé avec la fonction mail de php
f_trt
CITATION(Bolbo @ jeudi 30 mars 2006, 16h28)
Bonjour,

Oui, lorsque j'execute le script php
CODE
php script.php
, je recois bien mon mail.
A mon avis c'est le .forward qui ne renvoie pas vers mon script, mais je ne vois pas pourquoi.

sad.gif

Bolbo
*


Tu donnes toi même la réponse tu lances
php script.php
Alors que .forward lance
/home/monlogin/public_html/forward/script.php

Il faut que tu arrives a lancer par php ton script

A+
Bolbo
CITATION(f_trt @ vendredi 31 mars 2006, 11h41)
Tu donnes toi même la réponse tu lances
php script.php
Alors que .forward lance
/home/monlogin/public_html/forward/script.php

Il faut que tu arrives a lancer par php ton script

A+
*


Bonjour,

En fait lorsque je fais:
CODE
php /home/monlogin/public_html/forward/script.php
en SSH, le mail est envoyé sans problème.
Tu saurais comment je peux demander justement dans le .forward de lancer le script en php?

MErci d'avance,

Bolbo
Bolbo
Voila, j'ai eu la solution avec un peu d'aide.
En fait le fichier .forward devait contenir :
CODE
"|/usr/bin/php -q /home/monlogin/public_html/forward/script.php"
(avec les guillemets).

Et le fichier script.php:
CODE
<?php
$to="destinataire de test<moi @ example.com>";
mail($to,"sujet","mail recu","From:Nom de expediteur<moi @ example.com>\n");
?>

(sans la ligne #!/usr/bin/php).

Maintenant il me reste plus qu'à "jouer" avec stdin pour récupérer le texte du mail et de le traiter dans ma base de données.
Je mettrais à jour ce post avec le code de traitement, si ca intéresse quelqu'un.

Bolbo
Bolbo
Donc voila, c'est la version finale du script, avec le forward du mail vers un script et la récupération du contenu du mail avec stdin.
Après, on fait ce qu'on veut du contenu, evoi par mail, insertion dans la base de données, ...

.forward
CODE
"|/usr/bin/php -q /home/monlogin/public_html/forward/script.php"
avec les guillemets

script.php
CODE
<?php
$fd = fopen("php://stdin", "r");
$resultat = "";
while (!feof($fd))
$resultat .= fread($fd, 1024);
fclose($fd);

//on convertit le quoted-printable en 8 bit(pour les accents et =E9
//http://fr3.php.net/manual/en/function.quoted-printable-decode.php
$resultat=quoted_printable_decode($resultat);


?>



Voila voila, si ca peut aider qq1 smile.gif
Merci à ceux qui m'ont aidé et répondu à ce post.

Bolbo
glibre
tres interessant.

le tout est de pouvoir "recuperer" les données utiles de l'entete, comme les champs from, to et corps... mais comment, je planche tongue.gif
Bolbo
CITATION(glibre @ vendredi 31 mars 2006, 15h04)
le tout est de pouvoir "recuperer" les données utiles de l'entete, comme les champs from, to et corps... mais comment, je planche tongue.gif
*



Bonjour Glibre, je suis dessus actuellement, mais le principe est simple.
Une fois que tu as récupéré le contenu de ton mail avec stdin, tu obtiens le mail et ses entêtes

CODE
From ***@example.com  Fri Mar 31 13:06:14 2006
Return-Path: <***@example.com>
X-Original-To: ***@example.com
Delivered-To: ***@example.com
Received: from smtp.***.net ()
    by *** (Postfix) with ESMTP id **
    for <demo_AT_***.org>; Fri, 31 Mar 2006 13:06:14 +0200 (CEST)
Received: from Makalu (*** [IP])
    by smtp.***.net (Postfix) with ESMTP id **
    for <expediteur_AT_example.com>; Fri, 31 Mar 2006 13:06:14 +0200 (CEST)
From: "Moi" <***@example.com>
To: <***@example.com>
Subject: tes
Date: Fri, 31 Mar 2006 13:06:14 +0200
Message-ID: <00e201c654b3$****$***@Makalu>
MIME-Version: 1.0
Content-Type: text/plain;
    charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
X-Mailer: Microsoft Office Outlook 11
X-MimeOLE: Produced By M$crosoft MimeOLE

....


Apres, à base d'expreszssions régulières sur le contenu tu retrouve tous ces éléments.

J'ai pas encore eu le temps de finir, mais le principe me semble faisable.

Bolbo
glibre
oui j'ai un peut le meme genre d'entete

je fouine sur comment extraire uniquement les lignes contenant :
From:
To:
Subject:
Date:
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.