Domanda

Sto tentando di eseguire un po 'di inoltro e -mail personalizzato. #1 Sono su un server condiviso, che utilizza Qmail e facoltativamente Procmail.

Quello che sto cercando di realizzare è un inoltro e -mail personalizzato di un indirizzo, in base a un programma. Ad esempio, ho un programma di dipendenti a cui stanno lavorando ogni giorno della settimana e ho uno script PHP che seleziona l'indirizzo e -mail di un dipendente casuale che funziona oggi.

Quindi sto cercando di chiamare quello script in Procmail e produrre il risultato (che è un singolo indirizzo e -mail) sulla riga in avanti:

Esempio:

#Something
LOGFILE=/usr/home/myname/procmail-log
VERBOSE=yes
EXITCODE=99
MAILDIR=/usr/boxes/myname
DEFAULT=/usr/boxes/myname/mybox
SHELL=/bin/sh
MYVAR=$(php -q /usr/home/myname/testemail/emailtester.php)

:0
! $MYVAR

Questo non funziona. Affatto. Ho anche provato:

MYVAR=`php /usr/home/myname/testemail/emailtester.php`

Oltre a convocare la linea in avanti:

:0
! |php /usr/home/myname/testemail/emailtester.php

Sono completamente fuori dal mio elemento qui ... Ho provato a non usare nemmeno Procmail e ho appena convocato l'intera e -mail su uno script PHP, da Qmail. Ho bisogno che le intestazioni rimangano intatte, come un attaccante normale, e questo si è rivelato difficile con PHP e un po 'oltre il mio ambito. (Sono riuscito a creare un ciclo di posta elettronica infinito), quindi preferirei non provarlo di nuovo.

Potrei solo provare a script questo in Perl, che non ho mai usato, ma ho bisogno che il programma sia amministrabile da un'interfaccia Web o almeno in modo da usare.

Qualsiasi aiuto o suggerimenti sarebbe apprezzato a questo punto, grazie

MODIFICARE:

Bene, dal momento che non posso mettere il codice in un commento, modificherò qui.

Ora mettendolo nel mio registro:

Folder: /usr/local/bin/php /usr/home/idnani/testemail/emailtester.ph     1679
"rocmail: Executing "/usr/local/bin/php,/usr/home/idnani/testemail/emailtester.php
Could not open input file: /usr/home/idnani/testemail/emailtester.php

Quando uso con: 0fw ottengo:

"rocmail: Executing "/usr/local/bin/php,/usr/home/idnani/testemail/emailtester.php
Could not open input file: /usr/home/idnani/testemail/emailtester.php
procmail: [69907] Thu Jun 16 14:04:17 2011
procmail: Program failure (1) of "/usr/local/bin/php"
procmail: Rescue of unfiltered data succeeded

EDIT: ho capito!

Ho trovato il modo corretto dopo molte prove ed errori.

Non usare nemmeno il tubo, tutto, e hai bisogno di! Simbolo in avanti:

Regola finale:

:0
! `/usr/local/bin/php -f $HOME/emailtest/emailtester.php`

Così semplice ... Sono un po 'arrabbiato che mi ci sono volute ore per capirlo, grazie a tutti per avermi aiutato a indicarmi nella giusta direzione!

È stato utile?

Soluzione 3

Ho trovato il modo corretto dopo molte prove ed errori.

Non usare nemmeno il tubo, tutto, e hai bisogno di! Simbolo in avanti:

Tutta questa regola fa è chiedere allo script PHP una singola e -mail, quindi inoltra a quell'e -mail. Regola finale:

:0
! `/usr/local/bin/php -f $HOME/emailtest/emailtester.php`

Così semplice ... Sono un po 'arrabbiato che mi ci sono volute ore per capirlo, grazie a tutti per avermi aiutato a indicarmi nella giusta direzione!

La risposta di Michael sembra funzionare, e forse lo fa in una circostanza diversa? Non riuscivo a farlo, motivo per cui sto rispondendo da solo ..

Nuova modifica:

Nota: è ancora possibile recuperare l'intera e -mail in PHP tramite stdin

Nota: puoi mettere/USR/Local/Bin/PHP nella tua scrittura stessa in questo modo sulla prima riga:

#!/usr/local/bin/php

Altri suggerimenti

Eri così vicino ... devi pipì senza il ! inoltrare:

:0
|/usr/bin/php /usr/home/myname/testemail/emailtester.php

MODIFICARE Ho messo il percorso completo a PHP, nel caso in cui Provista $PATH è incompleto. Cambialo in qualunque sia il tuo vero percorso PHP.

Per evitare i loop di posta elettronica, ho fatto cose del genere:

PATH=/usr/local/bin:/bin:/usr/bin
MAILDIR=$HOME/Mail
DEFAULT=$HOME/Mail/inbox
LOGFILE=$HOME/procmail.`date +%Y-%m`.log
SHELL=/usr/bin/ksh

MY_XLOOP='X-Loop: emailtester.php'

:0
* ! ^$MY_XLOOP
{
    # add a header
    # 'f' = filter: continue processing results of program
    # 'w' = wait for program to return
    # 'h' = pass message headers to program
    :0fwh
    | formail -A "$MY_XLOOP"

    # then forward the message
    # 'c' = send a copy to recipient and continue processing
    :0c
    | php /usr/home/myname/testemail/emailtester.php
}

# if we get here, then the message has an X-Loop header.
# let it fall into $DEFAULT
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top