PHP邮件表单不工作
我正在用php为我的网站制作一个反馈表,我原以为它能工作,但后来它向代码中插入了箭头 无论如何,表单有4个字段:姓名、电子邮件、主题和消息 如果所有四个字段都有内容,我会收到消息failed alert 鉴于这种情况,我测试了4个字段中的3个字段的内容,这给了我4种组合: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"
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种组合,但都有同样的问题,不过这次它说谢谢你的留言。但是我没有收到电子邮件。