执行外发邮件的脚本/程序

执行外发邮件的脚本/程序

我想让 SpamAssassin 学习传出邮件为普通邮件,这样收件人就会自动添加到白名单中。但我在设置时遇到了麻烦。

理想情况下,我只想让 Postfix 将电子邮件传递给脚本并继续正常处理。

我已经想出了一个解决方案content_filter,但它似乎不太可靠:特别是当我向几个人发送邮件时,有些邮件无法送达。在日志中我可以看到一些脚本被调用,但即使如此,也只针对一些其中电子邮件已实际发送。

因此,如果可能的话,我希望避免使用content_filter。还有其他方法吗?如果没有,我的设置可能有什么问题?

以下是我目前得到的信息:

master.cf:

submission inet n       -       n       -       -       smtpd
  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o content_filter=spamassassin-outgoing

spamassassin-outgoing unix -     n       n       -       -       pipe
  flags=u user=spamd:spamd argv=/usr/local/bin/learnoutgoing.sh ${sasl_username} ${sender} ${recipient}

学习输出.sh:

#!/bin/bash

if [ -z "$3" ] ; then
        echo "$0: <user> <sender> <recipient>"
        exit 1
fi

/usr/bin/logger Learn outgoing: ''"$1"'' ''"$2"'' ''"$3"''

# Save the stdin into a temporary file, we need to feed it into two
# different programs.
TMPFILE=`mktemp /tmp/outgoing.XXXXXXXXXX`
cat >$TMPFILE

# The user passed in $1 is in format 'user@domain' but we just want the user
USER=`sed 's/@.*//' <<<$1`
# Learn the mail as ham.
/usr/bin/spamc -u "$USER" --learntype ham <$TMPFILE &>/dev/null || true

# Send it.
/usr/sbin/sendmail -oi -f "$2" "$3" <$TMPFILE
# Save the return value of sendmail
RETCODE=$?

# Cleanup and exit
rm -f $TMPFILE
exit $RETCODE

答案1

我想让 SpamAssassin 学习发送的邮件是否为正常邮件,以便收件人自动添加到白名单中

您可能需要考虑sa邮件列表关于类似的设置:

这可能是个好主意,但有一件事你必须非常小心:确保你的用户足够聪明,以免他们的账户被盗用。只要有一个被盗用的账户发出大量垃圾邮件,你的贝叶斯数据就会失去作用。

您的接收电子邮件中是否存在问题,从而促使您提出问题,或者您是否试图“提前思考”并解决尚未看到的潜在问题?

我认为,使用管道的建议(在我上面提供的链接中找到)sa-learn --ham适合您的情况 - 但请考虑这可能引发的问题。

根据您的评论,稍微扩展一下我的答案:

我认为,您的问题部分归因于您的脚本 - 在Apache.org SpamAssassin 维基使用$@,而不是$1/$2/$3- 这听起来可能在某种程度上解释了你的症状。他们反而使用:

logger <<<"Spam filter piping to SpamAssassin, then to: $SENDMAIL $@"
${SPAMASSASSIN} | ${SENDMAIL} "$@"

根据您的具体需求,Spamassassin 将一些并非垃圾邮件的内容标记为垃圾邮件。我该如何分辨?可能会有所帮助:它建议定期拥有spamcsa-learn在用户收件箱上运行以进行学习。

但是,我个人对您所描述的设置有一点概念上的问题:本质上,您似乎是在说您正在为用户创建一个垃圾邮件文件夹,但担心他们不会检查它,所以您想将所有回复电子邮件列入白名单。

我认为在这种情况下,不设置垃圾邮件文件夹可能会更容易,只需允许被标记为潜在垃圾邮件的电子邮件“正常”发送给用户,但带有垃圾邮件相关的标记(除非是真的不好,就应该被隔离)。

不过,这只是我个人的看法:你大概比我更了解你的用户。我只是以为,总的来说,用户应该知道检查垃圾邮件文件夹是否有东西真的重要的。

相关内容