我试图制作一个非常简单的表格,但它不适合我。重点是人们只写他们的名字和姓氏,按“发送”并完成。我写了下面的代码:
<form method="post" action="index_rost.php">
<p>
<label>name</label><br>
<input name="name" placeholder="name here"><br><br>
<label>surname</label><br>
<input name="name2" placeholder="surname here"><br><br>
</p>
<p>
<input id="submit" name="submit" type="submit" value="send it!"><br>
</p>
<?php
$name = $_POST['name'];
$name2 = $_POST['name2'];
$from = 'website.se';
$to = 'mymail@gmail.com, myothermail@gmail.com';
$subject = 'new person is coming';
$headers = "MIME-Version: 1.0" . PHP_EOL;
$headers .= "From: $from". PHP_EOL;
$headers .= "Content-type: text/html;charset=UTF-8 ". PHP_EOL;
$body = "<strong>From:</strong><br><br> $name $name2<br><br> <strong>Count on me, I want to come!</strong>";
if ($_POST['submit'] && $name != '' && $name2 != '') {
if (mail ($to, $subject, $body, $headers)) {
echo '<p>Your name has been sent</p>';
} else {
echo '<p>You need to fill up all fields</p>';
}
}
?>
</form>
除了没有向我发送电子邮件之外,我会收到错误消息(此处指定的消息:else { echo '<p>You need to fill up all fields</p>'; } )
而不是我在代码中指定的成功消息。可以有人给我什么是错的?
非常感谢!
答案 0 :(得分:3)
来自http://php.net/manual/en/function.mail.php
如果邮件成功接受传递,则mail()返回TRUE,否则返回FALSE。
重要要注意,仅仅因为邮件已被接受传递,这并不意味着邮件实际上会到达目的地。
您正在从mail()
收到错误的回复,这意味着,无论PHP设置使用哪种消息都被拒绝。
您可以暂时使用以下启用所有错误并将这些错误打印到屏幕上,以便了解失败的原因。
error_reporting(E_ALL);
ini_set('display_errors', true);
PHP将抛出一个通知,例如以下可用于调试的通知:
NOTICE (5): Unexpected Error: mail() [<a href='function.mail'>function.mail</a>]: Failed to connect to mailserver at "ip " port portip, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() (# 2).
请记住,仅因为邮件被接受传递不意味着邮件将会到达。
答案 1 :(得分:1)
目前,只需加载表单(并在提交任何内容之前),就会运行整个代码块。
您应该将整个邮件部分包装在一个只在发出POST请求时才会被执行的块中:
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
$name = $_POST['name'];
// ...
}
这样你就不会收到有关未设置索引的任何警告等。
关于邮件问题,mail()
函数返回false
,因此您的邮件不会被接受传递。这可能是服务器设置上的任何数量,但也可能是一些简单的事情,比如你没有指定有效的电子邮件地址。
你应该尝试改变:
$from = 'website.se';
为:
$from = 'a_valid_address@website.se';
答案 2 :(得分:0)
嗯,发生的事情很简单。我只是正确地形成了它......看看你在做什么:
if ($_POST['submit'] && $name != '' && $name2 != '') {
if (mail ($to, $subject, $body, $headers)) {
echo '<p>Your name has been sent</p>';
} else {
echo '<p>You need to fill up all fields</p>';
}
}
所有字段都设置正确,但mail()返回false。
正确的代码是:
if ($_POST['submit'] && $name != '' && $name2 != '') {
if (mail ($to, $subject, $body, $headers)) {
echo '<p>Your name has been sent</p>';
} else {
echo '<p>Mail could not be sent</p>';
}
} else {
echo '<p>You need to fill up all fields</p>';
}