php sockets ssl smtp

php - Stream socket con SSL



sockets smtp (1)

Tengo un problema con Stream Socket y SSL en PHP 5.6. Parece que SSL está amortiguando la salida. En el ejemplo siguiente, se ignora el comando "ehlo" (el servidor no responde). Pero cuando se envía algo más después de "ehlo", por ejemplo, una nueva línea en otra llamada a fwrite , el servidor envía una respuesta.

$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);

Tengo una respuesta:

220 epicserver.net.pl ESMTP IdeaSmtpServer v0.80.2 ready.

(es de la primera print_r ).

Pero cuando después de la línea: fwrite($stream, "ehlo [127.0.0.1]/r/n"); Agrego escritura de socket adicional: fwrite($stream, "/n"); la salida está bien:

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

He intentado usar stunnel para comprobar si se trata de un problema de contenedor SSL de PHP y cuando cambio $host a $host = ''localhost:110;'' (mi configuración de stunnel) todo funciona perfectamente (sin agregar ese método especial de fwrite ).

¿Alguien se enfrentó a ese problema?


Reemplace los primeros elementos con este código, para asegurarse de que comprende la terminación de línea correctamente:

$fgets = ''''; while (is_resource($stream) && !feof($stream)) { $fgets .= fgets($stream); }