当我点击水平菜单上的“Contact
”时,此页面将加载到另一个html页面中。
我必须删除$(document).ready(function()
才能让它一直运行。
除了我实际上没有收到电子邮件之外,一切似乎都在起作用。 有什么想法吗?
谢谢!
以下是 contact.html :
<script type="text/javascript">
$("#submit_btn").click(function() {
//collect input field values
var user_name = $('input[name=name]').val();
var user_email = $('input[name=email]').val();
var user_message = $('textarea[name=message]').val();
//simple validation at client's end
//we simply change border color to red if empty field using .css()
var proceed = true;
if(user_name==""){
$('input[name=name]').css('border-color','red');
proceed = false;
}
if(user_email==""){
$('input[name=email]').css('border-color','red');
proceed = false;
}
if(user_message=="") {
$('textarea[name=message]').css('border-color','red');
proceed = false;
}
//everything looks good! proceed...
if(proceed)
{
//data to be sent to server
post_data = {'userName':user_name, 'userEmail':user_email, 'userMessage':user_message};
//Ajax post data to server
$.post('contact_me.php', post_data, function(data){
//load success massage in #result div element, with slide effect.
$("#result").hide().html('<div class="success">'+data+'</div>').slideDown();
//reset values in all input fields
$('#contact_form input').val('');
$('#contact_form textarea').val('');
}).fail(function(err) { //load any error data
$("#result").hide().html('<div class="error">'+err.statusText+'</div>').slideDown();
});
}
});
//reset previously set border colors and hide all message on .keyup()
$("#contact_form input, #contact_form textarea").keyup(function() {
$("#contact_form input, #contact_form textarea").css('border-color','');
$("#result").slideUp();
});
</script>
<fieldset id="contact_form">
<div id="result"></div>
<label for="name"><span>Name</span>
<input type="text" name="name" id="name" placeholder="Enter Your Name" />
</label>
<label for="email"><span>Email Address</span>
<input type="text" name="email" id="email" placeholder="Enter Your Email" />
</label>
<label for="message"><span>Message</span>
<textarea name="message" id="message" placeholder="Enter Your Name"></textarea>
</label>
<label><span> </span>
<button class="submit_btn" id="submit_btn">Submit</button>
</label>
</fieldset>
这是 contact_me.php
<?php
if($_POST)
{
//check if its an ajax request, exit if not
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
die();
}
$to_Email = "@gmail.com"; //Replace with recipient email address
$subject = 'ContactUS'; //Subject line for emails
//check $_POST vars are set, exit if any missing
if(!isset($_POST["userName"]) || !isset($_POST["userEmail"]) || !isset($_POST["userMessage"]))
{
die();
}
//Sanitize input data using PHP filter_var().
$user_Name = filter_var($_POST["userName"], FILTER_SANITIZE_STRING);
$user_Email = filter_var($_POST["userEmail"], FILTER_SANITIZE_EMAIL);
$user_Message = filter_var($_POST["userMessage"], FILTER_SANITIZE_STRING);
//additional php validation
if(strlen($user_Name)<4) // If length is less than 4 it will throw an HTTP error.
{
header('HTTP/1.1 500 Name is too short or empty!');
exit();
}
if(!filter_var($user_Email, FILTER_VALIDATE_EMAIL)) //email validation
{
header('HTTP/1.1 500 Please enter a valid email!');
exit();
}
if(strlen($user_Message)<5) //check emtpy message
{
header('HTTP/1.1 500 Too short message! Please enter something.');
exit();
}
//proceed with PHP email.
$headers = "From: $user_Email\n" .
"Reply-To: $user_Email\n" .
"MIME-Version: 1.0\n" .
"Content-Type: text/html\n" .
"X-Mailer: PHP/" . phpversion();
@$sentMail = mail($to_Email, $subject, $user_Message .' -'.$user_Name, $headers);
if(!$sentMail)
{
header('HTTP/1.1 500 Couldnot send mail! Sorry..');
exit();
}else{
echo 'Hi '.$user_Name .', Thank you for your email! ';
echo 'Your email has already arrived in my Inbox, all I need to do is Check it.';
}
}
?>
解决方案: 我正在使用dreamhost并尝试从dreamhost服务器发送邮件,但使用“来自:@gmail”帐户。我不得不创建一个dreamhost @mydomain电子邮件并从那里发送。我检查了电子邮件日志并看到了这个错误:550 5.7.1不允许发件人域名。 可在此处阅读:http://wiki.dreamhost.com/PHP_mail()
答案 0 :(得分:2)
这里可能存在许多问题。
首先,die()
是正确错误处理的不良替代品 - 至少会返回HTTP 500错误,就像您在代码中处理其他一些错误情况一样。
其次,正如RUJordan规定的那样,@
会抑制错误信息。您也可能没有邮件服务器;您应该(仅在开发环境中)使用error_reporting(E_ALL)
函数。
第三,您的电子邮件标题应按\r\n
分隔,而不是\n
,如PHP Documentation中所述。您的上一个标题也应该包含\r\n
。
第四,从用户的电子邮件地址发送电子邮件(让我们使用“abc@example.com”)通过您的服务器(让我们使用“yourdomain.com”)是一种常见的垃圾邮件策略,通常会导致电子邮件被标记为垃圾邮件和/或自动删除(Gmail已对我这样做了)。尝试从“noreply@yourdomain.com”发送 - 您的服务器现在从自己的域发送电子邮件,因此更值得信赖。无论如何,您应该检查垃圾邮件文件夹 - 但是此步骤会减少Gmail在邮件到达您的收件箱或垃圾邮件文件夹之前将其删除的可能性。
最后,邮件服务器有时会遇到负载。电子邮件可能不会立即发送;尝试等待几个小时(tumblr曾经有过这么长的延迟)。此外,如果这是托管主机平台,请与主机核实一切都是应该的。
答案 1 :(得分:-1)
不接收PHP中的电子邮件可能有很多原因。如果您的php.ini具有正确的smtp.host设置,请检查您的邮件服务器是否正常工作。如果您使用外部电子邮件地址接收(例如谷歌电子邮件),您的邮件服务器应该能够向其发送消息。 Gmail需要身份验证和SMTPS才能发送,这需要额外设置邮件服务器。另外,检查您的垃圾邮件文件夹!