Wp_mail()不使用AJAX发送电子邮件

时间:2018-05-13 作者:Mohd Hasan

我正在使用wp_mail() 使用ajax发送电子邮件。我的邮件代码如下。

add_action( \'wp_ajax_send_confirmation_email\', \'wpse_sendmail\' );
add_action( \'wp_ajax_nopriv_send_confirmation_email\', \'wpse_sendmail\' );

function wpse_sendmail() {
 if(isset($_GET[\'is_email\']) && $_GET[\'is_email\'] == true){
        $temp_dir   = get_template_directory_uri();

        $url        = $temp_dir."/confirm_email.php?id=".$_REQUEST[\'id\']."&key=".$_REQUEST[\'key\'];
        $message    = "Username:".$_REQUEST[\'name\']."Click on below link to confirm your email;".$url;

        $subject    = "Email confirmation Link";
        $headers    = "From: [email protected]" . "\\r\\n";

        if ( wp_mail( $_REQUEST[\'email\'], $subject, $message, $headers ) ) {
            echo "1";
        } else {
            echo "0";
        }
    }
}
AJAX代码如下

add_action(\'wp_footer\',\'my_scripts\');
function my_scripts(){
    ?>
    <script type="text/javascript">
    jQuery("#send").click(function(e){

     e.preventDefault(); // if the clicked element is a link

    //...
      var confirm_email=jQuery("#confirm_email").val();
          var confirm_key=jQuery("#confirm_key").val();
          var user_email=\'<?php echo $current_user->user_email;?>\';
          var display_name=\'<?php echo $current_user->display_name;?>\';
          var user_id=\'<?php echo $current_user->ID;?>\';


    var data = { \'action\':\'send_confirmation_email\', \'email\':\'confirm_email\',\'key\':\'confirm_key\',\'name\':\'display_name\',\'id\':\'user_id\',\'is_email\':\'true\' };

    jQuery.post(\'<?php echo admin_url(\'admin-ajax.php\'); ?>\', data, function(response) {
        if(response=="1"){
        jQuery(".confirm_email_section").html("<span class=\'alert alert-success\'>Confirmation link sent to your email. Check your email<span>");

        }
        else{
        jQuery(".confirm_email_section").html("<span class=\'alert alert-danger\'>Error Occured<span>");
        }
    });

});
    </script>
    <?php
}
通过ajax传递的每个参数都接收到上面的wpse_sendmail() 功能,但未发送电子邮件。It always returns false. 电子邮件是also not sending with mail() function in functions.php but working within a custom file. 我不知道出了什么问题。如果有人帮助我,我将非常感激。

2 个回复
SO网友:Krzysiek Dróżdż

这是不可能的。。。

在JS中,您可以这样填充数据:

var data = {
    \'action\':\'send_confirmation_email\',
    \'email\':\'confirm_email\',
    \'key\':\'confirm_key\',
    \'name\':\'display_name\',
    \'id\':\'user_id\',
    \'is_email\':\'true\'
};
稍后,在PHP中的AJAX回调中,您将按如下方式使用它:

wp_mail( $_REQUEST[\'email\'], $subject, $message, $headers );
因此,您尝试使用“confirm\\u email”作为收件人地址发送电子邮件。它不能也不会工作;)

SO网友:Manan

请检查add_action( \'wp_ajax_send_confirmation_email\', \'wpse_sendmail\' ); 应该是这样的add_action( \'wp_ajax_wpse_sendmail\', \'wpse_sendmail\' ); 与函数名相同

结束