【问题标题】:I can't figure out why this contact form isn't working我不知道为什么这个联系表不起作用
【发布时间】:2014-02-11 22:41:58
【问题描述】:

我很困惑为什么这个表格不起作用。我收到了成功的消息,但没有任何内容发送到我的收件箱,而且我也检查了我的垃圾邮件。即使等待了几分钟,仍然没有任何显示。我对 ajax 或 php 不是很熟悉,所以我可能在这部分做错了什么。

我正在使用两个插件,http://malsup.github.io/jquery.form.js 和 http://jquery.bassistance.de/validate/jquery.validate.js。

html(“角”div 仅用于样式目的)

       <form action="contact-form.php" method="post" autocomplete="off" id="contact">

            <div class="corner"></div>
            <input type="text" required name="name" placeholder="Name" class="name">

            <div class="corner"></div>
            <input type="email" required name="email" placeholder="Email" class="email">

            <div class="corner"></div>
            <div id="contact-check">You sure 'bout that?</div>
            <input type="text" required name="check" placeholder="Quick! What's 2 + 2 ?" class="check">

            <div class="corner"></div>
            <textarea name="message" rows="25" cols="50" placeholder="Drop me a line!"></textarea>

            <input type="submit" name="submit" value="send" class="send" />
        </form>

jquery(使用 ajax)

var contactForm = $('form#contact')
    inputCheck = $('input.check')
    contactCheck = $('div#contact-check');

// Check if answered math question correctly
inputCheck.keyup(function(){
    if($(this).val() == 4){
        contactCheck.fadeOut();
    } else {
        contactCheck.fadeIn();
    }
});

// Validate input from contact form
$('form#contact').validate({
  submitHandler: function(form) {
    $(form).ajaxSubmit({
      clearForm: true,
      success: function(){
        // if it's good, do this
        contactCheck.fadeOut();
        alert("Thanks, I'll get back to you soon!");
      }
    });
    return false;
  },
  invalidHandler: function(form) {
    // if it's bad, do this
    alert('Oops, something went wrong.');
  }
});   

最后是php

$name = $_POST['name'];
$email = filter_var( $_POST['email'],FILTER_VALIDATE_EMAIL );
$message = $_POST['message'];
$from = 'From: MessageForAnita'; 
$to = 'myemail@gmail.com'; 
$subject = 'Hello';
$check = $_POST['check'];

$body = " From: $name\n E-Mail: $email\n Message:\n $message";


if ($_POST['submit'] && $check == '4') {                 
    if (mail ($to, $subject, $body, $from)) { 
        echo 'Your message was sent!';
    } else { 
        echo 'Something went wrong, go back and try again!'; 
    } 
}

【问题讨论】:

  • 检查邮件服务器日志
  • 大多数 SMTP 服务器需要有效的“发件人”地址。 “FROM:MessageForAnita”不是有效地址。将其修复为“发件人:MessageForAnita ”。但除此之外,你真的应该检查你的服务器日志是否有任何错误。
  • PHP 谎言关于正在发送的消息。 mail() 返回 true 仅表示电子邮件已成功发送到您的邮件服务器。在那之后,它仍然可能被丢弃/丢失/拒绝/blahb/blah blah blah。
  • @MarcB 并不是真的说谎,更多的是由于协议 (SMTP) 的性质,它只能告诉您消息是否已成功传递给邮件传输代理。跨度>
  • @T0xicCode:太多人从 mail() 返回 true 表示收件人收到/阅读了电子邮件。

标签: php jquery html ajax forms


【解决方案1】:

您需要检查您发送的标头并确保它们的格式正确。

这未经测试,但可以让您了解应该做什么:

$name       = $_POST['name'];
$message    = $_POST['message'];
$email      = filter_var( $_POST['email'],FILTER_VALIDATE_EMAIL );

$to         = 'myemail@gmail.com'; 
$subject    = 'Hello MessageForAnita';
$body       = "From: $name\n E-Mail: $email\n Message:\n $message";

// In case any of our lines are larger than 70 characters, we should use wordwrap()
$body       = wordwrap($body, 70, "\r\n");

$headers    = "From: $email" . "\r\n"; 

if ($_POST['submit'] && $check == '4') {                 
    if (mail ($to, $subject, $body, $headers)) { 
        echo 'Your message was sent!';
    } else { 
        echo 'Something went wrong, go back and try again!'; 
    } 
}

PHP mail function

【讨论】:

    【解决方案2】:

    我将php编辑为

    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    
    $to = "myemail@gmail.com"; 
    $subject = 'You have a message sent from your site';
    
    $check = $_POST['check'];
    
    $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    
    mail($to, $subject, $body);
    

    我很幸运收到了新邮件的通知。但是 $name、$email 和 $message 没有值,所以我只收到一封“发件人:电子邮件:消息:”的电子邮件,以解决下一个问题。感谢所有的cmets。还需要让这个表单更安全。

    更新: 我终于弄明白了。几天前,我更改了我的 .htaccess 文件,但在链接到联系表单时忘记了删除 .php 扩展名。这有多简单?

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多