Функция фильтрации почтового фильтра PHP: коды выхода не распознаны в файле .qmail
-
01-10-2019 - |
Вопрос
Короткий рассказ
У меня есть фильтрация скрипта PHP, используя файл .qmail. Сценарий отлично работает и регистрирует все действия, но, насколько я знаю, последняя линия .qmail не должна быть выполнена, когда мой скрипт возвращает код выхода 99 dot-qmail, который должен прекратить обработку дополнительных .qmail строки.
Длинная история:
Я использую Parallels Plesk Panel версии 9.3.0 под Linux 2.6.18-4-686.
Моя версия PHP CLI - 5.2.0-8 + ETCH16 (CLI) (построена: 24 ноября 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
SMAILFILTER PHP Script Выполняется и теряет идеально, когда я отправляю сообщение на эту учетную запись пользователя, возвращает код выхода (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 - мягкая ошибка (повторить попытку позже)
Источник: большая картина Qmail.
Другие попытки / эксперименты:
Удален шебанг линия (
#!/usr/bin/php
) и изменил первый.qmail
линия|php -q /var/my/qmailfilter/qmailfilter
Проверил последнюю строку скрипта для пробел
Прочитайте файл MAN DOT-QMAIL, но ничего убедительного было найдено
Присоединился к линию .qmail:
| / var / my / qmailfilter / qmailfilter | / usr / bin / failquota ./maildir
В этом случае у меня есть сообщение, имеющее только правильный код возврата без какого-либо заголовка, объекта или тела сообщения.
Прокомментировал (#) второй
.qmail
линия, но перестала получать какие-либо сообщения.Отредактировано
/var/qmail/control/defaultdelivery
Чтобы добавить первую строку:| php / var / my / qmailfilter / qmailfilter | / usr / bin / bravelquota ./maildir
и переименован пользователь .qmail
файл к _qmail
. Отказ Те же результаты.
Должен ли я доставить сообщение через Script PHP и забыть за выходом?
Если это так, это достаточно, чтобы сохранить сообщение пользователю MailDir / New?
Если это так, важно ли имя файла сообщения?
Любая идея будет оценена. Большое спасибо!
Обновление: для тех из вас, кому это нужно, я опубликовал последний скрипт на icebex.com slash qmailfilter
Решение
Я только посмотрел только на код, но он выглядел так, как вы использовали строковые значения. exit('99')
а также exit(99)
не то же самое. Убедитесь, что вы используете целые числа и не строки.
Выход ('99 ') будет печать 99 и возвращать 0.
Выход (99) вернет 99.