【问题标题】:PHP mail not working in one script, but does in anotherPHP 邮件在一个脚本中不起作用,但在另一个脚本中起作用
【发布时间】:2010-02-23 19:54:33
【问题描述】:

我在一个 php 文件中有一个小的 php 邮件程序脚本,它可以正常工作并且可以正常发送邮件:

$subject = "subject"; 
$mail_body = "mail body";
$name = "noreply";
$email = "noreply@domain.com";
$recipient = "somebody@domain.com";
$header = "From: ". $name . " <" . $email . ">\r\n";
mail($recipient, $subject, $mail_body, $header);

但是,如果我将其取出并制作为自己的文件,或者将其放入不同的文件中,则它不起作用。没有错误消息,也没有发送电子邮件。

没有 php ini 设置命令,也没有包含 php 文件。

关于为什么它可以在较大的 php 脚本中工作,但不能单独工作的任何想法?

【问题讨论】:

  • 你得到什么错误信息,如果有的话?
  • 您能否提供有关它如何不起作用的详细信息?是否有任何错误信息?如果没有,您能否确认您已将 php.ini 配置为输出错误?
  • 当你说它不起作用时,你的意思是它不发送邮件还是你收到错误?
  • 加载时间似乎太长了......这是我得到的唯一错误提示。没有错误消息,也没有发送电子邮件。 @sidereal - 我无法确认,但可以与我们的网络管理员联系。
  • 两个脚本(工作和非工作)是否在同一环境(命令行或网络服务器)中执行?他们是作为同一个用户执行的吗?

标签: php debugging phpmailer


【解决方案1】:

您的代码一切正常。我只用我的地址替换 $recipient 中的电子邮件地址来测试它,它工作正常(我用我的公司电子邮件测试它 - Exchange 服务器上的 Outlook 和另一个使用 Hotmail 地址的测试 - 都工作正常并到达我的收件箱)。

  • 但请确保 $mail_body 中的新行是“\n”并且不是“\r\n”。正如您可以在有关 message 参数的文档中看到的那样:

每一行应该用一个 低频 (\n)。线不应该更大 超过 70 个字符。

  • 确保 $name 和 $email 包含禁止字符,如 和换行符(\r、\n 或 \r\n)。正如迈克尔指出的那样,其中的新行可能导致email injection 攻击。您不希望您的联系表单被垃圾邮件发送者用作邮件平台!

您应该考虑使用像PHPMailer 这样的电子邮件库,这将简化您的开发,因为mail() 对于高级邮件非常棘手。这些库中的大多数已经涵盖了这些攻击和标准...

【讨论】:

  • 我知道代码一切正常,但为什么它不能单独运行?它仅适用于我不久前编写的原始脚本。如果我只是将上述文本包装在 中并另存为新文件,则邮件不会发送。
  • $recipient 中的地址在您的 2 个版本中是否相同?如果不是,则可能是一侧的服务器端垃圾邮件过滤器拦截了邮件...您可以尝试添加回复、返回路径、消息 ID 和 X-Mailer 标头以查看它是否有帮助(请参阅php.net 示例)。
  • 我尝试将相同的工作脚本放入它自己的 php 文件中,但它不会发送...
  • 而且它们都是在同一个Server上执行的?
  • 是的...此时两个文件之间的唯一区别是,一个文件具有一些实际功能,可以作为可用的实时脚本。另一个正是我上面的部分,但只是在它自己的 php 包装器和它自己的文件中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 2022-11-02
相关资源
最近更新 更多