邮件命令:内容filter在后缀的作品?

我在我的机器(linux)中使用Postfix。

当我通过命令行发送邮件给本地用户telnet localhost 25时,我的邮件被一个内容filter(例如:spamassassin)=>parsing没有问题。

但是当我用邮件命令 (或sendmail命令或邮件php)发送一封邮件给同一个本地用户,我的邮件被发送,但不是由content-filter =>parsing,那为什么?

当我使用邮件命令时,为什么我的邮件没有被内容filterparsing?

我的后缀configuration是非常基本的:

postconf -n:

alias_database = hash:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = no config_directory = /etc/postfix html_directory = /usr/share/doc/postfix/html inet_interfaces = all mailbox_size_limit = 0 mydestination = localhost.localdomain, localhost, localhost.localdomain, localhost myhostname = localhost mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 myorigin = /etc/mailname recipient_delimiter = + relayhost = smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) 

postconf -M:

 smtp inet n - n - - smtpd -o content_filter=spamassassin pickup fifo n - - 60 1 pickup cleanup unix n - - - 0 cleanup qmgr fifo n - n 300 1 qmgr tlsmgr unix - - - 1000? 1 tlsmgr rewrite unix - - - - - trivial-rewrite bounce unix - - - - 0 bounce defer unix - - - - 0 bounce trace unix - - - - 0 bounce verify unix - - - - 1 verify flush unix n - - 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - - - - smtp relay unix - - - - - smtp showq unix n - - - - showq error unix - - - - - error retry unix - - - - - error discard unix - - - - - discard local unix - nn - - local virtual unix - nn - - virtual lmtp unix - - - - - lmtp anvil unix - - - - 1 anvil scache unix - - - - 1 scache maildrop unix - nn - - pipe flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient} uucp unix - nn - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) ifmail unix - nn - - pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) bsmtp unix - nn - - pipe flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient scalemail-backend unix - nn - 2 pipe flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension} mailman unix - nn - - pipe flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user} spamassassin unix - nn - - pipe user=mail argv=/usr/bin/spamc -u ${user} -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} 

我重复我的问题:当我使用telnet localhost 25发送邮件给本地用户(guest)时,spamassassinparsing邮件,syslog显示:

 Feb 4 15:05:42 localhost postfix/smtpd[3919]: connect from localhost[::1] Feb 4 15:05:50 localhost postfix/smtpd[3919]: EBC2460DBF: client=localhost[::1] Feb 4 15:05:59 localhost postfix/cleanup[3922]: EBC2460DBF: message-id=<20150204140550.EBC2460DBF@localhost> Feb 4 15:05:59 localhost postfix/qmgr[3883]: EBC2460DBF: from=<[email protected]>, size=342, nrcpt=1 (queue active) Feb 4 15:05:59 localhost spamd[18634]: spamd: connection from localhost [127.0.0.1] at port 48540 Feb 4 15:05:59 localhost spamd[18634]: spamd: processing message <20150204140550.EBC2460DBF@localhost> for guest:122 Feb 4 15:06:08 localhost spamd[18634]: spamd: clean message (0.2/5.0) for guest:122 in 9.1 seconds, 296 bytes. Feb 4 15:06:08 localhost spamd[18634]: spamd: result: . 0 - ALL_TRUSTED,MISSING_HEADERS scantime=9.1,size=296,user=guest,uid=122,required_score=5.0,rhost=localhost,raddr=127.0.0.1,rport=48540,mid=<20150204140550.EBC2460DBF@localhost>,autolearn=ham Feb 4 15:06:08 localhost spamd[18632]: prefork: child states: II Feb 4 15:06:08 localhost postfix/pickup[3881]: 6844560FDB: uid=8 from=<[email protected]> Feb 4 15:06:08 localhost postfix/pipe[3923]: EBC2460DBF: to=<[email protected]>, orig_to=<guest>, relay=spamassassin, delay=22, delays=12/0.01/0/9.2, dsn=2.0.0, status=sent (delivered via spamassassin service) Feb 4 15:06:08 localhost postfix/qmgr[3883]: EBC2460DBF: removed Feb 4 15:06:08 localhost postfix/cleanup[3922]: 6844560FDB: message-id=<20150204140550.EBC2460DBF@localhost> Feb 4 15:06:08 localhost postfix/qmgr[3883]: 6844560FDB: from=<[email protected]>, size=656, nrcpt=1 (queue active) Feb 4 15:06:08 localhost postfix/local[3928]: 6844560FDB: to=<[email protected]>, relay=local, delay=0.18, delays=0.12/0.01/0/0.05, dsn=2.0.0, status=sent (delivered to mailbox) Feb 4 15:06:08 localhost postfix/qmgr[3883]: 6844560FDB: removed 

=>没问题。

但是,如果我只使用邮件命令:

 echo "test" | mail -s "test" guest 

,邮件被发送,但spamassassin没有parsing邮件,因为syslog显示:

 Feb 4 15:09:36 localhost postfix/pickup[3881]: B6C1960DC0: uid=1000 from=<guest> Feb 4 15:09:36 localhost postfix/cleanup[3956]: B6C1960DC0: message-id=<20150204140936.B6C1960DC0@localhost> Feb 4 15:09:36 localhost postfix/qmgr[3883]: B6C1960DC0: from=<[email protected]>, size=339, nrcpt=1 (queue active) Feb 4 15:09:36 localhost postfix/local[3957]: B6C1960DC0: to=<[email protected]>, orig_to=<guest>, relay=local, delay=0.18, delays=0.12/0/0/0.07, dsn=2.0.0, status=sent (delivered to mailbox) Feb 4 15:09:36 localhost postfix/qmgr[3883]: B6C1960DC0: removed 

一个主意 ?

谢谢,亲切。

对于队列后的内容过滤,postfix有两种实现方法,简单和高级的内容filter。 您可以在官方文档中阅读这两种方法的解释。

从你的问题,我们可以知道你使用简单的内容过滤方法。 该符号是postconf -M (或master.cf的内容)的输出。 它使用pipe道方法通过命令将电子邮件传递给垃圾邮件刺客

 /usr/bin/spamc -u ${user} -e /usr/sbin/sendmail -oi -f ${sender} ${recipient} 

上面的postfix官方文档也告诉你简单的内容filter的主要限制

第一个例子很简单,但有一个主要的局限性,第二个例子会解决这个问题。 Postfix通过smtpd(8)服务器接收来自networking的未经过滤的邮件,并使用Postfixpipe道(8)递送代理将未经过滤的邮件发送到内容filter。 内容filter使用Postfix sendmail(1)命令将过滤后的邮件注入Postfix,以便Postfix可以将其发送到最终目的地。

这意味着通过Postfix sendmail(1)命令提交的邮件不能被内容过滤。

所以,你看到的行为是正常的。

解决scheme:如何将content_filter用于通过邮件提交的邮件命令?

您可以考虑将您的设置切换为使用高级内容过滤方法。 这个线程在垃圾邮件刺客邮件列表告诉你一些替代实现这个: amavisd或spampd