我一直在重构一个相当大的旧php项目,而且我遇到了一个完全困扰我的问题。总共有大约150个php文件。我是原作者,不可否认,我早期项目中的大部分代码都是......非常混乱。
我已将其归结为几个基本文件,现在我只在一个脚本上遇到邮件功能问题。它在php 5.4下的共享虚拟主机上运行。程序中有许多地方向用户发送邮件,直到现在它们一直运行良好。
基本上在评估查询字符串之后,index.php包含一个或多个其他脚本,然后构建并输出结果。
我有一个用户注册表单,在需要时包含在内。用户注册脚本显示表单并在提交时处理它的输入。除了通知新用户的管理员的mail命令之外,这一切都正常。它返回true,所以我没有看到代码有问题。并且在程序的其他部分中的类似邮件命令包括目录工作正常。
实际上只是为了测试它,我在user_registration脚本的顶部添加了一个非常基本的邮件命令并复制了相同的邮件命令(除了主题行中的细微差别)并将其放入index.php文件中在include语句之前。像这样的东西,
的index.php
<?php
set_include_path('includes/');
mail('recipient@abc.com','subject - index','body text');
include('user_registration.php');
?>
user_registration.php
<?php
mail('recipient@abc.com','subject - user','body text');
// Do Other Stuff
?>
index.php中的mail命令工作正常。 user_registration.php中的所有代码都工作正常,但邮件命令如果包含在if条件中则返回true,但邮件永远不会传递。并且,在整个程序的其余部分中,邮件命令(一些更复杂的)也可以正常工作。
当然,为了清晰起见,这是对实际代码的过度简化,但它就是这么简单。
在此示例中,我可能忽略了哪些可能代码可以解释此行为的代码?还有哪些其他因素可能影响这样的邮件命令?
我与之交谈的托管服务提供商支持技术告诉我他们没有记录sendmail错误(看起来很奇怪),否则无法帮助我。
我拉着我的头发试图了解这里发生了什么。当然,SO的巨大脑筋有一些有用的建议。
编辑:我读过与php邮件命令无法发送邮件相关的其他类似问题,但没有一个在同一个上下文中解决了这个问题。我的问题是不同的,因为我的脚本中有很多邮件命令实例按预期工作,而且一个脚本中没有任何邮件命令可以工作。邮件命令在这一个脚本中的任何位置都不起作用,即使在最顶层也是如此。同一行代码的精确副本粘贴到两个脚本中,一个工作,另一个不工作。为什么?什么可能导致单个PHP脚本以这种方式表现?我能够找到的所有其他问题只讨论邮件命令的单个实例不起作用。我刚刚在SO注册,但我是一位长期读者。如果我在其他地方错过了这个问题,我会道歉。请指点我。