[英]AJAX/PHP emailer doesn't send email
这是我的PHP邮件程序代码:
if ($_POST) {
$email=$_POST['email'];
$subject=$_POST['subject'];
$budget=$_POST['budget'];
$text=$_POST['text'];
$to="hello@mymail.com";
mail($to, "Piece of Cake = ".$subject, $text, "Budget:".$budget, "From:".$email );
}
这是我的AJAX电子邮件功能:
$(function (){
$('button#send_brief').click(function(){
var email = $('#brief_email');
var subject = $('#brief_type');
var budget = $('#brief_budget');
var text = $('#brief_comments');
var emailerData = 'email' + email +'&subject' + subject + '&budget' + budget+ '&text' + text;
if(text=='') {
$('#brief_email').css({'background-color':'red'});
}
else {
$.ajax({
type: "POST",
url:"emailer.php",
data: emailerData,
success: function(){
$('.success').fadeIn(1000);
setTimeout (function(){
$('.brief').slideUp({
duration: 1000,
easing: 'easeInSine'});}
,2000);
setTimeout (function(){
$('#brief').fadeIn();}
,3000);
setTimeout (function(){
$('.success').fadeOut(1000);}
,2000);
}
});
return false;}
});
});
这是我的表格:
<form method="POST" action="" >
<fieldset>
<label for="brief_email">Your email</label>
<input type="text" id="brief_email" placeholder="your contact email here"/>
etc ...
</fieldset>
</form>
<button id="send_brief">Send it</button>
首先,当我将所有字段留空时,它仍然显示“成功”屏幕。 其次,即使输入有效数据,我也不会收到发送的电子邮件。
我已经多次检查了代码,对我来说似乎还可以。
请帮助我找到我错了。
您的问题出在AJAX构造中,您缺乏使用val()
获得价值的机会
var email = $('#brief_email').val();
var subject = $('#brief_type').val();
var budget = $('#brief_budget').val();
var text = $('#brief_comments').val();
没有val()
您将向PHP脚本发送一个对象,而不是一个值。
而您缺少的vars构造=
var emailerData = 'email=' + email +'&subject=' + subject + '&budget=' + budget+ '&text=' + text;
同样,您的mail()
构造很差,您不能发送任何其他值,除非它需要检查mail() 。 并且您检查$_POST
, $_POST
始终为true,您需要检查至少一个post值。
<?php
if (isset($_POST['email'])) {
$email=$_POST['email'];
$subject=$_POST['subject'];
$budget=$_POST['budget'];
$text=$_POST['text'];
$to = 'mail@example.com';
$subject = "Piece of Cake = ".$_POST['subject'];
$message = "New message from website
Email: $email
Budget: $budget
Comments: $text";
$headers = 'From: ' . $email . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
}
?>
您需要检查发送的电子邮件
if ($_POST) {
$email=$_POST['email'];
$subject=$_POST['subject'];
$budget=$_POST['budget'];
$text=$_POST['text'];
$to="hello@mymail.com";
if(mail($to, "Piece of Cake = ".$subject, $text, "Budget:".$budget, "From:".$email )) echo '1';
else echo '0';
}
在ajax响应中检查已发送电子邮件的响应
$(function (){
$('button#send_brief').click(function(){
var email = $('#brief_email');
var subject = $('#brief_type');
var budget = $('#brief_budget');
var text = $('#brief_comments');
var emailerData = 'email' + email +'&subject' + subject + '&budget' + budget+ '&text' + text;
if(text=='') {
$('#brief_email').css({'background-color':'red'});
}
else {
$.ajax({
type: "POST",
url:"emailer.php",
data: emailerData,
success: function(result){
if(result == 1){
$('.success').fadeIn(1000);
setTimeout (function(){
$('.brief').slideUp({
duration: 1000,
easing: 'easeInSine'});}
,2000);
setTimeout (function(){
$('#brief').fadeIn();}
,3000);
setTimeout (function(){
$('.success').fadeOut(1000);}
,2000);
}
}
});
return false;}
});
});
您的电子邮件发送代码有两个问题:
mail($to, "Piece of Cake = ".$subject, $text, "Budget:".$budget, "From:".$email );
第一个问题是您没有检查返回值:
if (false === mail( ... )) { echo "Yelp! Mail not sent"; }
第二个问题是您的电子邮件标题应合并为第四个参数:
mail($to, "Piece of Cake = ".$subject, $text, "Budget: $budget\r\nFrom: $email");
这是因为第五个参数用于sendmail
,但它不是电子邮件标题的另一个字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.