关于我
 

xjpvictor's Blog
小老鼠,上灯台,两只耳朵竖起来

vps邮件服务器 (8)


各种折腾·emaillinuxvps

本文最后编辑于超过2069天以前,部分内容可能已经失效

继续 VPS 搭建邮件服务器的系列

这次是内容过滤。当这个系列还在第二篇的时候,我就开启了 Spamassassin 来过滤垃圾邮件。当时的设置是

smtp      inet  n       -       n       -       -       smtpd -o content_filter=spamassassin
spamassassin    unix    -       n       n       -       -       pipe user=spamd argv=/usr/bin/vendor_perl/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

现在我有了一个新的需求,我需要在 spamassassin 之后再进行一个内容过滤。

写脚本的部分很简单,postfix 的文档中有详细介绍。

简单来说,就是创建一个这样的脚本

#!/bin/sh

# 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; }

# Specify your content filter here.
# filter <in.$$ || {
#   echo Message content rejected; exit $EX_UNAVAILABLE; }

$SENDMAIL "$@" <in.$$

exit $?

并建立一个/var/spool/filter目录,并改为spamd用户可读写。

之后将/etc/postfix/master.cfspamassassin的那一行改为spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/vendor_perl/spamc -f -e /path/to/script -f ${sender} ${recipient}

然而,经过测试,postfix 会给出Exec format error的错误,并且停止邮件投递。

最后尝试各种解决方法后发现,如果需要由 spamassassin 来执行下一个内容过滤器,那么必须使用可执行二进制文件。也就是说,需要把上面那个脚本转换成可执行二进制文件。最终用shc转换后搞定。

本文 "vps邮件服务器 (8)" 由 K. Huang 首先发表于 xjpvictor's Blog 并以 CC BY-NC 4.0 许可证发布 © 2018
转载注明引用来源 https://blog.xjpvictor.info/2018/08/email-server-8/


推广:使用 DigitalOcean 搭建属于你自己的博客,每月低至 5 美元,全球多数据中心,稳定高速

打赏我

评论

你的邮箱地址不会被公开。必填项以 * 标出

无意义或不相关评论将被删除

允许使用以下html标签:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

你可以上传文件,粘贴代码或长文至 Drop.it.r

本博客是言论不自由博客,评论只接受询问及赞同,不同观点请出门左转微博/发表于自己的博客。谢谢合作!

评论意味着你 同意 上传部分私人数据,包括邮箱和 IP, 这些数据不会被分享给第三方,不会用于商业用途或再推广用途。

更多相似文章