Я использую базовый класс PHP для запуска команд сетевого протокола SpamAssassin на удаленном сервере. Я установил SpamAssassin после руководства, просто пропустив часть PostFix.
Независимо от того, какую команду я запускаю (CHECK
, REPORT
, PING
и т.д.), Я получаю пустой или пустой ответ.
Вот базовый пример PING, который должен вернуться в руководстве: SPAMD/1.5 0 PONG\r\n
. Вместо этого это пустой ответ.
$socket = fsockopen($hostname = 'my-remote-server-ip', $port = 783, $errno, $errstr);
fwrite($socket, "PING SPAMC/1.5\r\n");
$response = fread($socket,99999);
die("<pre>" . print_r($response,1) . "</pre>");
Я что-то не так с моим письмом/чтением? Какие параметры следует проверять на моем удаленном сервере?
Оказывается, мое удаленное соединение было отклонено. Я понял это, запустив spamd -D -i my.remote.ip -p 783
, который активно показывает вам информацию для отладки для spamd.
Этот журнал показал мне warn: spamd: unauthorized connection from my.full.local.addr [my.local.ip] at port 54006 at/usr/sbin/spamd line 1271.
Мне нужно было явно разрешить локальный IP-адрес с помощью -A
. Итак, мне нужно запустить spamd из командной строки на моем удаленном сервере со spamd -D -i my.remote.ip -p 783 -A my.local.ip
.
Запуск моего примера теперь показывает warn: spamd: bad protocol: header error: (EOF during headers)
, из-за того, как я открываю сокет в моем простом примере. Если я использую репозиторий GitHub, который я связал, он теперь корректно вернется.