GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo ejecutar un script cuando llega un correo al servidor de correo? (Debian)

Parece que alguien más ya respondió esto, pero pensé en escribir una respuesta específica para ti.

Usaría procmail y usaría una receta en su .procmailrc similar a esta:

#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

También necesitará una receta predeterminada en la parte inferior para dirigir el correo a su dirección de correo.


Puede usar /etc/aliases para canalizar el correo electrónico directamente a un programa para que lo procese, por lo que si quisiera ejecutar un script para procesar todo el correo electrónico a [email protected], colocaría esta línea en /etc/aliases (funciona para postfix, enviar correo, etc.):

test:              "|/usr/local/bin/processtestemail.php"

Luego ejecute "nuevos alias" para actualizar la base de datos.

Luego, asegúrese de tener un programa que funcione en /usr/local/bin llamado processtestemail.php.

Se puede escribir en php, bash, perl, python, lo que quieras y lo que tengas para un intérprete. Incluso podría lanzar un binario compilado escrito en c/c++, etc.

Hubo sugerencias para usar procmail arriba, es un gran producto, pero honestamente lo que he presentado es la solución más rápida y simple y funciona en más versiones de *NIX con más correos que cualquier otro.

Además, ninguna de las otras respuestas realmente le dice cómo procesar el mensaje entrante y, por lo tanto, en su secuencia de comandos leería la entrada del estándar "in" (stdin) y luego analizaría esos datos utilizando los algoritmos que pueda tener para procesarlo correctamente como sigue:

<?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.
*/

?>

Gracias a los expertos de SA en alquiler:lo hacemos todo grande o pequeñotekops.com


Aquí hay un buen tutorial sobre el procesamiento de correo entrante. Lo más sencillo es usar el .forward mecanismo como se describe, para canalizar un mensaje a través de un script. Cree un archivo .forward de modo 600 en el directorio de inicio del usuario y coloque una tubería a un script en él:

"|$HOME/bin/your.program -and some arguments" 

Sin embargo, debe considerar usar procmail en su lugar, como se detalla en el procedimiento. Procmail le brinda muchas ventajas, como un registro y procesamiento de correo más sofisticados. Aquí hay un ejemplo simple de .procmailrc (nuevamente del mismo howto):

:0
* !^FROM_DAEMON
* !^FROM_MAILER
* !^X-Loop: [email protected]
| $HOME/bin/my.script 

que tiene algunas características interesantes, como la capacidad de detectar y detener bucles de correo.


Linux
  1. Debian:¿cómo ejecutar programas de 32 bits en un Debian/ubuntu de 64 bits?

  2. ¿Cómo ejecutar “find -exec {};?

  3. ¿Cómo ejecutar un script de shell cuando cambia un archivo o directorio?

  4. ¿Cómo puedo ejecutar mi script de nodo js automáticamente usando el programador en el servidor?

  5. Cómo leer el correo electrónico recibido en un servidor Debian

Cómo ejecutar un script de Python en PHP

Cómo ejecutar un script Bash

Cómo instalar Nginx en Debian 7

Cómo instalar Apache en Debian 7

Cómo instalar Apache en Debian 8.2

Cómo agregar una IP privada a un servidor Debian