请帮我解码真正的问题是什么。问题是,尽管我对这段代码进行了所有的调整和研究,但我还是收到了一封空白的电子邮件。下面是我的html、javascript(ajax)和php代码。
HTML代码:名为contact.HTML 的文件
<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="sendemail.php">
<div class="col-sm-5 col-sm-offset-1">
<div class="form-group">
<label>Name *</label>
<input type="text" name="name" class="form-control" required="required">
</div>
<div class="form-group">
<label>Email *</label>
<input type="email" name="email" class="form-control" required="required">
</div>
<div class="form-group">
<label>Phone</label>
<input type="number" class="form-control">
</div>
<div class="form-group">
<label>Company Name</label>
<input type="text" class="form-control">
</div>
</div>
<div class="col-sm-5">
<div class="form-group">
<label>Subject *</label>
<input type="text" name="subject" class="form-control" required="required">
</div>
<div class="form-group">
<label>Message *</label>
<textarea name="message" id="message" required="required" class="form-control" rows="8"></textarea>
</div>
<div class="form-group">
<button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Submit Message</button>
</div>
</div>
</form>
AJAX代码:名为main.js 的文件
// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
var form_status = $('<div class="form_status"></div>');
$.ajax({
url: $(this).attr('action'),
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
});
});
PHP代码:名为sendemail.PHP 的文件
<?php
header('Content-type: application/json');
$status = array(
'type'=>'success',
'message'=>'Thank you for contact us. As early as possible we will contact you '
);
$name = @trim(stripslashes($_POST['name']));
$email = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$email_from = $email;
$email_to = 'email@email.com';//replace with your email
$body = 'Name: ' . $name . "'n'n" . 'Email: ' . $email . "'n'n" . 'Subject: ' . $subject . "'n'n" . 'Message: ' . $message;
$success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
echo json_encode($status);
die;
?>
有了这个,我不断收到一封空白的电子邮件,如下面所示
Name:
Email: Blank
Phone: Blank
Subject: Blank
Message: Blank
您是否在脚本末尾尝试过out the die()?我认为你可能会过快地毁掉你的页面。
也可以尝试创建这样的捕获:
if (!mail(...))
{
// Reschedule for later try or panic appropriately!
}
此外,您正在使用@before-mail()来抑制警告;尝试删除@。
编辑:另外,尝试删除修剪。
您在调用ajax时没有设置数据,这可能是您的问题。
当我测试您的代码时,我看到虽然您在表单属性中将mehtod定义为POST,但仍会触发GET请求。(也许这就是jQuery使用GET作为默认值的原因…)。所以$_POST['name']是空的,因为参数在$_GET['name']中。
当我提交表单时,我看不到请求参数。(也许这就是为什么没有设置"数据"属性的原因。)
请尝试使用以下内容完成$.ajax:
method: 'POST'
data: $(this).serialize()
非常感谢你们所有人(@Mateusz Klimentowicz,@Mat VP,@Jose Manuel Abarca Rodríguez,@Vladimir Nu)。实际上,我遵循了您的指示,最终纠正了JS文件和PHP文件,如下所示:
JS文件:
// Contact form
var form = $('#main-contact-form');
form.submit(function(event){
event.preventDefault();
// Serialize the form data.
var formData = $(form).serialize();
var form_status = $('<div class="form_status"></div>');
$.ajax({
type: 'POST',
url: $(this).attr('action'),
data: formData,
beforeSend: function(){
form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
}
}).done(function(data){
form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
});
});
而PHP代码变成了这样:
<?php
$status = array(
'type'=>'success',
'message'=>'Thank you for contacting us. As soon as possible we will contact you!'
);
$fail = array(
'type'=>'fail',
'message'=>'Please try again. Your mail could not be delivered!'
);
$name = @trim(stripslashes($_POST['name']));
$email = @trim(stripslashes($_POST['email']));
$subject = @trim(stripslashes($_POST['subject']));
$message = @trim(stripslashes($_POST['message']));
$email_from = $email;
$email_to = 'email@mail.com';//replace with your email
$body = 'Name: ' . $name . "'n'n" . 'Email: ' . $email . "'n'n" . 'Subject: ' . $subject . "'n'n" . 'Message: ' . $message;
$success = @mail($email_to, $subject, $body, 'From: <'.$email_from.'>');
header('Content-type: application/json');
if($success){
echo json_encode($status);
}
else{
echo json_encode($fail);
}
?>
在使用了以下代码后,我最终没有收到任何空白页的电子邮件。电子邮件现在与内容一起交付。非常感谢。