1

这是我第一次使用 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);

突然,我从服务器收到了预期的回复,邮件成功发送。

4

1 回答 1

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

突然,我从服务器收到了预期的回复,邮件成功发送。

– entiendoNull

于 2017-07-24T10:01:12.653 回答