WordPress不断地发送电子邮件。怎样才能阻止它?

时间:2015-07-03 作者:Ameer Mousavi

最近我要测试wp\\u邮件功能。我将以下代码写入插件文件:wp_mail( \'[email protected]\', \'The subject\', \'The message\' );

我输入了我的电子邮件而不是[email protected].现在WordPress不断向我发送电子邮件。我不知道怎么阻止它!15分钟内就有1000多封邮件。请帮帮我。我禁用了所有插件,甚至删除了可插入插件。php文件。

上下文是:

function twp_mail_action($result, $to, $cc, $bcc, $subject, $body){
    $nt = new Notifygram();
    $_apikey = get_option(\'twp_api_key\');
    $_apitoken = get_option(\'twp_api_token\');
    $_projectname = get_option(\'twp_project_name\');
    $nt->Notifygram($_apikey,$_apitoken, $_projectname );
    $nt->notify($body);
    wp_mail( \'[email protected]\', \'The subject\', \'The message\' );
}
add_action( \'phpmailer_init\', function( $phpmailer ){
    $phpmailer->action_function = \'twp_mail_action\';
    } );

1 个回复
最合适的回答,由SO网友:birgire 整理而成

我认为这里的问题是,通过放置wp_mail() 内部$phpmailer->action_function 回调,在每封电子邮件之后激发。

每次发送电子邮件时wp_mail(), 你打电话wp_mail() 一次又一次,一次又一次。。。等

可能的解决方法,例如,您应该使用以下方法:

function twp_mail_action($result, $to, $cc, $bcc, $subject, $body){

    // Here we remove the phpmailer_init action callback, to avoid infinite loop:
    remove_action( \'phpmailer_init\', \'wpse_phpmailer_init\' );

    // Send the test mail:
    wp_mail( \'[email protected]\', \'The subject\', \'The message\' );

    // Here we add it again
    add_action( \'phpmailer_init\', \'wpse_phpmailer_init\' );

}

add_action( \'phpmailer_init\', \'wpse_phpmailer_init\' );

function wpse_phpmailer_init( $phpmailer )
{
    $phpmailer->action_function = \'twp_mail_action\';
} 
请注意,这是untested, 因此,如果测试中出现错误,请小心仅在可以自己清除邮件队列的服务器上测试;-)

更好的方法是:例如,将测试记录到文件中。

限制电子邮件的发送,如果我们可以在进行测试时限制每页负载发送的电子邮件数量,那将很有趣。

对于这样一个插件,有一个想法:

<?php
/**
 * Plugin Name: Limit Delivered Emails
 * Description: Set an upper limit to number of sent emails per page load.
 * Plugin URI:  https://wordpress.stackexchange.com/a/193455/26350
 */
add_action( \'phpmailer_init\', function( $phpmailer )
{
    $max_emails_per_page_load = 10; // <-- Edit this to your needs!

   if( did_action( \'phpmailer_init\' ) > $max_emails_per_page_load )
       $phpmailer->ClearAllRecipients();

} );
在这里,我们用ClearAllRecipients() 方法停止电子邮件传递。

我们还可以抛出一个未捕获的错误:

throw new \\phpmailerException( __( \'Too many emails sent!\' ) );
而不是使用:

$phpmailer->ClearAllRecipients();
这与我的answer here 关于使用PHPMailer

结束

相关推荐

Virtual Pages plugins

我很难让插件正常工作Virtual Pages (WordPress插件可简化虚拟页面的创建)我确实进行了编辑,根据查询创建了一个循环。add_action( \'gm_virtual_pages\', function( $controller ) { /* Creating virtuals pages for companies */ $args = array( \'post_type\' => array(\'companies\',), \'post_status\'