Portál AbcLinuxu, 12. května 2025 11:08

Dotaz: jak spustit script při doručení mailu v postfixu

3.5.2010 19:19 PavelM
jak spustit script při doručení mailu v postfixu
Přečteno: 1052×
Odpovědět | Admin
Zdravim, potřeboval bych vždy když se doručí nějaký mail na muj server spustit script. Nevíte někdo jak na to? Dík za rady (používám postfix a ubuntu)
Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

3.5.2010 22:09 faha
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pres .forward by to neslo udelat? Resi se takto obcas napr.autoreply (vacation)
4.5.2010 09:24 PavelM
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
No asi nejak tak jo, ja jsem nasel zminku o spusteni skriptu zde: http://www.postfix.org/VIRTUAL_README.html#autoreplies ale je tam jen uvedeno ze se spusti nejaky skript, nicmene jak na to už jsem nenašel (nebo nepochopil), jesli někdo má nějaký zajimavý zdroj nebo info budu moc vděčen.
4.5.2010 21:04 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Hľadaj procmail a jeho konfigurák procmailrc. Ako to už býva, je to mocný nástroj, len sa treba naučiť, ako ho používať.
the.max avatar 4.5.2010 21:07 the.max | skóre: 46 | blog: Smetiště
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
...a nebo maildrop. Oproti procmailu ma daleko jednodussi syntaxi zapisu pravidel a da se v tom daleko lepe orientovat.
KERNEL ULTRAS Fan Team || Sabaton - nejlepší učitel dějepisu || Gentoo - dokud nás systemd nerozdělí.
4.5.2010 09:24 PavelM
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
No asi nejak tak jo, ja jsem nasel zminku o spusteni skriptu zde: http://www.postfix.org/VIRTUAL_README.html#autoreplies ale je tam jen uvedeno ze se spusti nejaky skript, nicmene jak na to už jsem nenašel (nebo nepochopil), jesli někdo má nějaký zajimavý zdroj nebo info budu moc vděčen.
4.5.2010 12:48 Jindra
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jedna z variant je třeba tato:

1. master.cf autoreply unix - n n - - pipe flags= user=admin argv=/usr/local/postfix/script/auto_reply.pl $sender $mailbox $size

2. transport autoreply.domena.cz autoreply;

3. virtual info@domena.cz info, info@domena.cz@autoreply.domena.cz

