PHP邮件发送简单的联系表格


PHP mailer to send simple contact form

我一直在尝试将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