导致 404 文件未找到页面的 php mail() 函数

标签 php email

我有一个带有 html 表单的简单 php 页面。它的设置是让你填写表格并自动发送一封电子邮件到我的电子邮箱。没有发生这种情况,我没有收到任何电子邮件,页面重定向到“找不到文件(404 错误)”。

这是PHP

<?php

if (isset($_POST['submit'])){

    //Name
    $Name = $_POST['Name'];
    $Name = mysqli_real_escape_string($Name);

    //Email
    $Email = $_POST['Email'];
    $Email = mysqli_real_escape_string($Email);

    //Subject
    $Subject = $_POST['Subject'];
    $Subject = mysqli_real_escape_string($Subject);

    //Message
    $Message = $_POST['Message'];
    $Message = mysqli_real_escape_string($Message);

    $email_subject = $Subject . ' from: ' . $Email;
    $email_from = $Email;
    $email_body = $Message;

    $webEmail = "temcgee@email.neit.edu";
    $headers = "From: $email_from \r\n";
    $headers .= "Reply-To: $Email \r\n";
    $headers .= 'X-Mailer: PHP/' . phpversion();
    $headers .= 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";



    mail($webEmail,$email_subject,$email_body,$headers);
}
?>

这是html表单

<form action="action_page.php" name="myform">
            <input onfocus="this.value='';" type="text" name="Name" value="Name" id="name">
            <input onfocus="this.value='';" type="text" name="Email" value="Email" id="email">
            <input onfocus="this.value='';" type="text" name="Subject" value="Subject" id="subject">
            <textarea onfocus="this.value='';" cols="50" rows="4" placeholder="Message" name="Message" id="message"></textarea>
            <input type="submit" value="submit" id="submit">

        </form>

有什么想法吗?

最佳答案

这里有一些问题。

让我们从顶部开始,从您的条件语句开始(并逐步向下)。

if (isset($_POST['submit'])){...}

您的提交按钮 <input type="submit" value="submit" id="submit">没有名称属性。

  • 您可能只依赖“id”,这是行不通的,它需要“name”属性。

将其修改为:

<input type="submit" name="submit" value="submit" id="submit">
  • 因为它没有命名,所以该条件语句中的任何内容都不会执行。

那么你正在使用 mysqli_real_escape_string() 理论上需要将连接传递给该函数。

即:

$Name = mysqli_real_escape_string($connection,$Name);

其余的也一样;假设您正在与数据库交互。

但是,不清楚您是否确实在与您的数据库进行交互,所以如果您没有与它进行交互,请删除所有这些 mysqli_real_escape_string来自您的 POST 数组。

即:

$Name = $_POST['Name'];

并为其他人做同样的事情。

您还缺少 POST 作为表单中的方法:

<form action="action_page.php" name="myform">

省略时默认为 GET。因此,将其更改为:

<form action="action_page.php" name="myform" method="post">

然后检查邮件是否已发送,更改

mail($webEmail,$email_subject,$email_body,$headers);

if(mail($webEmail,$email_subject,$email_body,$headers)){
echo "Sent";
}

如果您看到“已发送”,那么邮件就完成了它的工作。如果没有收到邮件,请检查您的垃圾邮件。或者,您的服务器可能被列入黑名单。

确保您有权使用 mail() .

您还应确保已使用条件 empty() 填充了所有输入.

即:

if(!empty($_POST['Name'])){
// $Name = mysqli_real_escape_string($Name);
   $Name = $_POST['Name'];
   }

添加error reporting到您的文件的顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告只应在试运行中进行,绝不能在生产中进行。


脚注:

不知道这些有什么用onfocus="this.value='';"所以,如果您在某处发生了一些 JS/Ajax,则需要检查它们。

  • 如果它们不再用于任何用途,您可以将它们移除。

您还应该尝试删除 value="Name"以防万一。

旁注:

如果您仍然遇到 404 错误,请尝试将您的 PHP 放在上面,将您的 HTML 表单放在下面,并在带有 .php 的同一个文件中扩展和做:

<form action="" name="myform" method="post">

使用 action=""作为在同一页面上发生的操作。


附加脚注:

我注意到您在另一个答案中的评论中:

"I added header( 'Location: lizbethmcgee.com/pages/Contact.php'; ) ;"

首先,确保您没有在 header 之前输出。

此外,您还应该包括一个完整的 http://调用并exit; :

header("Location: http://www.lizbethmcgee.com/pages/Contact.php");
exit;

为了避免进一步执行可能存在于其下方的代码,如果其中包含任何代码。


正如 AdamT 在评论中所说:

使用 php mail 发送邮件命令,不能保证邮件一定会到达您发送到的收件箱。如前所述,那里有很多垃圾邮件发送者,不幸的是,垃圾邮件过滤程度很高。如果您真的希望有更好的机会接收邮件,您应该联系 GoDaddy 并询问他们如何为您的帐户设置 SMTP 电子邮件。

关于导致 404 文件未找到页面的 php mail() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29451322/

相关文章:

php - 我可以在类变量中添加没有赋值的 PHP 数组键吗?

javascript - 为什么 .match() 会阻止我的代码执行?

iphone - 电子邮件正文中的超链接在 iPhone 中不起作用

html - 是否可以在 MAILTO 链接的正文中添加 HTML 链接

PHP SQL UPDATE 数千行中每行一个字段,每个字段都在 php 中构建

php - WordPress停止循环获取帖子

php - Yii2 从用户当前 session 远程注销用户 session

php - 如何检测 PHP pfsockopen 被远程服务器关闭?

html - 强制 Thunderbird 中的 html 电子邮件在容器中 float 元素

php - 如何在我的电子邮件模板中使用从数据库中获取的变量值