PHP邮件表单不工作

PHP邮件表单不工作,php,Php,我正在用php为我的网站制作一个反馈表,我原以为它能工作,但后来它向代码中插入了箭头 无论如何,表单有4个字段:姓名、电子邮件、主题和消息 如果所有四个字段都有内容,我会收到消息failed alert 鉴于这种情况,我测试了4个字段中的3个字段的内容,这给了我4种组合: combo 1 - "name", "email", "subject" combo 2 - "name", "email", "message" combo 3 - "name", "subject", "message"

我正在用php为我的网站制作一个反馈表,我原以为它能工作,但后来它向代码中插入了箭头

无论如何,表单有4个字段:姓名、电子邮件、主题和消息

如果所有四个字段都有内容,我会收到消息failed alert

鉴于这种情况,我测试了4个字段中的3个字段的内容,这给了我4种组合:

combo 1 - "name", "email", "subject"
combo 2 - "name", "email", "message"
combo 3 - "name", "subject", "message"
combo 4 - "email", "subject", "message"
结果如下:

combo 1 - "Thank you for your message."
combo 2 - "Thank you for your message."
combo 3 - "Message failed."
combo 4 - "Thank you for your message."
以下是我正在使用的html代码:

<form action="contact.php" method="post">
  <input type="hidden" name="page" value="contact" />
  <input type="hidden" name="req" value="submit" />
  Your Name: <input type="text" name="name" />
  <br/>
  Your Email: <input type="text" name="email" />
  <br/>
  Subject: <input type="text" name="subject" size="69" />
  <br/>
  Message:
  <br/>
  <textarea cols="63" rows="8" name="message"></textarea>
  </br>
  <input type="submit" value="Send" />
  <input type="reset" value="Clear" />
</form>
下面是contact.php:

<?php
  $field_name = $_POST['name'];
  $field_email = $_POST['email'];
  $field_subject = $_POST['subject'];
  $field_message = $_POST['message'];

  $mail_to = 'email@my_website.com';
  $subject = 'Message from a site visitor '.$field_name;

  $body_message = 'From: '.$field_name."\n";
  $body_message .= 'E-mail: '.$field_email."\n";
  $body_message .= 'Subject: '.$field_subject."\n";
  $body_message .= 'Message: '."\n";
  $body_message .= $field_message;

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

  $mail_status = mail($mail_to, $subject, $body_message, $headers);

  if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
  alert('Thank you for your message.');
  window.location = './contact.html';
</script>
<?php
  }
  else { ?>
<script language="javascript" type="text/javascript">
alert('Message failed.');
window.location = './contact.html';
</script>
<?php
  }
?>

代码有什么问题吗?我不明白它为什么这样做。

问题可能是:

引自

发送邮件时,邮件必须包含发件人标头。这可能是 使用附加的_headers参数设置,或者可以在中设置默认值 php.ini

否则将导致类似于警告的错误消息: mail:sendmail\u from未在php.ini或自定义from:header中设置 丢失的From标头还设置Windows下的返回路径


换句话说,如果您没有包含正确发件人的标题:adress@email.com将发生错误。

问题可能是:

引自

发送邮件时,邮件必须包含发件人标头。这可能是 使用附加的_headers参数设置,或者可以在中设置默认值 php.ini

否则将导致类似于警告的错误消息: mail:sendmail\u from未在php.ini或自定义from:header中设置 丢失的From标头还设置Windows下的返回路径


换句话说,如果您没有包含正确发件人的标题:adress@email.com将发生错误。

安东的回答很好,但我想进一步深入,并扩展他的答案

如果你想确保有人发送了电子邮件,要求用php和html5硬编码也很酷,但这可以避免,所以你仍然需要php。我还删除了javascript部分,因为它感觉与此无关。这是我会尝试的,因为它很短,所以我会在同一页上完成。有许多微妙的变化:

<?php
$field_name = $_POST['name'];
$field_email = $_POST['email'];
$field_subject = $_POST['subject'];
$field_message = $_POST['message'];


