【问题标题】:No email sent with Ajax contact form (in Wordpress)没有使用 Ajax 联系表单发送电子邮件(在 Wordpress 中)
【发布时间】:2013-08-12 18:49:06
【问题描述】:

我正在尝试在 Wordpress 中构建一个简单的 Ajax 联系表单,并使用以下代码进行验证(jQuery Validate 插件):

HTML

<script type="text/javascript">
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 
</script>

Js

$("#form").validate({  //jquery validate plugin

    ... // rules

    submitHandler: function(form) {

    var data = $('form').serialize();

        $.ajax({
            url: ajaxurl,
            type: "POST",
            data: data,        
            cache: false,
            action: 'sendmail',

            success: function (html) {           
                ... // succesful message         
            }
        }); 

        return false;

    } // end submitHandler

}); // end Validate

function.php

function send_my_mail(){
    ... //sends email
}
add_action('wp_ajax_sendmail', 'send_my_mail');
add_action('wp_ajax_nopriv_sendmail', 'send_my_mail');

当我提交表单时,浏览器控制台会检索到以下 ok 消息:

POST http://www.domain.com/wp-admin/admin-ajax.php 200 OK 3.45s 

但没有发送电子邮件。我不明白代码有什么问题!

【问题讨论】:

  • 你不会跨域吧?也许您应该发布实际的 send_my_mail 代码。
  • "action" 不是 jquery ajax 选项,因此删除 action: 'sendmail' 并将其添加到您的数据中: data.action = 'sendmail' (或添加一个名为 action 的隐藏字段,其值为 "发送邮件”到您的表单)
  • @RafH:不,尝试用data: data.action = 'sendmail', 代替data: data,,但它是一样的
  • @FredK 尝试发送不带 if 语句的邮件。看看现在是否可行。
  • 只需在表单中添加一个名为“action”且值为“sendmail”的隐藏字段或将data: data 修改为data: data + '&amp;action=sendmail'

标签: php jquery ajax wordpress


【解决方案1】:

问题是您使用了 jQuery.ajax 中不存在的“操作”选项。您只需在 data 选项中将操作传递给 WP,如下所示:

$("#form").validate({  //jquery validate plugin

    ... // rules

    submitHandler: function(form) {

    var data = $('form').serialize();

        $.ajax({
            url: ajaxurl,
            type: "POST",
            data: data + '&action=sendmail',        
            cache: false,

            success: function (html) {           
                ... // succesful message         
            }
        }); 

        return false;

    } // end submitHandler

}); // end Validate

【讨论】:

    【解决方案2】:

    为什么不用wp_mail函数?

    如果它不起作用,也请使用不同的 SMTP 连接。您可以使用 gmail SMTP 进行测试,看看这是否是您使用的 SMTP 的问题。

    【讨论】:

    • 在我使用你可以在这个问题中看到的代码之前,我使用了这里发布的代码stackoverflow.com/questions/16274093/…,它可以完美地发送电子邮件。那我认为问题不在于 Smtp
    • 当您使用简单的 mail() 函数时,它不使用 wp-config.php 中提供的 WP SMTP
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2012-04-24
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多