Короткая история
У меня есть PHP-скрипт, фильтрующий входящую почту с использованием файла .qmail.Скрипт работает отлично и регистрирует всю активность, но, насколько я знаю, последняя строка .qmail не должна выполняться, когда мой скрипт возвращает код выхода dot-qmail 99, который должен прекратить обработку дальнейших строк .qmail.
Длинная история:
Я использую Parallels Panel версии 9.3.0 под Linux 2.6.18-4-686.
Моя версия PHP CLI5.2.0-8 + etch16 (cli) (построено: 24.11.2009 11:14:47).
Не удовлетворены Spamassassin, Dr. Web и zen.spamhaus.org и их результатами, я решилсоздать свой собственный скрипт PHP для фильтрации всей входящей почты.
(Если не считать некоторых из вас, кто может подумать, что «этот парень заново изобретает колесо»: я знаю своих клиентов лично и их конкретные потребности, поэтому после тысяч тестов это оказалось лучшим вариантом, потому чтоон избегает моделей «черного ящика» и позволяет мне всесторонне контролировать процесс, также освобождая ресурсы сервера и открывая двери для других интересных функций).
Однако мне трудно установить скрипт на сервере.
qmailfilter - это мой скрипт, и вы можете увидеть его в http://titanpad.com/1IFDj1jvB0
Я отредактировал существующий файл .qmail в /var/qmail/mailnames/customerdomain.com/username/.qmail
так:
|/var/my/qmailfilter/qmailfilter
|/usr/bin/deliverquota ./Maildir
qmailfilter PHPСценарий выполняется и отлично регистрируется, когда я отправляю сообщение этой учетной записи пользователя, возвращает код выхода (99 для удаления сообщения и 0 для перехода к следующей строке .qmail, доставляющей сообщение).
Оказывается, что он доставляет сообщение независимо от многих кодов выхода, которые я уже пробовал.
Сценарий (см. Строку 174) выводит код выхода текста безлюбые пробелы до или после.Я пытался exit($code)
, print $code
, echo($code)
и даже file_put_contents("php://stdout", $code)
, а также exit(chr($code))
.
dot-qmail
коды:
0 - Успех (перейти к следующему.qmail строка)
99 - Успешное завершение и прерывание (не выполнять следующие строки)
100 - постоянная ошибка (отказов)
111 - программная ошибка (повторите попытку позже)
Источник: The Big Qmail Picture.
Другие попытки / эксперименты:
Удалена строка shebang (#!/usr/bin/php
)и изменил первую .qmail
строку на |php -q /var/my/qmailfilter/qmailfilter
Проверено последнюю строку скрипта на наличие пробелов
Чтение dot-qmail manфайл, но ничего не было найдено
Присоединенные строки .qmail:
| / var / my / qmailfilter / qmailfilter | / usr / bin / deliveryquota ./Maildir
В этом случае я получил сообщение, содержащее только правильный код возврата без заголовка, темы или тела сообщения.
Закомментировал (#) вторую .qmail
строку, но прекратил получать любые виды сообщений.
Отредактировал /var/qmail/control/defaultdelivery
для добавления первой строки:
| php / var / my / qmailfilter / qmailfilter | / usr / bin / deliveryquota ./Maildir
и переименованный файл пользователя .qmail
в _qmail
.Те же результаты.
Должен ли я доставить сообщение через PHP-скрипт и забыть коды выхода?
Если это так, достаточно ли сохранить сообщение пользователю Maildir / new?
Если да, важно ли имя файла сообщения?
Любая идея будет оценена.Спасибо большое!
ОБНОВЛЕНИЕ: Для тех из вас, кому это нужно, я опубликовал финальный скрипт на icebex.com slash qmailfilter