Script alias
Un article de Base de connaissances Pascalex.
PHP sait très bien envoyer des mails, mais en recevoir est une autre histoire... C'est cependant possible si vous avez quelques compétences en SSH et en PHP
Des scripts "autorépondeurs" existent sur le net, mais ils consistent à relever le courrier dans la boite POP à un intervalle de temps défini par une tache cron. Cela est malheureusement très gourmand en ressources systèmes...
Cette solution s'attaque à la source du problème, au moment même de la réception du mail par le système. Le résultat est alors immédiat et ne sollicite qu'une seule fois, et très peu, le CPU du serveur.
L'adresse destinée à collecter les mails ne doit pas être actuellement utilisée, ni en tant que compte POP, ni comme redirection.
Pensez également à éditer le fichier en dehors des balises suivantes, afin que vos ajouts ne soient pas supprimés à chaque modification de compte POP ou de redirection dans l'interface d'administration du VPS.
## ----- Begin HSPC generated text. Do not edit! ----- ... ## ----- End HSPC generated text. -----
- Editez le fichier /etc/mail/virtusertable et insérez la ligne suivante :
adresse@monsite.com script_alias
Si vous voulez que plusieurs adresses mail soient redirigées vers le script, il suffit de dupliquer cette ligne et de changer l'adresse email. Le texte "script_alias" peut être remplacé par n'importe quel autre, du moment qu'il est repris à l'identique dans le fichier "aliases". Cependant, pour éviter tout conflit, ne mettez pas le nom d'un des utilisateurs du système. Pour plus de tranquillité, vous pouvez utiliser quelque chose comme "5frqsd45r78"
- Editez le fichier /etc/aliases et insérez la ligne suivante
script_alias: "|/input.php"
Il n'est pas utile d'indiquer le répertoire racine car il est automatiquement remplacé par "/etc/smrsh/" Tout mail reçu est transmis au script puis ensuite perdu à jamais. Si vous ne le souhaitez pas, ajoutez une virgule derrière "|/input.php", puis l'adresse email destinée à recevoir une copie "de secours" des messages recus sur cette ou ces adresses.
- Placez dans le répertoire /etc/smrsh/ le fichier "input.php" dont le contenu est le suivant
#!/usr/bin/php
<?php
include("/home/utilisateur/monsite.com/html/dossier/script.php");
?>
Pensez à lui appliquer un chmod 755 pour qu'il puisse être exécuté. Modifiez évidemment le chemin vers votre script.
La distribution sendmail des VPS comprend le programme smrsh, un shell qui, au contraire de sh, permet de spécifier - au travers du répertoire /etc/smrsh - une liste explicite des programmes accessibles à sendmail. Ainsi, même si une personne mal intentionnée arrivait à utiliser sendmail pour éxecuter un programme sans passer par un alias ou un fichier forward, smrsh limite le nombre de programmes que cette personne peut exécuter. Cela dit, pour une utilisation normale, smrsh limite effectivement les capacités de sendmail.
Normalement, il faudrait donc utiliser ce répertoire pour stocker les programmes accessibles à sendmail, soit en les copiant, soit en créant un lien (par exemple "ln -s /usr/bin/php php" pour PHP). Cependant, y placer PHP ou un autre interprêteur est déconseillé, du moins dommage car cela revient à une configuration "non sécurisée" de sendmail.
Cette solution du fichier PHP "passerelle" permet à la fois de concilier sécurité - car on ne donne pas accès directement à php - et facilité d'emploi - car le contenu du fichier finalement interprêté se trouve dans le même répertoire que votre site web, avec les mêmes autorisations, donc modifiable facilement par FTP.
- Enfin pour que l'alias soit pris en compte, loggez vous sous root en SSH et tapez la commande :
newaliases
- Désormais, pour récupérer le contenu du mail via votre script PHP, voici votre point de départ :
$message = file("php://stdin");
- Ce contenu peut être enregistré directement sous forme de fichier ".eml", et alors peut être lu directement, notamment sous Windows comme un message sauvegardé d'Outlook Express
- Ce contenu peut être réexpédié en tant que pièce jointe, sous réserve de l'encoder (fonction PHP "mb_convert_encoding") en "8bit" et de définir son type comme "message/rfc822". Le destinataire recevra ainsi un mail avec en pièce jointe le message transmis, un peu comme quand un mail vous revient parce qu'il a été rejeté.
- Et bien sûr le plus intéressant est de le parser plusieurs fois pour extraire d'une part les entêtes et d'autre part le contenu, puis ensuite récupérer le mail de l'expéditeur, le sujet, les pièces jointes, le corps du message...
Vous pouvez désormais vous lancer dans la réalisation des projets suivants :
- répondeur automatique
- téléchargement de fichier par mail
- traitement automatique de confirmations de paiement Paypal ou autres
- ...
Bref une meilleure interaction avec vos visiteurs ou clients... Tout cela grâce aux VPS de Pascalex ;-)
matrey 14 mai 2005 à 22:33 (CEST)
