Как я могу проверить, открыты ли порты 465 и 587 с PHP?

Я пытаюсь использовать PHPMailer для отправки электронной почты с SMTP и gmail. Точный скрипт, который я использую, работает на других серверах, но он не работает на сервере этой хостинговой компании.

Я проверил phpinfo() и это говорит мне о том, что allow_url_fopen is on и нет disabled_functions как fopen в списке.

сценарий терпит неудачу, и он говорит мне:

SMTP -> ERROR: Failed to connect to server: Connection timed out (110) 

или

SMTP Error: Could not authenticate.

Я предполагаю, что это потому, что он не может подключиться, потому что снова эта работа на других серверах и учетные данные проверки подлинности верны.

поэтому я спрашиваю в более общем плане, есть ли способ использовать PHP или jailshell ssh чтобы проверить и посмотреть, действительно ли порты открыты или нет?

1 ответов


вы можете проверить наличие открытых/доступных портов с помощью fsockopen:

$fp = fsockopen('127.0.0.1', 25, $errno, $errstr, 5);
if (!$fp) {
    // port is closed or blocked
} else {
    // port is open and available
    fclose($fp);
}

...где 5 - время ожидания в секундах до сбоя вызова.

вероятно, это связано с проблемой брандмауэра, когда ваш хостинг-провайдер блокирует подключение к исходящим сокетам и/или определенным портам. Имейте в виду, что это очень обычная конфигурация безопасности для блокировки исходящих портов SMTP. Назад в тот день, только порт 25 был заблокирован, но я начинаю видеть все больше и больше SSL варианты также блокируются.

большинство провайдеров и хостинг-компаний позволят вам подключаться только к собственному SMTP-серверу, чтобы предотвратить передачу нежелательной почты спамерами.