Procmail: canalizar para programa, caso contrário, retornar erro ao remetente

1

Estou tentando usar o procmail para enviar todas as mensagens de um determinado domínio para RT (Request Tracker). Isso é mais uma questão sobre o arquivo .procmailrc, no entanto.

Aqui está o meu arquivo .procmailrc atual:

#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 *<*\(.*\)>* *;.*$//''
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

}

Você vê algum problema com o meu arquivo .procmailrc? Ele funciona bem se a fila existir, mas depois disso, ele envia o email para / var / mail / username. Quero jogar fora o email e retornar uma mensagem de erro.

    
por bradlis7 20.01.2010 / 21:49

1 resposta

2

Eu não uso o procmail há algum tempo honestamente, então eu peço desculpas se isso não funcionar imediatamente.

Primeiro, o aninhamento no script que você tinha estava causando problemas porque praticamente cortava uma receita pela metade. Eles não são necessários de qualquer maneira, então eu os removi. Eu também simplifiquei a estrutura e a configurei para que nunca caísse na caixa de correio local.

#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 *<*\(.*\)>* *;.*$//''
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

Espero que ajude. Por favor, comente se você tiver dúvidas sobre qualquer parte dela e eu vou tentar explicar. Ou descobrir como eu me diverti se não funcionar.

    
por 21.01.2010 / 03:47

Tags