HTML/PHP电子邮件表单不工作

HTML/PHP电子邮件表单不工作,php,html,forms,email,Php,Html,Forms,Email,我用HTML制作了一个非常简单的电子邮件表单,它应该运行一个php脚本将电子邮件发送到我的电子邮件地址: <form id="emailForm" action="sendMail.php" method="post"> Name:<br> <input type="text" name="name" value="your name"><br> E-mail:<br> <input type="t

我用HTML制作了一个非常简单的电子邮件表单,它应该运行一个php脚本将电子邮件发送到我的电子邮件地址:

<form id="emailForm" action="sendMail.php" method="post">
    Name:<br>
    <input type="text" name="name" value="your name"><br>
    E-mail:<br>
    <input type="text" name="email" value="your email"><br>
    Message:<br>
    <textarea cols="40" rows="5" name="message">your message</textarea><br>
    <input type="submit" value="Send">
    <input type="reset" value="Reset">
</form>

名称:

电子邮件:

信息:
您的信息
我的php脚本如下所示:

<?php
// This function checks for email injection. Specifically, it checks for carriage returns - typically used by spammers to inject a CC list.
function isInjected($str) {
    $injections = array('(\n+)',
    '(\r+)',
    '(\t+)',
    '(%0A+)',
    '(%0D+)',
    '(%08+)',
    '(%09+)'
    );
    $inject = join('|', $injections);
    $inject = "/$inject/i";
    if(preg_match($inject,$str)) {
        return true;
    }
    else {
        return false;
    }
}

// Load form field data into variables.
$name = $_REQUEST['name'] ;
$email_address = $_REQUEST['email'] ;
$comments = $_REQUEST['message'] ;

// If the user tries to access this script directly, redirect them to feedback form,
if (!isset($_REQUEST['email'])) {
header( "Location: contact.html" );
}

// If the form fields are empty, redirect to the error page.
elseif (empty($email_address) || empty($comments) || empty($name)) {
header( "Location: error_message.html" );
}

// If email injection is detected, redirect to the error page.
elseif ( isInjected($email_address) ) {
header( "Location: error_message.html" );
}

// If we passed all previous tests, send the email!
else {
mail( "r.krishnan1@umiami.edu", "Message From Your Website!",
  $comments, "From: $email_address" );
header( "Location: thank_you.html" );
}
?>

由于我对脚本编写非常陌生,这个脚本主要取自示例代码,但对我来说似乎都很有意义。表单所在的html页面和php文件都上载到服务器上的同一目录。然而,当我按下表单上的“提交”按钮时,我只会在浏览器中看到php文件本身的文本版本(即我只是转到我目录中的php文件),而不会发送电子邮件。为什么会发生这种情况?

你能试试这个吗

$headers = 'From: '.$email_address . "\r\n" .
'Reply-To: '.$email_address . "\r\n" ;

mail( "r.krishnan1@umiami.edu", "Message From Your Website!", $comments,  $headers);

您需要通过让浏览器访问支持PHP的web服务器提供的HTTP(S)URL来运行PHP程序,该web服务器已配置为针对您放置PHP代码的文件执行该URL

要么:

  • 您直接从文件系统加载文件,而不是通过Web服务器或
  • 您没有为正在加载的文件配置PHP服务器(默认的PHP配置要求代码位于扩展名为
    .PHP
    的文件中)

这可能是一个转储问题,但您是否为您的项目配置了web服务器?您的联系人表单可以进行邮件头注入,垃圾邮件发送者很容易添加额外的邮件头,并且您的
已被注入
功能包含错误做法:您应该将邮件地址列为白名单,没有过滤掉可能被恶意使用的字符。我正在使用nearlyfreespeech.net作为我的服务器。我的网站的所有.html文件都上传到我的服务器帐户的主目录中。这也是我放置.php文件(sendMail.php)的地方。看来浏览器正在访问该URL,但脚本实际上没有运行?据我所知,我所使用的服务器是为PHP配置的,所以我仍然不知道为什么会发生这种情况。不要鼓励人们添加臭名昭著的
X-Mailer:PHP
header:它毫无用处,甚至很危险,因为它可能会吸引黑客。@Marcel Korpel谢谢!删除了那个标题