//If all required fields are filled
if (!empty($field_name)&&!empty($field_email)&&!empty($field_message))
  {
  $mail_to = 'email@my_website.com';
  $subject = 'Message from a site visitor: '.$field_name;

  $body_message = 'From: '.$field_name."\n";
  $body_message .= 'E-mail: '.$field_email."\n";
  $body_message .= 'Subject: '.$field_subject."\n";
  $body_message .= 'Message: '."\n";
  $body_message .= $field_message;

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

  $mail_status = mail($mail_to, $subject, $body_message, $headers);

  echo "Thank you for your message.";
  }

//If not all required fields are filled display form again.
else
  { ?>
  Please fill all the required fields.<br>

  <form action="" method="post">
  <input type="hidden" name="page" value="contact" />
  <input type="hidden" name="req" value="submit" />

  <?php //The php bits are to retrieve the valid fields ?>
  Your Name*: <input required type="text" value="<?php echo $field_name; ?>" name="name"/>
  <br/>
  Your Email*: <input required type="email" value="<?php echo $field_email; ?>" name="email" />
  <br/>
  Subject: <input type="text" name="subject" value="<?php echo $field_subject; ?>" size="69" />
  <br/>
  Message*:
  <br/>
  <textarea required cols="63" rows="8" name="message"><?php echo $field_message; ?></textarea>
  </br>
  <input type="submit" value="Send" />
  <input type="reset" value="Clear" />
  </form>

  <?php
  }
?>
最后,我希望这只是一个伪代码,因为它几乎不符合任何html规则。你需要标签,等等


刚刚经过测试,效果很好

安东的回答很好,但我想再深入一点,扩展他的回答

如果你想确保有人发送了电子邮件,要求用php和html5硬编码也很酷,但这可以避免,所以你仍然需要php。我还删除了javascript部分,因为它感觉与此无关。这是我会尝试的,因为它很短,所以我会在同一页上完成。有许多微妙的变化:

<?php
$field_name = $_POST['name'];
$field_email = $_POST['email'];
$field_subject = $_POST['subject'];
$field_message = $_POST['message'];


//If all required fields are filled
if (!empty($field_name)&&!empty($field_email)&&!empty($field_message))
  {
  $mail_to = 'email@my_website.com';
  $subject = 'Message from a site visitor: '.$field_name;

  $body_message = 'From: '.$field_name."\n";
  $body_message .= 'E-mail: '.$field_email."\n";
  $body_message .= 'Subject: '.$field_subject."\n";
  $body_message .= 'Message: '."\n";
  $body_message .= $field_message;

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

  $mail_status = mail($mail_to, $subject, $body_message, $headers);

  echo "Thank you for your message.";
  }

//If not all required fields are filled display form again.
else
  { ?>
  Please fill all the required fields.<br>

  <form action="" method="post">
  <input type="hidden" name="page" value="contact" />
  <input type="hidden" name="req" value="submit" />

  <?php //The php bits are to retrieve the valid fields ?>
  Your Name*: <input required type="text" value="<?php echo $field_name; ?>" name="name"/>
  <br/>
  Your Email*: <input required type="email" value="<?php echo $field_email; ?>" name="email" />
  <br/>
  Subject: <input type="text" name="subject" value="<?php echo $field_subject; ?>" size="69" />
  <br/>
  Message*:
  <br/>
  <textarea required cols="63" rows="8" name="message"><?php echo $field_message; ?></textarea>
  </br>
  <input type="submit" value="Send" />
  <input type="reset" value="Clear" />
  </form>

  <?php
  }
?>
最后,我希望这只是一个伪代码,因为它几乎不符合任何html规则。你需要标签,等等


刚刚经过测试,效果很好

测试组合时,是否始终在字段中输入相同的值?即。thisadress@hotmail.com电子邮件是一个很糟糕的例子,因为它是失败消息中唯一没有使用的。但你明白了。是的,我确实在测试组合时为每个字段输入了相同的值,你是否一直在字段中输入相同的值?即。thisadress@hotmail.com电子邮件是一个很糟糕的例子,因为它是失败消息中唯一没有使用的。但你明白了。是的,我确实为每个字段输入了相同的值。我仍然有相同的问题。我试过这4种组合,但都有同样的问题,不过这次它说谢谢你的留言。但是我没有收到电子邮件。我仍然有同样的问题。我试过这4种组合,但都有同样的问题,不过这次它说谢谢你的留言。但是我没有收到电子邮件。