Il semble que quelqu'un d'autre ait déjà répondu à cette question, mais j'ai pensé que je devais vous donner une réponse spécifique.
J'utiliserais procmail et utiliserais une recette dans votre .procmailrc similaire à ceci :
#turn this off when you're finished testing :)
VERBOSE=on
LOGFILE=/home/user/procmail.log
:0 c #the c means continue on after this recipe is parsed
| /path/to/your/script
Vous aurez également besoin d'une recette par défaut en bas pour diriger le courrier vers votre maildir.
Vous pouvez utiliser /etc/aliases pour rediriger les e-mails directement vers un programme à traiter, donc si vous vouliez exécuter un script pour traiter tous les e-mails à [email protected], vous mettriez cette ligne dans /etc/aliases (fonctionne pour postfix, sendmail, etc.):
test: "|/usr/local/bin/processtestemail.php"
Exécutez ensuite "newaliases" pour mettre à jour la base de données.
Assurez-vous ensuite que vous avez un programme fonctionnel dans /usr/local/bin nommé processtestemail.php.
Il peut être écrit en php, bash, perl, python, tout ce que vous voulez et tout ce que vous avez comme interprète. Vous pourriez même lancer un binaire compilé écrit en c/c++, etc.
Il y avait des suggestions pour utiliser procmail ci-dessus, c'est un excellent produit, mais honnêtement, ce que j'ai présenté est la solution la plus rapide et la plus simple et cela fonctionne dans plus de versions de *NIX avec plus de mailers que tout autre.
De plus, aucune des autres réponses ne vous dit vraiment comment traiter le message entrant et donc vous, dans votre script, lirez l'entrée de la norme "in" (stdin), puis analyserez ces données en utilisant les algorithmes que vous pourriez avoir pour les traiter correctement comme suit :
<?php
$fd = fopen('php://stdin','r');
if ($fd) then
{
$email = ''; // initialize buffer
while (!feof ($fd)) // read as long as message
{
$rawemail .= fread($fd,1024); // read up to 1K at a time
ProcessTheMessageChunk($rawEmail);
}
fclose($fd); // done so close file handle
$fd=NULL; // clear file handle
}
else
{
print("ERROR: Could could open stdin...");
};
/*
** Now write your code to fill in the function ProcessMessageChunk()
** and then process the data you have collected altogether using
** that function/subroutine.
*/
?>
MerciSA Experts for Hire :nous faisons tout grand ou petittekops.com
Voici un bon tutoriel sur le traitement du courrier entrant. La chose la plus simple à faire est d'utiliser le .forward
mécanisme tel que décrit, pour diriger un message via un script. Créez un fichier .forward en mode 600 dans le répertoire personnel de l'utilisateur et placez-y un tube vers un script :
"|$HOME/bin/your.program -and some arguments"
Cependant, vous devriez envisager d'utiliser procmail à la place, comme le détaille ce guide. Procmail vous offre de nombreux avantages, tels qu'une journalisation et un traitement du courrier plus sophistiqués. Voici un exemple simple de .procmailrc (toujours tiré de ce même guide) :
:0
* !^FROM_DAEMON
* !^FROM_MAILER
* !^X-Loop: [email protected]
| $HOME/bin/my.script
qui a quelques fonctionnalités intéressantes, comme la capacité de détecter et d'arrêter les boucles de messagerie.