在我的个人项目之一中,我正在用PHP开发基本的SMTP服务器。当我从命令行单独启动它时,它就可以使用了。我可以通过telnet正确访问它,并且它可以正确响应SMTP命令,并且我也可以通过使用此服务器发送电子邮件的php脚本正确访问它。
现在,当我从php脚本而不是从命令行启动服务器时遇到问题(我使用exec
函数来完成)。当我通过telnet访问服务器时服务器正确响应,但不再通过发送电子邮件的php脚本响应。
有人可以帮我吗?
注意
要从php脚本发送电子邮件,我使用Mail PEAR扩展名。当我从脚本中启动服务器并尝试以相同的过程发送电子邮件时,出现此错误:SMTP: Failed to connect socket: Connection refused (code: -1, response: )
摘要
我的服务器实现是在server.php
中,发送电子邮件的脚本是在mail-test.php
中。
1)如果我通过以下方式在命令行上启动服务器:php server.php
,然后启动php mail-test.php
,则脚本将正常处理并发送电子邮件。我还可以通过telnet 127.0.0.1 3535
访问服务器并与服务器正常通信。
2)使用另一个名为test.php
的脚本,我想包装服务器管理,通过exec("php server.php > /dev/null 2>&1 &");
启动服务器,然后从该脚本中一次发送邮件。这样做,服务器已正确启动(我可以通过telnet
访问它),但是从test.php
发送的电子邮件因此在服务器启动后引发了错误。如果我在终止test.php
进程之前从另一个脚本发送了电子邮件,则电子邮件已正确发送...
我希望我足够明确。
最佳答案
奇怪的是,我通过设置SO_RCVTIMEO
来解决此问题:socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 0, 'usec' => 500))
我收到的错误消息并不是很有意义。
我希望它能帮助其他面临类似问题的人。
关于php - PHP SMTP服务器使用套接字: connection refused,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3684045/