1

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

任何人都可以看到缺少什么吗?看看其他类似的问题,都和我的一样,但他们说他们有效。

4

6 回答 6

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>

我想你明白了。您正在检查始终empty($number)为的父语句,并且由于错误的变量 ( ) ,您没有收到任何消息。iftrue$name

于 2013-04-22T11:38:23.153 回答
1

它进入空白页面的原因是 PHP 页面是空白的!您似乎没有在页面上的任何地方呼应您的成功信息。

我建议更改您的表单,以便 HTML 如下所示:

<form method="POST">

然后将 PHP 粘贴到该页面的顶部。请记住将页面类型设置为 .php 而不是 .html/.htm

最后在表单顶部添加一个回显,以便显示成功消息,如下所示

<?php
    if ($success) {
        echo $success;
    }
?>
于 2013-04-22T11:39:54.127 回答
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>
于 2013-04-22T11:41:22.340 回答
0

你有一个问题

您正在尝试访问这样的数字值

$number = $_POST['number'];

但在您的表单中它是 name="text"

<input id="number" name="text" type="text" required autofocus>

所以将表单字段更改为此

<input id="number" name="number" type="text" required autofocus>

这导致您的验证失败。

于 2013-04-22T11:37:50.127 回答
0

我认为,您没有在 php.ini 中设置 SMTP 数据如果可以,请使用其他库发送邮件,例如https://github.com/Synchro/PHPMailer

于 2013-04-22T11:38:45.023 回答
0

您的 php.ini 文件中的 SMTP 服务器设置是什么?您需要运行 SMTP 服务器来发送邮件。

一个更简单的解决方案是使用PHPMailer

于 2013-04-22T11:37:41.063 回答