【问题标题】:Unexpected server response using sockets and STMP TLS使用套接字和 STMP TLS 的意外服务器响应
【发布时间】:2015-12-03 09:49:49
【问题描述】:

这是我第一次用 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)
  • 数据(写入)
  • 包含我所有标题的字符串 (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)
  • 数据(写入)
  • 包含我所有标题的字符串 (fwrite)
  • fclose($conn);

在每次通话之间我添加了以下内容:

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

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

【问题讨论】:

  • 为什么不能使用PHPMailer?
  • 好吧,我们正在对迄今为止运行良好的自定义引擎进行更改。我认为将其全部更改为使用 PHPMailer 运行比仅启动 TLS 需要更长的时间我们已经得到的联系。现在我很喜欢它,所以我不想放弃它。我也想知道哪里出了问题;)
  • 我会减少你的损失并使用 PHPMailer;权衡更改代码以使用 PHPMailer 所花费的时间与您自己重新编写相同功能所需的时间。除此之外,我祝你好运;我浪费了几天的时间来尝试这样做,最后放弃并改用 PHPMailer。
  • @SteJ,当我开始工作时,我正要弃船并在 PHPMailer 下寻求庇护。如果您(或其他任何人)有兴趣,请编辑我上面的帖子。
  • 太棒了 - 很高兴听到你已经整理好了!这当然是有用的信息;如果这篇文章是几个月前的话,我会避免在我的代码中出现额外的依赖。

标签: php sockets smtp tls1.2 starttls


【解决方案1】:

解决了

万一其他人遇到这个问题。

此命令有效

  • $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)
  • 数据(写入)
  • 包含我所有标题的字符串 (fwrite)
  • fclose($conn);

在每次通话之间我添加了以下内容:

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

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

--entiendoNull

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2018-02-08
    • 2021-12-24
    • 2011-06-12
    相关资源
    最近更新 更多