Portál AbcLinuxu, 7. května 2025 01:17

Dotaz: Postfix: Spuštění skriptu po příjmu e-mailu

3.4.2020 19:28 Milan | skóre: 1
Postfix: Spuštění skriptu po příjmu e-mailu
Přečteno: 214×
Odpovědět | Admin

Zdravím

Nainstaloval jsem si Amavis na mailserveru (Debian10 / Postfix) podle těchto návodů:
https://www.lomitkari.cz/2015/04/07/postfix-a-amavis-jak-nainstalovat-a-nakonfigurovat/
https://www.abclinuxu.cz/clanky/site/stavime-postovni-server-10-spam-plus-viry

Všechno funguje jak má.


Pak jsem chtěl přidat ještě něco, co mi při každém příjmu e-mailu spustí nějaký skript.
To jsem zkusil zprovoznit podle tohodle návodu:
https://thecodingmachine.io/triggering-a-php-script-when-your-postfix-server-receives-a-mail

Po drobných problémech s právy jsem ten návod taky rozchodil (při příjmu e-mailu se skutečně skript spustil).

Problém je ale v tom, že se pak se ten přijatý e-mail ztratí.
Nedorazí do příslušné schránky a ani ho nevidím v "queue" (po zadání příkazu postqueue -p).


Hledal jsem tedy dál a zjistil jsem, že se musí ty filtry (Amavis a ten spouštěný skript) nějak řetězit.
Pravděpodobně by to mělo být něco jako tady v tom dotazu:
https://stackoverflow.com/questions/22629339/configure-second-content-filter-with-amavis

Jenže s tím už si nedokážu poradit. Asi vůbec nechápu to předávání zpráv přes porty a sockety.
Můžete mi někdo poradit, jaké porty mám nastavit v tom souboru /etc/postfix/master.cf ?

Zatím to mám takhle:
/etc/postfix/main.cf
-----------------------------------------

content_filter = smtp-amavis:[127.0.0.1]:10024

-----------------------------------------




/etc/postfix/master.cf
(ve stavu, kdy se spouští skript, ale ztrácí se e-maily)
-----------------------------------------

smtp-amavis unix    -       -       n       -       2     smtp
 -o smtp_data_done_timeout=1200
 -o smtp_send_xforward_command=yes
 -o disable_dns_lookups=yes
 -o max_use=20

127.0.0.1:10025 inet n    -       n       -       -     smtpd
 -o smtpd_delay_reject=no
 -o smtpd_client_restrictions=permit_mynetworks,reject
 -o smtpd_helo_restrictions=
 -o smtpd_sender_restrictions=
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
 -o smtpd_data_restrictions=reject_unauth_pipelining
 -o smtpd_end_of_data_restrictions=
 -o smtpd_restriction_classes=
 -o mynetworks=127.0.0.0/8
 -o smtpd_error_sleep_time=0
 -o smtpd_soft_error_limit=1001
 -o smtpd_hard_error_limit=1000
 -o smtpd_client_connection_count_limit=0
 -o smtpd_client_connection_rate_limit=0
 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
 -o local_header_rewrite_clients=
 -o content_filter=emailscript:dummy


emailscript    unix    -       n       n       -       -       pipe
 flags=F user=trig argv=/home/trig/emscript.php ${sender} ${size} ${recipient}

#----------------
# tyhle veci jsem zkousel pridat, ale nefungovalo to
#127.0.0.1:10099 inet    n       -       n       -       10      smtpd
#        -o content_filter=emailscript:dummy
#        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
#        -o smtpd_helo_restrictions=
#        -o smtpd_client_restrictions=
#        -o smtpd_sender_restrictions=
#        -o smtpd_recipient_restrictions=permit_mynetworks,reject
#        -o mynetworks=127.0.0.0/8
#        -o smtpd_authorized_xforward_hosts=127.0.0.0/8

#127.0.0.1:10097     inet    n   -   n   -    10      smtpd
#      -o content_filter=emailscript:dummy

 




-----------------------------------------






Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Milan (tazatel))
Jendа avatar 3.4.2020 19:50 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Postfix: Spuštění skriptu po příjmu e-mailu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Postfix považuje mail předáním do pajpy za doručený a dál se o něj nestará.

Možnost 0: možná jde pomocí flagů v master.cf nějak udělat, aby to propadlo dál

Možnost 1: udělat dva transporty ("emailscript" a "deliver") a mail pomocí aliasů nacpat do obou. Já mám třeba v transport mapě "autoreply.doména.cz vacation:" a maily jdou aliasem do schránky i do schránka@autoreply.doména.cz, kde je žere skript

Možnost 2: na konci skriptu ručně spustit nějaký maildrop/dovecot-lda, mail mu předat a on to do toho maildiru zapíše.
4.4.2020 08:54 Milan | skóre: 1
Rozbalit Rozbalit vše Re: Postfix: Spuštění skriptu po příjmu e-mailu

Díky za odpověď.

Body 0) a 2) jsem sice vůbec nepochopil, ale ten bod 1) jsem asi zvládnul.

Soubor /etc/postfix/master.cf jsem vrátil do původního stavu, kdy se e-maily doručovaly bez problémů.

Proti tomu výpisu, který jsem uváděl v prvním příspěvku tohoto vlákna jsem tedy upravil řádku:

 -o content_filter=emailscript:dummy


na původní verzi:

 -o content_filter=


A smazal jsem celý ten blok "emailscript ...." (2 řádky)




Pak jsem do souboru /etc/aliases přidal tohle:

msk:          msk@domena.cz             , "| /home/msk/emascript.php"



Aktualizoval pomocí:

 newaliases


A nakonec jsem restartoval Postfix:

 postfix reload


Zdá se, že to běží.
E-maily se doručují do schránek a e-maily pro uživatele "msk" zároveň spouští i skript "emascript.php".
Když je víc uživatelů, tak se každému může spouštět jeho vlastní skript.

Takhle mi to stačí. Díky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.