我正在尝试使用 procmail将某个域的所有消息发送到RT(请求跟踪器)。不过,这更多是关于 .procmailrc 文件的问题。
这是我当前的 .procmailrc 文件:
#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
}
您看到我的 .procmailrc 文件有问题吗?如果队列存在,它可以正常工作,但在那之后,它只是将邮件发送到 /var/mail/username。我想丢弃电子邮件并返回错误消息。
老实说,我有一段时间没有使用 procmail,所以如果这不能立即起作用,我深表歉意。
首先,您拥有的脚本中的嵌套导致了问题,因为它几乎将食谱切成了两半。无论如何它们都不是必需的,所以我删除了它们。我还简化了结构并进行了设置,使其永远不会落入本地邮箱。
希望有帮助。如果您对其中的任何部分有疑问,请发表评论,我会尽力解释。或者弄清楚如果它不起作用,我是如何搞砸的。