2015-12-03 2 views
1

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

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

Это то, что я делаю:

  • $ сопп = fsockopen() // мои детали идет туда, она соединяет.
  • HELO myhost.com (FWRITE)
  • STARTTLS (FWRITE)
  • stream_socket_enable_crypto ($ сопп, правда, STREAM_CRYPTO_METHOD_TLS_CLIENT);
  • HELO myhost.com (FWRITE)
  • AUTH LOGIN (FWRITE)
  • base64_encoded ИМЯ_ПОЛЬЗОВАТЕЛЯ (FWRITE)
  • base64_encoded ПАРОЛЬ (FWRITE)
  • MAIL FROM: (FWRITE)
  • RCPT TO :; (FWRITE)
  • DATA (FWRITE)
  • Строка со всеми своими заголовками (FWRITE)
  • fclose ($ Conn);

Это где-то идет не так

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

А потом, когда я пишу MAIL FROM мой ответ будет выглядеть следующим образом:

.0.0 SMTP server ready 

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

250 2.0.0 

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

Заранее благодарен!

решаемые IT

В случае, если кто-то бежит в эту проблему.

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

  • $ сопп = fsockopen() // мои детали идет туда, она соединяет.
  • EHLO myhost.com (FWRITE)
  • STARTTLS (FWRITE)
  • stream_socket_enable_crypto ($ сопп, правда, STREAM_CRYPTO_METHOD_TLS_CLIENT);
  • EHLO myhost.com (FWRITE)
  • AUTH LOGIN (FWRITE)
  • base64_encoded ИМЯ_ПОЛЬЗОВАТЕЛЯ (FWRITE)
  • base64_encoded ПАРОЛЬ (FWRITE)
  • MAIL FROM: (FWRITE)
  • RCPT TO :; (FWRITE)
  • DATA (FWRITE)
  • Строка со всеми своими заголовками (FWRITE)
  • fclose ($ Conn);

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

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

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

+0

Почему вы не можете использовать PHPMailer? – Daan

+0

Ну, мы вносим изменения в настраиваемый движок, который до сих пор работал отлично.Я думал, что это займет больше времени, чтобы изменить все, чтобы работать с PHPMailer, чем просто начать соединение TLS в том, что мы уже получили. Теперь я так в нее, поэтому я не хочу его бросать. Я хочу знать, что пойдет не так, как хорошо;) – entiendoNull

+0

Я бы сократил ваши потери и использовал PHPMailer; взвесьте время, затрачиваемое на изменение кода, чтобы использовать PHPMailer против того, как долго вам придется переписывать одну и ту же функциональность самостоятельно. Помимо этого я желаю вам удачи в этом; Я потратил дни, пытаясь сделать это, и в конце концов сдался и вместо этого использовал PHPMailer. – SteJ

ответ

0

решаемые IT

В случае, если кто-то бежит в эту проблему.

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

  • $ сопп = fsockopen() // мои детали идет туда, она соединяет.
  • EHLO myhost.com (FWRITE)
  • STARTTLS (FWRITE)
  • stream_socket_enable_crypto ($ сопп, правда, STREAM_CRYPTO_METHOD_TLS_CLIENT);
  • EHLO myhost.com (FWRITE)
  • AUTH LOGIN (FWRITE)
  • base64_encoded ИМЯ_ПОЛЬЗОВАТЕЛЯ (FWRITE)
  • base64_encoded ПАРОЛЬ (FWRITE)
  • MAIL FROM: (FWRITE)
  • RCPT TO :; (FWRITE)
  • DATA (FWRITE)
  • Строка со всеми своими заголовками (FWRITE)
  • fclose ($ Conn);

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

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

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

- entiendoNull