Подключение к Gmail SMTP через сокет возвращает разные ответы для каждого сервера

Я пытаюсь понять, почему открытие сокета для сервера Gmail через SSL обеспечивает разные ответы для разных серверов. Это мешает мне подключиться к Gmail для отправки электронных писем.

Ниже приведен очень простой скрипт:

<?php

$smtp_connect = fsockopen('ssl://smtp.googlemail.com', 465,
    $errno,
    $errstr,
    300);

var_dump(fgets($smtp_connect, 512));

?>

На сервере 1 [ssl cert не установлен], вывод приведенного выше кода: string(57) "220 smtp.googlemail.com ESMTP s89sm726209qkl.44 - gsmtp "

На сервере 2 [ssl cert Установлен], вывод приведенного выше кода: string(71) "220-mycompany.pro.com ESMTP Exim 4.87 #1 Wed, 26 Oct 2016 07:42:49 -0400 "

Может кто-нибудь объяснить, почему это происходит, и как я могу заставить сервер 2 вести себя так же, как сервер 1?

Обновление: я тоже пробовал smtp.gmail.com, вывод такой же, как при использовании smtp.googlemail.com,

1 ответ

Решение

В строке вы получите приветственное сообщение SMTP. Совершенно нормально, что разные серверы выдают разные приветственные сообщения. Даже нормально, что ответ на отправленные вами команды отличается. Это означает, что при обмене данными с SMTP-сервером вы не должны воспринимать фиксированные строки в качестве ответа, а должны выполнять правильный анализ SMTP. См. Стандарт SMTP (RFC 2821) для подробностей об этом протоколе.

Другие вопросы по тегам