GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter un script lorsqu'un courrier arrive sur le serveur de messagerie ? (Debian)

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.


Linux
  1. Debian – Comment exécuter des programmes 32 bits sur une Debian/ubuntu 64 bits ?

  2. Comment exécuter "find -exec {} ; ?

  3. Comment exécuter un script ? ?

  4. Comment exécuter un script shell lorsqu'un fichier ou un répertoire change ?

  5. Comment puis-je exécuter mon script node js automatiquement à l'aide du planificateur sur le serveur

Comment exécuter un script Python en PHP

Comment exécuter un script bash

Comment installer Nginx dans Debian 7

Comment installer Apache sur Debian 7

Comment installer Apache sur Debian 8.2

Comment ajouter une adresse IP privée à un serveur Debian