我认为这里的问题是,通过放置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
班