【问题标题】:Website Contact Form Not Sending Email网站联系表未发送电子邮件
【发布时间】:2014-05-09 04:28:42
【问题描述】:

所以我最近将我的第一个网站上传到了 iPage 服务器。该网站运行完美,但联系表格除外,该表格出于某种原因拒绝从表格中发送任何电子邮件。 我使用带有 Post 方法的 PHP 脚本,并尝试多次修复我的代码以纠正我可能输入的任何错误,但到目前为止无济于事。代码如下:

HTML:

form action = "js/mailer.php" form method="post" name="contactform" id="contactform" class="form validate item_bottom" role="form">
                <div class="form-group">
                    <input type="text" name="name" id="name" class="form-control required" placeholder="Name">
                </div>
                <div class="form-group">
                    <input type="email" name="email" id="email" class="form-control required email" placeholder="Email">
                </div>
                <div class="form-group">
                    <textarea name="message" id="message" class="form-control input-lg required" rows="9" placeholder="Enter Message"></textarea>
                </div>
                <div class="form-group text-center">
                    <input type="submit" id="contactForm_submit" class="btn btn-trans btn-border btn-full" value="Submit">
                </div>
        </form>

PHP:

<?php
if(isset($_POST['submit'])) {

$to = "aravindm3095@gmail.com";
$subject = "Hello Aravind!";

// data the visitor provided
$name_field = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$email_field = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
$comment = filter_var($_POST['message'], FILTER_SANITIZE_STRING);

//constructing the message
$body = " From: $name_field\n\n E-Mail: $email_field\n\n Message:\n\n $comment";

mail($to, $subject, $body);

// redirect to confirmation
header('Location: confirmation.html');

} else {

echo "Failure";

}
?> 

有人可以帮我解决这个问题吗?这可能是我的托管服务器错误,或者我的代码错误。非常感谢您的帮助

附加评论:按照提供的帮助(谢谢)我对 HTML 和 PHP 进行了必要的更改,但表单仍然无法正常工作。它不会回显失败或重定向到确认页面,并且在使用 Firefox 检查元素时,我注意到在点击提交按钮时,它下方会出现一个细分,上面写着“正在发送......”。但是没有发送电子邮件,没有回显消息或打开页面。

【问题讨论】:

  • 您的表单标签已损坏,应如下所示:
  • 另外,让我们知道它在做什么。它是在呼应失败吗?它会去confirmation.html但不发送邮件吗?显示任何具体错误?日志中有任何内容吗?
  • 你在重复formform method="post" 中删除form 另外,为了争论,你有一个&lt; 缺少form action
  • 您的提交按钮也没有命名。您的条件语句取决于它。
  • name="submit"提交标签

标签: php html forms email


【解决方案1】:

根据我在您发布的代码中看到的内容,PHP 邮件脚本将无法工作,因为您正在检查名称为“提交”的 POST 变量是否存在,而它在您的表单中没有提交按钮名称属性。 尝试为提交按钮命名并将该名称放入 PHP if 语句中。

【讨论】:

  • 在 Krish R 的回答下查看我的评论。
【解决方案2】:

表单中缺少提交按钮名称,您需要在提交按钮中添加名称,

  <input type="submit" name="submit" id="contactForm_submit" class="btn btn-trans btn-border btn-full" value="Submit">
                       ^^^^^^^^^^^^

而不是

  <input type="submit" id="contactForm_submit" class="btn btn-trans btn-border btn-full" value="Submit">

【讨论】:

  • 这不是唯一的原因。 OP 有 2x form form action = "js/mailer.php" form method="post"
【解决方案3】:

您的 HTML 部分应如下所示,

<form action = "js/mailer.php" method="post" name="contactform" id="contactform" class="form validate item_bottom" role="form">
    <div class="form-group">
        <input type="text" name="name" id="name" class="form-control required" placeholder="Name">
    </div>
    <div class="form-group">
        <input type="email" name="email" id="email" class="form-control required email" placeholder="Email">
    </div>
    <div class="form-group">
        <textarea name="message" id="message" class="form-control input-lg required" rows="9" placeholder="Enter Message"></textarea>
    </div>
    <div class="form-group text-center">
        <input type="submit" name="sendemail" id="contactForm_submit" class="btn btn-trans btn-border btn-full" value="Submit">
    </div>
</form>

在上面,我在提交按钮中添加了name="sendemail"

您发送电子邮件的 PHP 脚本应该是这样的

<?php
if(isset($_POST['sendemail'])) { // <-- variable name changed

    $to = "aravindm3095@gmail.com";
    $subject = "Hello Aravind!";

    // data the visitor provided
    $name_field = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
    $email_field = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
    $comment = filter_var($_POST['message'], FILTER_SANITIZE_STRING);

    //constructing the message
    $body = " From: $name_field\n\n E-Mail: $email_field\n\n Message:\n\n $comment";
    $headers = "From: " . $email_field; // <-- Code added
    mail($to, $subject, $body, $headers); // <-- Code added

    // redirect to confirmation
    header('Location: confirmation.html');
    exit;
} else {
    echo "Failure";
}
?> 

【讨论】:

  • 我对 PHP 和 HTML 部分进行了上述更改,但无济于事。表单不会回显失败或重定向到确认页面。当我使用 Firefox 检查元素时,提交按钮 div 下会出现一个细分,上面写着“正在发送...”,但仅此而已。没有消息被发送并且表格只是出现卡住。会不会是服务器问题?
猜你喜欢
  • 2019-10-03
  • 2023-03-28
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 2020-05-20
  • 2017-11-18
相关资源
最近更新 更多