4. autoreply.pl např #!/usr/bin/perl $sender = @ARGV[0]; $mailbox = @ARGV[1]; $size = @ARGV[2]; ..........................
4.5.2010 16:17 PavelM
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Tak jsem něco zkusil a nic. Jde mi o to aby se do souboru /pokus.txt zapisovali tyto dve informace: $sender $mailbox(nic vic) Takze:
1) do souboru main.cf jsem pridal radky:
transport_maps = hash:/etc/postfix/transport
virtual_alias_maps = hash:/etc/postfix/virtual_alias
master.cf vypada takto:
...
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
autoreply unix  -       n       n       -       -       pipe    flags= user=root argv=/pokus.sh $sender $mailbox
smtp      inet  n       -       -       -       -       smtpd
#submission inet n       -       -       -       -       smtpd
...
a do /etc/postfix/transport jsem zapsal toto:
autoreply.mojedomena.cz  autoreply:
a /etc/postfix/virtual_alias takto:
pokus@mojedomena.cz xpokus@mojedomena.cz, pokus@mojedomena.cz@autoreply.mojedomena.cz
/pokus.sh vypada takto:
echo "$sender $mailbox" >> /vystup.txt
Postmap jsem zavolal jak na virtual_alias tak na transport, pak jsem postfix restartoval. Ale nic se nedeje - soubor vystup.txt je prazdny. K :-( dyz si poslu mail tak log vypada takto:
May  4 16:01:07 mail2 postfix/smtpd[9558]: connect from 12-345-678-910.static.masterinter.net[12-345-678-910]
May  4 16:01:07 mail2 postfix/smtpd[9558]: 5EADE300063: client=12-345-678-910.static.masterinter.net[12-345-678-910]
May  4 16:01:07 mail2 postfix/cleanup[9562]: 5EADE300063: message-id=<14d64ce39f9eed86def16d263ed149fa@localhost>
May  4 16:01:07 mail2 postfix/qmgr[9471]: 5EADE300063: from=nekdo@mujweb.cz, size=695, nrcpt=2 (queue active)
May  4 16:01:07 mail2 postfix/smtpd[9558]: disconnect from 12-345-678-910.static.masterinter.net[12-345-678-910]
May  4 16:01:07 mail2 postfix/qmgr[9471]: warning: connect to transport private/autoreply: No such file or directory
May  4 16:01:07 mail2 postfix/virtual[9563]: 5EADE300063: to=xpokus@mojedomena.cz, orig_to=pokus@mojedomena.cz, relay=virtual, delay=0.24, delays=0.14/0.01/0/0.1, dsn=2.0.0, status=sent (delivered to maildir)
May  4 16:01:07 mail2 postfix/error[9564]: 5EADE300063: to=pokus@mojedomena.cz@autoreply.mojedomena.cz, orig_to=pokus@mojedomena.cz, relay=none, delay=0.29, delays=0.14/0.01/0/0.14, dsn=4.3.0, status=deferred (mail transport unavailable)
May  4 16:02:28 mail2 postfix/anvil[9521]: statistics: max connection rate 1/60s for (smtp:12-345-678-910) at May  4 15:52:28
May  4 16:02:28 mail2 postfix/anvil[9521]: statistics: max connection count 1 for (smtp:12-345-678-910) at May  4 15:52:28
May  4 16:02:28 mail2 postfix/anvil[9521]: statistics: max cache size 1 at May  4 15:52:28

4.5.2010 16:59 Jindra
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Když se podíváš dp šestého řádku tvého logu, tak tam vidíš, že předáváš úlohu programu, který ale není na autoreply nastavený, neumí to. V main.cf si nastav mailbox_transport=cyrus, ten si doinstaluj a potom ti vše bude fungovat OK :-)
4.5.2010 18:35 PavelM
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
A neni nahodou cyrus POP3/Imap server? Protoze ja mam dovecot a normalen mi funguje. Me tedy neni jasne jakou ulohu jakemu programu predavam, jak to v tom sestem radku vydis ty. Ja tam vidim warning: connect to transport private/autoreply: No such file or directory z cehoz mi prijde ze teda neexistuje soubor private/autoreply (ja moc neumim cist z logu asi). Ja se ale nesnazim o automatickou odpoved, jde mi o to zavolat skript /pokus.sh a do nej strcit rourou $recipient a $mailbox v momente kdy dojde mail na adresu v $recipient. Tak mi prijde divny k tomu instalovat druhý imap/Pop3 server. Omlouvam se za tyto mozná hloupé dotazy... A předem mnohokrát děkuji za cené rady!
4.5.2010 20:25 Jindra
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
V tom řádku 6 je pro tebe důležité zejména KDO vlastně hlásí ono "warning: connect...". Je to totiž "postfix/qmgr[9471]..." a to znamená, že jsi nepředal požadavek obecně na správného démona/program, neboť qmgr prostě transport private/autoreplay neumí. Mělo by tam být "postfix/pipe...". Napsal jsem ti v main.cf mailbox_transport cyrus, protože ten běžně používám a uvedená konfigurace je z něj. Pochopitelně stejně to bude fungovat i s Dovecotem... ve tvém případě tě nezajímá funkce pop/imap, ale lokální doručovací agent - je to pěkně popsané tady na serveru abclinuxu od Lukáše Jelínka. Také se nepozastavuj nad tím, že se používá autoreplay. V podstatě si můžeš vybrat víc míst v řetězci zpracování příchozího mailu a spustit nějaký skript téměř dle libosti. Autoreplay je ale dost dobře i na webu dokumentovaný a popisovaný, přijde mi to nejsrozumitelnější. Uvedená konfigurace je funkční a ozkoušená, já jí většinou používám pro posílání zpráv na mobily o příchozí poště.
4.5.2010 20:54 PavelM
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Jasně super, tak už to konečně něco začalo dělat :-) už se mi spuští ten muj skript /pokus.sh, ale výstup je trochu podivný: skript pokus.sh:
#!/bin/bash
echo "zkouska" >> /vystup.txt
echo $$mailbox >> /vystup.txt
echo "$$recipient" >> /vystup.txt
Vysledek - soubor vystup.txt:
zkouska
11390mailbox
11390recipient
Coz teda logicky neni to co bych chtel aby to bylo, mela by tam byt normale adresa doruceni ze.

A jeste bych se te rovnou rad zeptal jak resis to posilani SMS, mas k serveru pripojen mobil a prez nej, nebo nejak jinak? To budu urcite resit taky, hned jak doresim ty adresy, takze cim vic info (popr odkazu, tim lip) Diky, diky, diky
4.5.2010 23:35 Jindra
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Příloha:
Jsem rád, že se ti to podařilo. Teď jen poznámky:

1. ten skript ti takhle nemůže fungovat. Službě autoreply v konfigu říkáš, že jako parametry má ke skriptu přidat obsah proměnných $sender,$mailbox,... Čili se provede to, že se spustí např. "skript.sh odes@mail.cz prijem@domena.cz". Pokud chceš tyto dva parametry zpracovat oním skriptem, tak mu nejdřív musíš říct, že si je má z příkazové řádky načíst, podle shellu třeba jako $1, $2,... $$mailbox opravdu není v tomto případě první proměnná na příkazové řádce.

