我有一个在Windows Azure上运行的网站,其中包含一个简单的联系表单,供人们联系。不幸的是,这种形式现在不起作用......
我有一个index.php文件,其中包含以下格式:
<div class="form">name="name" placeholder="Name" id="contactname" />
<input type="text" name="email" placeholder="Email" id="contactemail" />
<textarea name="message" placeholder="Message" id="contactmessage"></textarea>
<button>Contact</button>
</div>
然后我有一个像这样的JS文件:
if ($('#contact').is(":visible")) {
$("#contact button").click(function() {
var name = $("#contactname").val();
var message = $("#contactmessage").val();
var email = $("#contactemail").val();
var emailReg = /^[a-zA-Z0-9._+-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,3})?(\.[a-zA-Z]{2,3})?$/;
// client-side validation
if(emailReg.test(email) == false) {
var emailValidation = false;
$('#contactemail').addClass("error");
}
else
$('#contactemail').removeClass("error");
if(name.length < 1) {
var nameValidation = false;
$('#contactname').addClass("error");
}
else
$('#contactname').removeClass("error");
if(message.length < 1) {
var messageValidation = false;
$('#contactmessage').addClass("error");
}
else
$('#contactmessage').removeClass("error");
if ((nameValidation == false) || (emailValidation == false) || (messageValidation == false))
return false;
$.ajax({
type: "post",
dataType: "json",
url: "send-email.php",
data: $("#contact").serialize(),
success: function(data) {
$('.form').html('<p class="success">Thanks for getting in touch - we\'ll get back to you shortly.</p>');
}
});
return false;
});
};
最后,一个php文件发送名为send-email.php的电子邮件:
$destination = 'info@clouddock.co'; // change this to your email.
// ##################################################
// DON'T EDIT BELOW UNLESS YOU KNOW WHAT YOU'RE DOING
// ##################################################
$email = $_POST['email'];
$name = $_POST['name'];
$message = $_POST['message'];
$subject = $name;
$headers = "From: ".$name." <".$email.">\r\n" .
"Reply-To: ".$name." <".$email.">\r\n" .
"X-Mailer: PHP/" . phpversion() . "\r\n" .
"MIME-Version: 1.0\r\n" .
"Content-Type: text/plain; charset=\"iso-8859-1\r\n" .
"Content-Transfer-Encoding: 8bit\r\n\r\n";
mail($destination, $subject, $message, $headers);
}
当我填写联系表单时,JS验证似乎正常工作,当我点击发送“感谢接触......”文本时,就好像邮件已经发送一样。但我没有收到任何电子邮件。任何人都可以建议问题可能在哪里?可能是Azures配置阻止了消息的发送吗?
答案 0 :(得分:1)
您正在使用$("#contact").serialize()
来获取要发送的数据,但您没有ID contact
的元素。
您应该使用$("#contactname, #contactemail, #contactmessage").serialize()
(并修复第一个输入;))。
始终在PHP中验证输入数据,而不仅仅是JS!
答案 1 :(得分:1)
当然它会显示感谢信息,它所需要的只是来自服务器的响应。您需要的是测试邮件是否实际发送,然后将其返回到原始脚本以确定要显示的消息。
if(mail($destination, $subject, $message, $headers)) {
return '<p class="success">Thanks for getting in touch - we\'ll get back to you shortly.</p>';
} else {
return '<p class="fail">The e-mail failed to send.</p>';
}
然后将您的AJAX设置为:
$.ajax({
type: "post",
url: "send-email.php",
data: $("#contact").serialize(),
success: function(data) {
$('.form').html(data);
}
});
您可能会发现您收到了失败消息,这很可能是您的服务器设置,或者您可能没有将正确的事情传递给mail()函数。然后,您需要调试脚本以确定是否正在传递正确的信息等。
对于Windows服务器,需要将它们配置为将所有邮件从mail()函数传递到SMTP服务器,因此如果您的Azure服务器上没有这样做,那么您的邮件将立即失败。