我希望 Postfix 服务器将每条消息传递到特定传输,并中继到第二台服务器。在 master.cf 中,我有以下传输:
zarafa unix - n n - 10 pipe
flags= user=vmail argv=/usr/bin/zarafa-dagent ${user}
因为我无法让 Postfix 传递到两个传输器,所以我可能需要一个包装器传输器,也许使用 procmail,它可以传递到 zarafa-dagent 并中继到第二台服务器(不仅仅是向前到某个地址;中继到第二台服务器)。
它也可以是调用 sendmail 或其他什么的脚本,但目前我不知道如何进行。
像 bcc_maps 这样的东西不起作用,因为它不会生成正确的 X-Original-To 和 Delivered-To 标头。它需要发送到与原始服务器相同的中继服务器上的收件人。
编辑:也许我应该澄清一些事情:在备份机器上,我不能拥有与主服务器相同的邮箱;只有一个邮箱。如果我确实拥有所有邮箱,那么向该服务器发送密件抄送就可以了。但是因为在主服务器上,电子邮件是使用自定义 zarafa 传输传递的,所以我无法让辅助服务器知道有哪些邮箱。因此我想中继到该服务器,并且该服务器也认为自己是相关域的本地服务器。这样,Delivered-To 标头就会告诉我原始 RCTP 是什么。
答案1
有了。。的帮助这一页,我想我快到了,但还没有。我还不知道如何从 bash 中继到第二台服务器。
我在 master.cf 中进行了传输:
filtertest unix - n n - 10 pipe
flags=Rq user=filter null_sender=
argv=/usr/local/bin/filter-test.sh -f ${sender} -- ${recipient}
我将 content_filter 选项添加到 smtp 传输中(当它正常工作时也会将其添加到 smtps 中):
smtp inet n - - - - smtpd
-o content_filter=filtertest:dummy
我有 filtertest 脚本:
#!/bin/bash
# Simple shell-based filter. It is meant to be invoked as follows:
# /path/to/script -f sender recipients...
# Localize these. The -G option does nothing before Postfix 2.3.
INSPECT_DIR=/var/spool/filter
SENDMAIL="/usr/sbin/sendmail -G -i" # NEVER NEVER NEVER use "-t" here.
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15
# Start processing.
cd $INSPECT_DIR || {
echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
cat >in.$$ || {
echo Cannot save mail to file; exit $EX_TEMPFAIL; }
# Relay message to backup server
#TODO: how?
$SENDMAIL "$@" <in.$$
exit $?
剩下的是:我该如何制作这个 bash 脚本中继(不转发) tmp 文件的内容到第二台服务器?
答案2
我需要做一些类似的事情,关于你的问题,postfix 似乎确实不允许一次进行多次交付。
我设法解决问题的方法是使用一个小包装器来捕获请求,然后运行所需的调度。
唯一的问题是 postfix 会说“好的,已交付!”,但它并不知道交付是否成功。
无论如何,这是我的包装器的代码:
#!/bin/bash
USER=`echo $2 | awk -F"@" '{print $1}'`
NEXTHOP=`echo $2 | awk -F"@" '{print $2}'`
/usr/bin/sudo -u vmail /usr/bin/procmail -t -m USER=$USER NEXTHOP=$NEXTHOP /etc/procmailrc
“USER” 是电子邮件中包含的用户名,“NEXTHOP” 是电子邮件中包含的域... 更明确地说:USER@NEXTHOP。
然后,该消息将作为标准输入传递到脚本,允许您获取它并自行使用。
我只是希望它对您有用 :)