2. při posílání zpráv na mobily je škoda platit, čili je lepší to posílat mailem jako sms. Je tam sice omezení velikosti, ale pro zprávu od koho a předmět to stačí. Jednoduchou kostru v perlu připojuji.

5.5.2010 01:23 PavelM
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Super, tak už mi to běhá, děkuji ti strašně moc, v perlu zatim bohužel neumim. Tak jsem z toho skriptu moc nepochopil, kdo to odešle na ten mobil? Copak se dá funkcí mail poslat sms do všech sítí zadara? To je poslední dotaz - slibuju :-)
5.5.2010 11:03 Jindra
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Poslat na mobil mail docela funguje, jen občas to operátorovi trvá dost dlouho, než to proleze drátama :-). Jak přesně tady najdeš v diskuzích, já osobně mám nejraději Vodafone - sms mohou být dost dlouhé. O2 funguje v poho, jen ta délka...

V tom perlovém skriptu musíš nejdřív načíst parametry z příkazového řádku - $sender a $mailbox. Potom si podle $mailbox - adresy příjemce - vybereš mailovou adresu mobilu, na který to chceš poslat. Takže třeba když jde o mail pro jirku, přiřadíš si adresu jeho mobilu mobil_jirka a někde v aliasech budeš mít "mobil_jirka: +420602323232@sms.cz.o2.com". No a nakonec si to už jen podle libosti poskládáš dohromady do řetězce $posta a pomocí "system($posta)" předáš shellu tvůj příkazový řádek. Jinak řečeno - pošleš mail na adresu tvého mobilu z příkazového řádku. Pochopitelně tohle všechno se dá udělat bez problémů třeba v csh,ksh... jde spíš o zvyk co používat. Jestli chceš vidět ten vygenerovaný příkaz mail, tak si nech string $posta vypsat třeba pomocí "print $posta".
Ruža Becelin avatar 5.5.2010 11:22 Ruža Becelin | skóre: 40 | blog: RuzaBecelinBlog
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Jenom poznamka k tomu $$mailbox - expanze $$ vede k vypisu PID + stringu 'mailbox'

Takze se musi psat pouze echo $mailbox

To same pro recipient.
5.5.2010 13:04 Jindra
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Ano, je to přesně tak. Snad jen dodatek pro osvětlení problematiky původnímu tazateli: lokální agent spustí tvůj skript s parametry, které má uložené ve vnitřních proměnných $sender a $mailbox. Výsledkem je příkaz, který jsem již výše psal -

/pokus.sh odes@mail.cz prijem@domena.cz

A teď pozor - skript pokus.sh pochopitelně vůbec netuší, že první parametr odes@mail.cz byl vytvořen z jakési proměnné $sender. Jakmile tyto dva parametry na příkazovém řádku načteš skriptem pokus.sh, tak jim ale musíš dát jako proměnným i nějaké jméno, které ovšem vůbec nesouvisí s tím původním jménem... čili i kdyby jsi v tom tvém skriptu správně použil výraz pro vypsání proměnné

echo $mailbox

tak ti to stejně ve tvém případě nenapíše nic, neboť tvoje lokální proměnná ve skriptu pokus.sh se jménem $mailbox není definovaná.
5.5.2010 20:16 PavelM
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Jasný chápu, díky moc, moc jse mi pomohli (hlavně Jindra), snad vám to někdy oplatím...
the.max avatar 4.5.2010 21:06 the.max | skóre: 46 | blog: Smetiště
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Odpovědět | | Sbalit | Link | Blokovat | Admin
ja to mam resene tak, ze za postfixem je jeste maildrop, na kterem resim i dalsi filtrovani a trideni mailu. V mailfiltru daneho usera je potom tohle:

#MFMAILDROP=2

logfile "/home/vmail/.logs/user@domena.ltd"

xfilter "/usr/bin/spamc"

FROM='user@domena.ltd'

if ((/^From:.*info\@rb\.cz/))
{
    cc "| /home/vmail/domena.ltd/user/skript.sh"
    log "spustil se skript"
}

to "/home/vmail/domena.ltd/user/.maildir/."

dalsi moznosti je to nejak resit prez /etc/aliases, ale to nepouzivam.
KERNEL ULTRAS Fan Team || Sabaton - nejlepší učitel dějepisu || Gentoo - dokud nás systemd nerozdělí.
24.6.2010 13:29 Martin
Rozbalit Rozbalit vše Re: jak spustit script při doručení mailu v postfixu
Dobrý den, potřebuji spustit script na kazdy email co mi prijde, ale nedari se:( provedl jsem nastaveni tak jak je popsano vyse. Z logu je hned nekolik chyb. Muzete poradit prosim?

pipe hlasi toto: fatal: user= command-line attribute specifies root privileges

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.