SharePoint Alfresco PHP MySQL
О сайте Контакты
суббота, 18 мая 2013 г.

Проверка доступности smtp и pop3 с помощью PHP

Большинство веб-приложений так или иначе используют почтовые сервисы. Одни для отправки уведомлений, другие — для приема сообщений. Поэтому очень важно знать, доступен ли 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.

Sergey Lysenko, суббота, 18 мая 2013 г.

Комментарии: