【发布时间】:2013-10-25 16:31:09
【问题描述】:
我正在使用 wp_mail() 接收通过我的 wordpress 博客中的联系表提交的邮件。 wp_mail() 返回 true 但问题是我没有收到任何邮件。我也尝试将邮件地址从 gmail 更改为 hotmail,但没有成功。
我的联系人模板中的 Ajax 代码
$('#send').click(function() {
//For Validation
function validateText(name) {
var pattern = /^[a-zA-Z'-.\s]+$/;
if (pattern.test(name)) {
return true;
}
return false;
}
//For Validation
function validateMail(mail) {
var pattern = /^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,3}$/;
//var pattern = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/;
if (pattern.test(mail)) {
return true;
}
return false;
}
//Getting values from the form
var name = $('#name').val(), mail = $('#mailid').val(), query = $('#message').val(), error = 1;
//For Validation
if(name == "" || !(validateText(name))) {
$('#name').addClass('error');
error = 0;
}
////For Validation
if(mail == "" || !(validateMail(mail))) {
$('#mailid').addClass('error');
error = 0;
}
//For Validation
if(query == "") {
$('#message').addClass('error');
error = 0;
}
if(!error) { // If validation fails
return false;
}
$('#sendAlert').show();
$('#send').html('Sending...');
$.post(ajax_object.ajaxurl, { // Using ajax post method to send data
action: 'ajax_action',
sendmail: 'nothing',
name: name,
mail: mail,
query: query
}, function(data) {
$('#send').html('Send');
alert(data); // Alerting response
return false;
});
});
在 Functions.php 中
function ajax_action_stuff() {
if(isset($_POST['sendmail'])) {
function set_html_content_type()
{
return 'text/html';
}
if(isset($_POST['name']) && isset($_POST['mail']) && isset($_POST['query'])) {
$name = $_POST['name'];
$email = $_POST['mail'];
$query = $_POST['query'];
$to = 'vigneshmoha@gmail.com';
if($name == "" || $email == "" || $query == "") {
echo "Fail";
return false;
}
$subject = "Website - Query from ".$name;
$message = "Hi,
<p><strong>Name</strong>:".$name."</p>
<p><strong>Mail</strong>:".$email."</p>
<h3><strong>Query</h3>
<p>".$query."</p>";
$headers[] = 'From: no-reply@gmail.com'."\r\n";
$headers[] = '';
add_filter( 'wp_mail_content_type', 'set_html_content_type' );
$mailsent = wp_mail( $to, $subject, $message, $headers);
remove_filter( 'wp_mail_content_type', 'set_html_content_type' ); // reset content-type to to avoid conflicts -- http://core.trac.wordpress.org/ticket/23578
if($mailsent) {
echo $to;
} else {
echo 'error';
}
} else {
echo 'error';
}
} else {
echo 'error';
}
die();
}
add_action( 'wp_ajax_ajax_action', 'ajax_action_stuff' );
add_action( 'wp_ajax_nopriv_ajax_action', 'ajax_action_stuff' );
【问题讨论】:
-
您的电子邮件有可能被标记为垃圾邮件,或者只是您的电子邮件提供商不允许它到达您的收件箱,您是通过 SMTP 发送的吗?你有 SPF 记录设置吗?如果您从您的网站发送电子邮件,并且将 from 标头设置为
@gmail.com或@hotmail.com,这肯定不会到达您的收件箱,因为电子邮件不是来自 gmail 或 hotmail 服务器,而是来自您的,所以它认为您正在尝试网络钓鱼攻击 -
不,它没有被标记为垃圾邮件。我也检查了垃圾邮件。邮件根本收不到。 wp_mail() 发送邮件后应该返回true,对吗?那么我应该将 from 标头更改为其他内容吗?
-
是的,没错,但这意味着邮件已经离开您的服务器,并不意味着它会到达您的收件箱,因为您之间还有许多其他步骤服务器和您的收件箱,并且在此过程中可能会出现一些不同的问题。尝试测试 from 标头,更改为
example@yourdomainname.com -
太棒了!它的工作。我已将 from 标头更改为 example@mydomainname.com。谢谢。
-
为了堆栈溢出的规则,让我添加它作为答案
标签: php jquery ajax wordpress email