短篇故事

我使用.QMAIL文件有一个PHP脚本过滤传入邮件。该脚本运行良好并记录所有活动,但据我所知,当我的脚本返回DOT-QMAIL EXIT CODE 99时,不应执行最后一个.QMail行,该代码99应该停止进一步处理.QMail行。

很长的故事:

我正在使用Linux 2.6.18-4-686下的Plesk面板9.3.0版本。

我的PHP CLI版本是5.2.0-8+ETCH16(CLI)(构建:2009年11月24日11:14:47)。

对Spamassassin,Web博士和Zen.spamhaus.org及其结果不满意,我决定创建自己的PHP脚本来过滤所有传入邮件。

(除了某些人可能认为“这个人正在重新发明轮子”的人:我个人和他们的特定需求,因此,经过成千上万的测试,这是最好的选择,因为它避免了黑匣子型号和让我以全面的方式控制该过程,还可以释放服务器资源并打开其他酷功能的门)。

但是,我很难在服务器上安装脚本。

Qmailfilter是我的脚本,您可以在 http://titanpad.com/1ifdj1jvb0

我在 /var/qmail/mailnames/customerdomain.com/username/.qmail 成为:

|/var/my/qmailfilter/qmailfilter
|/usr/bin/deliverquota ./Maildir

当我向该用户帐户发送消息时,QmailFilter PHP脚本完美地执行和日志,返回出口代码(丢弃消息的99,为0来继续前往Next .Qmail线以传递消息)。

事实证明,无论我尝试过的许多退出代码,它都会传达信息。

脚本(请参阅第174行)在没有任何空格之前或之后输出一个文本退出代码。我试过 exit($code), print $code, echo($code) 乃至 file_put_contents("php://stdout", $code), ,并且 exit(chr($code)).

dot-qmail 代码是:

0-成功(转到Next .Qmail线)

99-成功和中止(请勿执行下一行)

100-永久错误(反弹)

111-软错误(稍后重试)

资料来源:大Qmail图片。

其他尝试/实验:

  1. 删除了 希邦 线 (#!/usr/bin/php)并更改了第一个 .qmail 线到 |php -q /var/my/qmailfilter/qmailfilter

  2. 检查了脚本的最后一行以进行白色

  3. 阅读dot-qmail人文件,但没有找到任何结论

  4. 加入.qmail线:

    |/var/my/qmailfilter/qmailfilter |/usr/bin/viresquota ./maildir

在这种情况下,我收到的消息只有适当的返回代码,而没有任何标头,主题或消息主体。

  1. 评论(#)第二 .qmail 行,但停止接收任何类型的消息。

  2. 编辑 /var/qmail/control/defaultdelivery 添加第一行:

    | php/var/my/qmailfilter/qmailfilter |/usr/bin/virssquota ./maildir

并更名为用户 .qmail 归档到 _qmail. 。相同的结果。

我应该通过PHP脚本传递消息并忘记退出代码吗?

如果是这样,是否足以将消息保存到用户MailDir/New?

如果是这样,消息文件名很重要?

任何想法都将不胜感激。非常感谢!

更新:对于那些需要它的人,我在Icebex.com上发布了最终脚本

有帮助吗?

解决方案

我只快速查看代码,但是看起来您正在使用字符串值。 exit('99')exit(99) 不一样。确保使用整数而不是字符串。

  • 出口('99')将打印99并返回0。

  • 出口(99)将返回99。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top