25
PHP 5.6에서 스트림 소켓과 SSL에 문제가 있습니다. SSL이 출력을 버퍼링하는 것 같습니다. 아래 예제에서 "ehlo"명령은 무시됩니다 (서버가 응답하지 않음). 하지만 "ehlo"다음에 다른 메일이 전송되면 fwrite
에 대한 또 다른 호출의 새 행은 서버가 응답을 보냅니다.SSL을 사용하는 스트림 소켓
$errno = '';
$errstr = '';
$timeout = 5;
$streamContext = stream_context_create();
$host = 'ssl://smtp.some.server.com:465';
$stream = stream_socket_client($host, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext);
stream_set_blocking($stream, 1);
stream_set_timeout($stream, $timeout);
stream_set_write_buffer($stream, 0);
$fgets = fgets($stream);
print_r($fgets);
fwrite($stream, "ehlo [127.0.0.1]\r\n");
$response = '';
do {
$line = fgets($stream);
$response .= $line;
} while (null !== $line && false !== $line && ' ' != $line{3});
print_r($response);
fclose($stream);
나는 응답을 가지고 :
220 epicserver.net.pl ESMTP IdeaSmtpServer v0.80.2 ready.
는 (먼저 print_r
에서이다).
fwrite($stream, "ehlo [127.0.0.1]\r\n");
I 추가 소켓 쓰기를 추가
나는 그것이 PHP의 SSL 래퍼 문제가 있는지 확인되는 Stunnel을 사용하려고했습니다
220 epicserver.net.pl ESMTP IdeaSmtpServer v0.80.2 ready.
250-epicserver.net.pl Hello ip-166-242.pl [94.183.162.232], pleased to meet you
250-PIPELINING
250-ENHANCEDSTATUSCODES
250-SIZE
250-8BITMIME
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250 HELP
내가 변경할 때 $host
$host = 'localhost:110;'
에 : fwrite($stream, "\n");
출력은 괜찮습니다 (내 stunnel 구성) 모든 것이 완벽하게 작동합니다 (특별한 fwrite
메서드를 추가하지 않고).
누구에게이 문제가 발생 했습니까?
$fgets = '';
while (is_resource($stream) && !feof($stream)) {
$fgets .= fgets($stream);
}
예컨대 않습니다 – VolkerK
예, 해당 테스트 코드는 swiftmailer 구현에서 가져온 것입니다. –
그렇다면, ssl : //smtp.some.server.com : 465와 함께 swiftmailer를 사용하면 핸드 셰이크가 완료되지 않아 작동하지 않습니까? – VolkerK