【发布时间】: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