GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit skript, když pošta dorazí na poštovní server? (Debian)

Zdá se, že na to již odpověděl někdo jiný, ale myslel jsem, že vám napíšu konkrétní odpověď.

Použil bych procmail a použil bych recept ve vašem .procmailrc podobný tomuto:

#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

Budete také potřebovat výchozí recept v dolní části pro přesměrování pošty do vašeho maildir.


Můžete použít /etc/aliases k přenosu e-mailů přímo do programu ke zpracování, takže pokud byste chtěli spustit skript pro zpracování všech e-mailů na [email protected], vložte tento řádek do /etc/aliases (funguje pro postfix, sendmail atd.):

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

Poté spusťte "newaliases" pro aktualizaci databáze.

Pak se ujistěte, že máte funkční program v /usr/local/bin s názvem processtestemail.php.

Může být napsán v php, bash, perl, python, cokoli chcete a co máte pro tlumočníka. Můžete dokonce spustit zkompilovaný binární soubor napsaný v c/c++ atd.

Výše byly návrhy na použití procmailu, je to skvělý produkt, ale upřímně řečeno, to, co jsem představil, je nejrychlejší a nejjednodušší řešení a funguje ve více verzích *NIX s více mailery než kterýkoli jiný.

Žádná z dalších odpovědí vám také ve skutečnosti neříká, jak zpracovat příchozí zprávu, a tak byste ve svém skriptu načetli vstup ze standardního „in“ (stdin) a poté tato data analyzovali pomocí jakýchkoli algoritmů, které budete muset zpracovat správně jako následuje:

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

?>

ThanksSA Experts for Hire:děláme to všechno ve velkém nebo v smalltekops.com


Zde je dobrý návod na zpracování příchozí pošty. Nejjednodušší věc, kterou můžete udělat, je použít .forward mechanismus, jak je popsán, k přenosu zprávy prostřednictvím skriptu. Vytvořte soubor .forward režimu 600 v domovském adresáři uživatele a vložte do něj kanál pro skript:

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

Místo toho byste se však měli podívat na použití procmailu, protože to jsou podrobnosti o tom, jak na to. Procmail vám poskytuje spoustu výhod, jako je sofistikovanější protokolování a zpracování pošty. Zde je jednoduchý příklad .procmailrc (opět ze stejného návodu):

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

který má některé pěkné funkce, jako je schopnost detekovat a zastavit zacyklení pošty.


Linux
  1. Debian – Jak spouštět 32bitové programy na 64bitovém Debianu/ubuntu?

  2. Jak zajistím, aby můj webový server Golang běžel na pozadí?

  3. Jak mohu spustit svůj skript js uzlu automaticky pomocí plánovače na serveru

  1. Jak spustit „find -exec {};?

  2. Jak spustit skript??

  3. Jak nainstalovat Vyhledejte na cloudovém serveru Debianu

  1. Jak spustit proces Rsync na pozadí

  2. Jak spustit skript shellu, když se změní soubor nebo adresář?

  3. Jak číst e-maily přijaté na serveru Debian