我一直在尝试使用PHP的mail()函数,但在测试联系表单时似乎无法收到要发送到我的电子邮件地址的消息。它只是一个白色的屏幕,没有进一步..它甚至没有显示下面的成功消息。
这是PHP:
<?php
if(isset($_POST['submit'])) {
$name = $_POST['name'];
$address = $_POST['address'];
$number = $_POST['number'];
$email = $_POST['email'];
$message = $_POST['message'];
$subject = 'Message from Reef website';
$to = 'myemail@hotmail.co.uk';
if (empty($name) || empty($address) || empty($number) || empty($email) || empty($subject) || empty($message)) {
if (empty($name))
$error['name'] = "Please enter your Full Name";
if (empty($name))
$error['address'] = "Please enter your address";
if (empty($name))
$error['number'] = "Please enter a contact number";
if (empty($email))
$error['email'] = "Please enter a valid Email Address";
if (empty($message))
$error['message'] = "Please write a message, enquiries or other concerns above";
}
else { //if not empty
$headers="From: {$email}\r\nReply-To: {$email}";
mail($to,$subject,$message,$headers);
$success = "Thank you! You're email has been sent.";
}
}
?>
这是我的HTML表单:
<form method="POST" action="mailer.php">
<table border="1">
<tr>
<td><label for="name" class="g">Name</label></td>
<td><input id="name" name="name" type="text" required autofocus></td>
</tr>
<tr>
<td><label for="address" class="g">Address</label></td>
<td><textarea rows="3" id="address" name="address" cols="50"></textarea></td>
</tr>
<tr>
<td><label for="number" class="g">Contact number</label></td>
<td><input id="number" name="text" type="text" required autofocus></td>
</tr>
<tr>
<td><label for="email" class="g">Email</label></td>
<td><input id="email" name="email" type="text" placeholder="example@domain.com" required autofocus></td>
</tr>
<tr>
<td><label for="message" class="g">Enquiry</label></td>
<td><textarea rows="3" id="message" name="message" cols="50"></textarea></td>
</tr>
</table>
<input type="submit" value="Submit" name="submit">
</form>
任何人都可以看到缺少的东西吗?看看其他类似的问题,有些都像我的,但他们说他们的工作。
答案 0 :(得分:1)
if (empty($name))
$error['name'] = "Please enter your Full Name";
if (empty($name))
$error['address'] = "Please enter your address";
if (empty($name))
$error['number'] = "Please enter a contact number";
您在每个$name
语句中使用if
。用相应的变量改变它。
和强>
更改
<input id="number" name="text" type="text" required autofocus>
至<input id="number" name="number" type="text" required autofocus>
我想你明白了。您正在父{4}}语句中检查empty($number)
if
,并且由于错误的变量(true
)而没有收到任何消息。
答案 1 :(得分:1)
它进入空白页面的原因是PHP页面是空白的!您似乎没有在页面的任何位置回显您的成功消息。
我建议您更改表单,以便HTML如下所示:
<form method="POST">
然后将PHP粘贴到该页面的顶部。请记住将页面类型设置为.php而不是.html / .htm
最后在表单顶部添加一个echo,以便显示成功消息,沿着
行<?php
if ($success) {
echo $success;
}
?>
答案 2 :(得分:1)
更改
mail($to,$subject,$message,$headers);
到
if(mail($to,$subject,$message,$headers))
{
echo "mail has been sent";
}
else
{
echo "error during sending mail";
}
也会更改你的ifs,因为你只检查一个变量
if (empty($name))
总是$ name
在你的第一行进行调试:
error_reporting(E_ALL);
为什么你使用“id”对你来说是否必要?
<input id="name" name="name" type="text" required autofocus>
答案 3 :(得分:0)
php.ini文件中的SMTP服务器设置是什么?您需要运行SMTP服务器才能发送邮件。
更简单的解决方案是使用PHPMailer。
答案 4 :(得分:0)
你有一个问题
您正试图像这样访问数字值
$number = $_POST['number'];
但在您的表单中,它是name =“text”
<input id="number" name="text" type="text" required autofocus>
所以将表单字段更改为此
<input id="number" name="number" type="text" required autofocus>
导致验证失败。
答案 5 :(得分:0)
我认为,您没有在php.ini中设置SMTP数据 如果可以,请使用其他库来发送https://github.com/Synchro/PHPMailer
等邮件