Wp_mail()函数不以AJAX模式发送电子邮件

时间:2017-01-28 作者:Hossein Hashemi

当我使用wp_mail()mail() 函数在AJAX中,该函数不起作用,也不发送电子邮件。

当我只在函数中使用这些函数时。php文件它工作正常。

它与WordPress函数或操作无关。我已经检查了一切,包括使用SMTP邮件。SMTP邮件的工作原理与mail() 函数,它不会以AJAX模式发送。

这是我的职能。php文件内容:

add_action( \'phpmailer_init\', \'wpse8170_phpmailer_init\' );
function wpse8170_phpmailer_init( PHPMailer $phpmailer ) {
    $phpmailer->Host = \'godadysmtpsampledomain.secureserver.net\';
    $phpmailer->Port = 465; // could be different
    $phpmailer->Username = \'[email protected]\'; // if required
    $phpmailer->Password = \'12345\'; // if required
    $phpmailer->SMTPAuth = true; // if required
    $phpmailer->SMTPSecure = \'ssl\'; // enable if required, \'tls\' is another possible value

    $phpmailer->IsSMTP();

}
// This code works fine;
wp_mail("[email protected]", "test", "test");
但是AJAX模式下的其他代码或插件,如Contact Form 7不起作用,这意味着电子邮件无法送达。我检查了这些插件wp_mail() 返回true,但电子邮件未送达。

3 个回复
SO网友:Hossein Hashemi

@T、 托多瓦:

好吧,当我用你的方式时,它不会发送电子邮件。它在Ajax功能中不发送电子邮件,这正是我的问题

add_action( \'wp_ajax_ABCABCABC\', \'wpse8170_phpmailer_init\' );
function wpse8170_phpmailer_init() { 

//it doesn\'t send/deliver in a Ajax function
wp_mail("[email protected]", "test", "test");

 }
但当我在post back page中使用wp\\u mail()时,它可以很好地工作,例如,将其放入函数中。它发送/传递电子邮件的php文件:

//functions.php
//It sends in this mode
wp_mail("[email protected]", "test", "test");
这是我的问题。

SO网友:Diego Somar

为时已晚,但也许可以帮助别人。我不建议在代码中更改SMTP数据,因为:

SMTP连接数据是可变的。如果您在localhost上工作,可能需要发送测试电子邮件(例如使用mailcacher). 在这种常见情况下,您将有2个SMTP数据,并且在将文件发送到生产服务器时可能会混淆有一个很好的解决方案可以更改SMTP数据。是轻量级插件Easy WP SMTP. 使用此插件,您可以在Wordpress数据库中设置SMTP数据。

由于每个环境都有自己的数据库(生产服务器、dev 1、dev 2等),因此可以在使用的每个WP Admin中设置SMTP数据。

在生产服务器中,设置真正的SMTP。在开发服务器(localhost)中,可以设置测试SMTP数据。

SO网友:T.Todua

这是什么?

add_action( \'phpmailer_init\', ...........

您应该使用:

add_action( \'wp_ajax_ABCABCABC\', \'wpse8170_phpmailer_init\' );
function wpse8170_phpmailer_init() { ....... }
在JAVASCRIPT调用中,执行以下操作:

<script type="text/javascript" >
jQuery(document).ready(function($) {

    var data = {
        \'action\': \'ABCABCABC\',
        \'whatever\': 1234
    };

    jQuery.post(ajaxurl, data, function(response) {
        //alert(\'Response got!! : \' + response);
    });
});
</script>
(source).

相关推荐