Неожиданный ответ сервера с использованием сокетов и протокола STMP TLS

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

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

Вот что я делаю:

  • $ conn = fsockopen () // там указываются мои данные, они соединяются.
  • Привет myhost.com (fwrite)
  • STARTTLS (написать)
  • stream_socket_enable_crypto ($ conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
  • Привет myhost.com (fwrite)
  • AUTH LOGIN (fwrite)
  • base64_encoded USERNAME (fwrite)
  • base64_encoded ПАРОЛЬ (fwrite)
  • ПОЧТА ОТ: (написать)
  • RCPT TO :; (FWRITE)
  • ДАННЫЕ (fwrite)
  • Строка со всеми моими заголовками (fwrite)
  • fclose ($ сопп);

Здесь что-то идет не так

После использования зашифрованного соединения я не могу успешно прочитать ответ сервера. Например, при попытке прочитать ответ с помощью fgets($conn,1024) после моей аутентификации это длится вечно, и, наконец, я получу сильно зашифрованный код, который не сможет найти ответ «235» (чтобы убедиться, что моя аутентификация прошла успешно).

И тогда, когда я напишу MAIL FROM, мой ответ будет выглядеть так:

.0.0 SMTP server ready

Хотя я думаю, что хотел бы что-то вроде этого:

250 2.0.0

Что-то не так, но я не знаю почему. Я надеюсь, что любой из вас, экспертов, сможет помочь мне разобраться с этой проблемой 🙂

Заранее спасибо!

Решено

На случай, если кто-то еще столкнется с этой проблемой.

Этот порядок работает

  • $ conn = fsockopen () // там указываются мои данные, они соединяются.
  • EHLO myhost.com (fwrite)
  • STARTTLS (написать)
  • stream_socket_enable_crypto ($ conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
  • EHLO myhost.com (fwrite)
  • AUTH LOGIN (fwrite)
  • base64_encoded USERNAME (fwrite)
  • base64_encoded ПАРОЛЬ (fwrite)
  • ПОЧТА ОТ: (написать)
  • RCPT TO :; (FWRITE)
  • ДАННЫЕ (fwrite)
  • Строка со всеми моими заголовками (fwrite)
  • fclose ($ сопп);

Между каждым звонком я добавлял следующее:

stream_set_timeout($conn, 300);
set_time_limit(310);

Внезапно я получил ожидаемые ответы от сервера, и письмо было успешно отправлено.

1

Решение

Решено

На случай, если кто-то еще столкнется с этой проблемой.

Этот порядок работает

  • $ conn = fsockopen () // там указываются мои данные, они соединяются.
  • EHLO myhost.com (fwrite)
  • STARTTLS (написать)
  • stream_socket_enable_crypto ($ conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
  • EHLO myhost.com (fwrite)
  • AUTH LOGIN (fwrite)
  • base64_encoded USERNAME (fwrite)
  • base64_encoded ПАРОЛЬ (fwrite)
  • ПОЧТА ОТ: (написать)
  • RCPT TO :; (FWRITE)
  • ДАННЫЕ (fwrite)
  • Строка со всеми моими заголовками (fwrite)
  • fclose ($ сопп);

Между каждым звонком я добавлял следующее:

stream_set_timeout($conn, 300);
set_time_limit(310);

Внезапно я получил ожидаемые ответы от сервера, и письмо было успешно отправлено.

— entiendoNull

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]