Функция фильтрации почтового фильтра PHP: коды выхода не распознаны в файле .qmail

StackOverflow https://stackoverflow.com/questions/3673835

  •  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.

Другие попытки / эксперименты:

  1. Удален шебанг линия (#!/usr/bin/php) и изменил первый .qmail линия |php -q /var/my/qmailfilter/qmailfilter

  2. Проверил последнюю строку скрипта для пробел

  3. Прочитайте файл MAN DOT-QMAIL, но ничего убедительного было найдено

  4. Присоединился к линию .qmail:

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

В этом случае у меня есть сообщение, имеющее только правильный код возврата без какого-либо заголовка, объекта или тела сообщения.

  1. Прокомментировал (#) второй .qmail линия, но перестала получать какие-либо сообщения.

  2. Отредактировано /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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top