【问题标题】:PHP mail() error 500PHP 邮件()错误 500
【发布时间】:2012-03-28 08:43:06
【问题描述】:

作为网站注册过程的一部分,我添加了邮件确认。但是由于某种原因,邮件函数在那里引发了内部服务器错误。

奇怪的是,如果我创建一个测试脚本,使用完全相同的电子邮件(所有相同的参数)它工作正常,并发送电子邮件。

邮件是从类中的函数发送的,以防万一。我没有发布代码,因为它并不真正相关,即使我尝试 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 stats 代码。如果我创建一个名为 test.php 的文件,并且我只是简单地放置邮件函数并对其进行测试,它就可以工作。通过 AJAX 调用它没有,有什么想法吗?

【问题讨论】:

  • 启用 PHP 调试并发布错误信息。见:thinkvitamin.com/code/how-to-debug-in-php
  • 将 PHP 错误报告设置为 all,它仍然给出错误 500。我已经安装了我自己的调试系统,但邮件功能似乎“覆盖”了所有内容,并且只是进入错误 500。
  • 如果您的代码失败并且 Apache 为您提供 HTTP 状态,则无法获取任何日志。它必须在 apache、虚拟主机或至少 php 框架日志中。也许你的函数是用error-output suppress功能@调用的,见stackoverflow.com/questions/7149030/…
  • 邮件函数不是用@调用的,虽然我试过了,但发现它仍然给出错误500。我知道它是邮件函数,因为我逐行评论了测试在哪里是错误来自。奇怪的是,从另一个文件调用时具有相同参数的完全相同的邮件功能可以正常工作....
  • 您确定是邮件功能导致了错误,而不是其他原因。例如,如果您注释掉对 mail() 函数的调用,脚本是否会按预期返回?

标签: php email


【解决方案1】:

经过几个小时的测试,我发现了问题! 在 AJAX 调用完成后,我在它的回调函数中使用 window.location 将用户重定向到新页面。

显然,如果您在对使用 mail() 函数的 php 脚本进行 AJAX 调用后对其进行修改,服务器会在请求中返回 500 状态代码

【讨论】:

    【解决方案2】:

    根据您提供的输入量,很难判断该错误是如何发生的。

    错误:500 是间隔服务器错误,发生的原因可能不止一个。

    • 格式错误的 php cgi 脚本
    • .htaccess 或其他配置文件中的无效指令
    • 文件系统和服务器软件施加的限制。 可能是您正在附加要发送的文件
    • 标题中缺少换行符 (\r\n)

    尝试cPanel Forums 中列出的所有解决方案

    【讨论】:

      【解决方案3】:

      你的问题很困惑。

      你没有说你在什么操作系统上运行,也没有提供配置的细节:在 MSWindows 上,php 的邮件功能充当 SMTP 客户端。在 POSIX OS(包括 Linux)上,它执行一个命令程序来发送电子邮件。 SMTP 客户端需要知道要连接的服务器和端口。 POSIX 函数需要配置来告诉它运行哪个程序。

      您一直提到 500 错误 - 您是指浏览器上的 HTTP 500 状态代码吗?

      邮件程序/服务器的日志显示什么?如果这是 posix 平台,请尝试更改 php.ini 以运行 shell 脚本来记录操作和参数。

      【讨论】:

      • 我已经添加了关于该问题的所有信息。我希望有人在某个时候遇到过类似的情况,邮件功能会在一个脚本上导致内部服务器错误,而在另一个脚本上工作正常。
      • 您没有提供相关的 php.ini 设置(PHP 似乎在运行邮件程序时遇到问题 - 请检查它应该在的位置,并且您可以从命令中运行它行)
      • 问题不在于邮件程序,正如我在问题中所说,具有相同参数的相同邮件功能在其他地方按预期工作
      猜你喜欢
      • 2015-09-14
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      相关资源
      最近更新 更多