我一直在尝试将mail((函数与PHP一起使用,但在测试联系人表单时,似乎无法将消息发送到我的电子邮件地址。它只是进入了一个白色屏幕,没有其他信息。。它甚至没有显示下面的成功信息。
这是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>
有人能看到缺了什么吗?看看其他类似的问题,都有和我一样的问题,但他们说它们有效。
它进入空白页面的原因是PHP页面是空白的!你似乎没有在页面上的任何地方重复你的成功信息。
我建议更改您的表单,使HTML如下:
<form method="POST">
然后将PHP粘贴到该页面的顶部。请记住将页面类型设置为.php,而不是.html/.htm
最后在表单顶部添加一个回声,这样成功消息就会显示出来,就像一样
<?php
if ($success) {
echo $success;
}
?>
更改
mail($to,$subject,$message,$headers);
至
if(mail($to,$subject,$message,$headers))
{
echo "mail has been sent";
}
else
{
echo "error during sending mail";
}
还要更改你的if,因为你只检查一个变量
if (empty($name))
总是$name
放入调试的第一行:
error_reporting(E_ALL);
你为什么用"id"?这对你来说是必要的吗?
<input id="name" name="name" type="text" required autofocus>
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
语句中都使用$name
。用相应的变量进行更改。
与
更改<input id="number" name="text" type="text" required autofocus>
至<input id="number" name="number" type="text" required autofocus>
我想你明白了。你正在检查父if
语句中的empty($number)
,它总是true
,但由于变量($name
(错误,你没有得到任何消息。
php.ini文件中的SMTP服务器设置是什么?您需要运行SMTP服务器才能发送邮件。
一个更简单的解决方案是使用PHPMailer。
有一个问题
您正试图访问类似的数值
$number = $_POST['number'];
但在您的表单中,它是name="text">
<input id="number" name="text" type="text" required autofocus>
所以将表单字段更改为这个
<input id="number" name="number" type="text" required autofocus>
导致您的验证失败。
我认为,您没有在php.ini中设置SMTP数据如果可以的话,可以使用其他库发送邮件,如https://github.com/Synchro/PHPMailer