gpt4 book ai didi

php - 使用套接字通过 php 发送电子邮件

转载 作者:行者123 更新时间:2023-12-03 11:52:20 25 4
gpt4 key购买 nike

我正在编写一个 SMTP 类来使用 PHP 套接字发送邮件,并且几乎成功了。问题是它是随机工作的,有时发送电子邮件需要很多时间。

我注意到一旦“。”发送我应该得到电子邮件已发送的响应,但不是我得到服务器正在关闭传输(当我发送“QUIT”命令时相同的消息),然后是电子邮件已发送的消息。

因此,由于某种原因,消息混合到达……但仅限于最后两个命令:“。”和“退出”。

任何人都可以帮我一把吗?

已上传:http://pastebin.com/9vweVpe7

PD:我知道我可以使用 phpmailer 或 swift,但我想自己做来学习。

最佳答案

您的实现中有几个错误和逻辑漏洞,但在我看来与您的问题直接相关的最重要的是:

1) compile_message()中的一个洞.

2) 滥用 command()发送电子邮件数据时。

一旦您发送了初始 DATA命令并收到响应,您之后发送的每一行电子邮件数据都不是自己的命令,但您将它们视为自己的命令。调用 command()对于每一行电子邮件数据,您都希望得到永远不会到达的回复,因为它们不存在。对于每行电子邮件数据,请调用 fwrite()而不是 command() .不要打电话command()直到您准备好发送终止 .命令(顺便说一句,需要将其移到 if not html 块之外)。

此外,在发送单行电子邮件数据时,如果它以句点开头,则必须以额外句点作为前缀。这在 RFC 2821 Section 4.5.2 中有描述.您的代码根本没有处理。如果您没有正确地转义您的电子邮件数据,您有时可能会意外提前终止电子邮件,随后的电子邮件行将被服务器解释为未知命令,并会发送适当的错误响应。服务器如果收到一堆未知的命令,杀死连接也不是没有道理的。

关于php - 使用套接字通过 php 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9346224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com