这是我第一次使用 SMTP 做任何事情,所以如果我在这里做错了什么,请耐心等待 :)通常,我只使用 PHPMailer,但在这种情况下这不是一个选项。
我正在尝试向邮件列表中的人发送电子邮件。我正在使用 fsockopen,我需要使用 TLS 连接来执行此操作。
这就是我所做的:
- $conn = fsockopen() // 我的详细信息在那里,它连接。
- HELO myhost.com (fwrite)
- STARTTLS (fwrite)
- stream_socket_enable_crypto($conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
- HELO myhost.com (fwrite)
- 授权登录(fwrite)
- base64_encoded USERNAME (fwrite)
- base64_encoded PASSWORD (fwrite)
- 发件人:(fwrite)
- RCPT到:;(写)
- 数据(写入)
- 一个包含我所有标题的字符串(fwrite)
- fclose($conn);
这是出问题的地方
使用加密连接后,我似乎无法成功读取服务器响应。例如,当尝试通过fgets($conn,1024)
在我的身份验证后使用来读取响应时,它需要永远,然后最后我将获得一个高度加密的代码,无法查找响应“235”(以确保我的身份验证成功)。
然后当我写 MAIL FROM 时,我的回复将如下所示:
.0.0 SMTP server ready
虽然我想我想要这样的东西:
250 2.0.0
出了点问题,但我不知道为什么。我希望你们所有的专家都可以帮助我解决这个问题:)
提前致谢!
解决了
以防其他人遇到这个问题。
此订单有效
- $conn = fsockopen() // 我的详细信息在那里,它连接。
- EHLO myhost.com (fwrite)
- STARTTLS (fwrite)
- stream_socket_enable_crypto($conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
- EHLO myhost.com (fwrite)
- 授权登录(fwrite)
- base64_encoded USERNAME (fwrite)
- base64_encoded PASSWORD (fwrite)
- 发件人:(fwrite)
- RCPT到:;(写)
- 数据(写入)
- 一个包含我所有标题的字符串(fwrite)
- fclose($conn);
在每次通话之间,我添加了以下内容:
stream_set_timeout($conn, 300);
set_time_limit(310);
突然,我从服务器收到了预期的回复,邮件成功发送。