Это мой первый раз, когда я делаю что-либо с 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);
Неожиданно я получил ожидаемые ответы от сервера, и почта была успешно отправлена.
Почему вы не можете использовать PHPMailer? – Daan
Ну, мы вносим изменения в настраиваемый движок, который до сих пор работал отлично.Я думал, что это займет больше времени, чтобы изменить все, чтобы работать с PHPMailer, чем просто начать соединение TLS в том, что мы уже получили. Теперь я так в нее, поэтому я не хочу его бросать. Я хочу знать, что пойдет не так, как хорошо;) – entiendoNull
Я бы сократил ваши потери и использовал PHPMailer; взвесьте время, затрачиваемое на изменение кода, чтобы использовать PHPMailer против того, как долго вам придется переписывать одну и ту же функциональность самостоятельно. Помимо этого я желаю вам удачи в этом; Я потратил дни, пытаясь сделать это, и в конце концов сдался и вместо этого использовал PHPMailer. – SteJ