作为网站注册过程的一部分,我添加了邮件确认。但由于某种原因,邮件功能会在那里引发内部服务器错误。
奇怪的是,如果我创建一个测试脚本,使用完全相同的电子邮件(所有相同的参数),它可以正常工作,并发送电子邮件。
邮件是从Class中的函数发送的,如果有帮助的话。我没有发布代码,因为它并不真正相关,即使我尝试mail('email@email.com','subject','email');
它失败并出现500错误!
服务器错误日志根本没有显示任何内容,有人知道可能导致此类问题的原因吗?
服务器正在通过mod_fastcgi
运行php,但如果切换到mod_suphp
也会出现此问题。
更新: 我将尝试更好地解释这一点,如果从另一个文件调用,使用相同的参数,邮件功能将完美地工作。这里的问题是结合邮件功能导致错误500.其中调用它的文件的其余部分也很好,如果我评论邮件功能一切正常。它被调用的方式是对一个文件的AJAX请求,该文件调用发送邮件的函数(以防这有助于)
更新2:
为了回答到目前为止的答案,这里有更多我以前没有分享过的信息:
操作系统:CentOS版本5.8
当我说错误500时,我的意思是服务器只返回HTTP 500状态代码。
服务器在任何错误日志中都不显示任何内容
最重要的是,如果我创建一个名为test.php的文件,只有mail('address@domain.com','Subject','Message')
,它就可以了。从其他文件调用时,返回500状态代码。
我要问的是,如果有人知道,可能是因为经验,可能会导致这种情况。
更新3: 昨天有人遇到同样的问题:PHP's mail() function causes a 500 Internal Server Error only after a certain point in the code
更新4 : 经过一些测试,我发现只有在通过AJAX调用脚本时才会返回500个统计信息代码。如果我创建一个名为test.php的文件,我只需放置邮件功能并对其进行测试即可。通过AJAX调用它不会有任何想法吗?
答案 0 :(得分:1)
你的问题很困惑。
您没有说明您正在运行的操作系统,也没有提供配置的详细信息:在MSWindows上,php的邮件功能充当SMTP客户端。在POSIX OS(包括Linux)上,它执行命令程序来发送电子邮件。 SMTP客户端需要知道要连接的服务器和端口。 POSIX函数需要配置来告诉它运行哪个程序。
您一直在引用500错误 - 您是指浏览器中的HTTP 500状态代码吗?
邮件程序/服务器的日志显示了什么?如果这是posix平台,请尝试更改php.ini以运行shell脚本来记录操作和参数。
答案 1 :(得分:1)
根据您提供的输入量,很难说出错误是怎么发生的。
错误:500是间隔服务器错误,可能有多个原因发生。
尝试从此cPanel Forums
列出的每个解决方案答案 2 :(得分:0)
经过几个小时的测试后,我发现了问题!
在AJAX调用完成后,我使用window.location
将用户重定向到新页面,在它的回调函数中。
显然,如果在AJAX调用使用mail()
函数的php脚本后修改它,服务器会在请求中返回500状态代码