Большинство веб-приложений так или иначе используют почтовые сервисы. Одни для отправки уведомлений, другие — для приема сообщений. Поэтому очень важно знать, доступен ли smtp или pop3 в конкретный момент? Задачу проверки доступности легко решить с помощью скрипта на PHP. Приведенный ниже скрипт позволяет определять доступность хоста по порту, при этом для smtp и pop3 идет опрос сервера, чтобы убедиться, что он действительно функционирует.
<?php function checkConnection(&$connection, $type, $host = null) { if ($type == "smtp") { $input = fgets($connection, 1024); $diag_init = intval(substr($input,0,3)); fputs($connection, "HELO $host" . "\r\n"); $input = fgets($connection, 1024); $diag_helo = intval(substr($input,0,3)); fputs($connection, "QUIT" . "\r\n"); $input = fgets($connection, 1024); if ($diag_helo == 250 && $diag_init == 220) { return true; } } elseif ($type == "pop3") { $input = fgets($connection, 1024); $ok = trim(substr($input,0,3)); $ready = strpos($input, "ready"); fputs($connection, "QUIT" . "\r\n"); $input = fgets($connection, 1024); if ($ok == "+OK" && $ready !== false) { return true; } } else { //если не указан известный тип соединения, то считаем, что оно установлено нормально echo 'Verification was not performed' . "\r\n"; return true; } return false; } // получить параметры теста $host = trim($_GET['host']); $type = trim($_GET['type']); $port = abs(intval($_GET['port'])); if ($host == "") { $host = 'localhost'; } if ($port < 1) { $port = 25; } $connection = @fsockopen($host, $port); if (is_resource($connection)) { if (checkConnection($connection, $type, $host)) { echo $host . ':' . $port . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.' . "\r\n"; } else { echo $host . ':' . $port . ' connected, but not valid.' . "\r\n"; } fclose($connection); } else { echo $host . ':' . $port . ' is not responding.' . "\r\n"; } ?>
Этот скрипт легко можно подключить к веб-мониторингу Zabbix и получать актуальную информацию о доступности smtp и pop3.