Ich versuche, procmail zu verwenden, umalle Nachrichten sendenfür eine bestimmte DomainRT(Request Tracker). Dies ist jedoch eher eine Frage zur .procmailrc-Datei.
Hier ist meine aktuelle .procmailrc-Datei:
#Preliminaries
SHELL=/bin/sh #Use the Bourne shell (check your path!)
MAILDIR=${HOME} #First check what your mail directory is!
LOGFILE=${MAILDIR}/procmail.log
LOG="--- Logging ${LOGFILE} for ${LOGNAME}, "
VERBOSE=yes
MAILDOMAIN='rt.mydomain.com'
RT_MAILGATE="/opt/rt3/bin/rt-mailgate"
RT_URL="http://rt.mydomain.com/"
LOGABSTRACT=all
### Trying to process using the rt-mailgate script
:0
{
# the following line extracts the recipient from Received-headers.
# Simply using the To: does not work, as tickets are often created
# by sending a CC/BCC to RT
TO=`formail -c -xReceived: |grep $MAILDOMAIN |sed -e 's/.*for *<*\(.*\)>* *;.*$/\1/'`
QUEUE=`echo $TO| $HOME/get_queue.pl`
ACTION=`echo $TO| $HOME/get_action.pl`
:0 h b w
|/usr/bin/perl $RT_MAILGATE --queue $QUEUE --action $ACTION --url $RT_URL
}
### Upon failure, I want to send back an error message to the user, saying
### "Queue does not exist." I took this code from the procmailex manpage.
:0 Wh: no-queue.lock
{
## Reply if error
* !^FROM_DAEMON
* !^X-Loop: [email protected]
| formail -rD 8192 no-queue.cache
:0 ehc
|(formail -rI"Precedence: junk" -A"X-Loop: [email protected]" ; \
echo "The Queue or Action was invalid."; echo "--" \
) | $SENDMAIL -oi -t
}
Sehen Sie ein Problem mit meiner .procmailrc-Datei? Sie funktioniert einwandfrei, wenn die Warteschlange vorhanden ist, aber danach wird die E-Mail einfach an /var/mail/username gesendet. Ich möchte die E-Mail verwerfen und eine Fehlermeldung zurückgeben.
Antwort1
Ehrlich gesagt habe ich Procmail schon eine Weile nicht mehr verwendet, also entschuldige ich mich, wenn es nicht sofort funktioniert.
Zunächst einmal verursachte die Verschachtelung in Ihrem Skript Probleme, da sie ein Rezept praktisch halbierte. Sie sind ohnehin nicht notwendig, also habe ich sie entfernt. Ich habe auch die Struktur vereinfacht und sie so eingerichtet, dass sie nie in das lokale Postfach durchfällt.
#Preliminaries
SHELL=/bin/sh #Use the Bourne shell (check your path!)
MAILDIR=${HOME} #First check what your mail directory is!
LOGFILE=${MAILDIR}/procmail.log
LOG="--- Logging ${LOGFILE} for ${LOGNAME}, "
VERBOSE=yes
MAILDOMAIN='\(help\|rt\)\.\(ncom\|networklubbock\)\.com'
RT_MAILGATE="/opt/rt3/bin/rt-mailgate"
RT_URL="http://rt.ncom.com/"
LOGABSTRACT=all
### Trying to process using the rt-mailgate script
# the following line extracts the recipient from Received-headers.
# Simply using the To: does not work, as tickets are often created
# by sending a CC/BCC to RT
TO=`formail -c -xReceived: |grep $MAILDOMAIN |sed -e 's/.*for *<*\(.*\)>* *;.*$/\1/'`
QUEUE=`echo $TO| $HOME/get_queue.pl`
ACTION=`echo $TO| $HOME/get_action.pl`
:0w
|/usr/bin/perl $RT_MAILGATE --queue $QUEUE --action $ACTION --url $RT_URL
# the formail command below looks at the message sender and basically
# swallows the message if it's seen the sender before. The number
# is the size of the cache file of seen addresses. A lock file is
# used because multiple formail processes editing that cache will
# corrupt it.
:0w:no-queue.lock
| formail -rD 8192 no-queue.cache
### Upon failure, I want to send back an error message to the user, saying
### "Queue does not exist." I took this code from the procmailex manpage.
# Don't send if this was a bounce from a mailer, and don't send if this
# message contains the header put there to indicate a loop.
:0
* !^FROM_DAEMON
* !^X-Loop: [email protected]
|(formail -rI"Precedence: junk" -A"X-Loop: [email protected]" ; \
echo "The Queue or Action was invalid."; echo "--" \
) | $SENDMAIL -oi -t
# trash anything that falls all the way through. This should only ever
# happen if the message was a bounce or if it was a loop.
:0
/dev/null
Hoffe, das hilft. Bitte kommentieren Sie, wenn Sie Fragen zu irgendeinem Teil haben, und ich werde versuchen, es zu erklären. Oder finden Sie heraus, was ich vermasselt habe, wenn es nicht funktioniert.