在cron函数中调度时,wp_mail()函数没有运行。我增加了以下功能:
add_filter( 'cron_schedules', 'isa_add_every_one_minutes' );
function isa_add_every_one_minutes( $schedules ) {
$schedules['every_sixty_seconds'] = array(
'interval' => 60,
'display' => __( 'Every 1 Minutes', 'textdomain' )
);
return $schedules;
}
// Schedule an action if it's not already scheduled
if ( ! wp_next_scheduled( 'isa_add_every_one_minutes' ) ) {
wp_schedule_event( time(), 'every_sixty_seconds', 'isa_add_every_one_minutes' );
}
// Hook into that action that'll fire every three minutes
add_action( 'isa_add_every_one_minutes', 'only_debug_admin' );
function only_debug_admin(){
$message = "Test message";
wp_mail( 'email@example.com', $message, $message );
update_option('default_role','customer');
}当我通过wp控制插件手动运行cron时,我收到一封邮件,wp-mail工作正常。但是,当运行cron作业时。为了进行调试,我在mail函数下面添加了这一行:
update_option('default_role','customer'); 我在WordPress设置中将默认角色设置为订户。在cron运行时,该设置将被更新为“customer”,但没有收到邮件。在手动运行该函数时,将接收邮件。知道为什么会这样吗?
发布于 2019-12-04 13:00:18
这个有点令人费解。我本来想说的是,在发送邮件之后,您需要确定是否有问题,因为您在下一次操作中受到了攻击。但后来我重读了一遍,并捕捉到了当电子邮件手动运行时收到的部分。
您需要做的是找出是否发生了错误。因为这不是一个手动的过程,所以这并不是很直接;但是有一些方法可以做到。这个答案不会具体地解决所遇到的问题,但是它应该为您提供方法来确定实际问题是什么。
我会设置好捕捉任何错误,然后记录它们。您可以通过确保为调试设置WP并记录任何错误来做到这一点。确保wp-config.php中有以下内容:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );现在,您可以使用WP的error_log()函数将任何错误写入日志文件。
运行时,wp_mail()返回一个真正的“假布尔值”。如果有任何错误,它将返回false。因此,我们可以根据结果写入日志。
因此,在您的函数中,根据返回的结果写入错误日志。
function only_debug_admin(){
$message = "Test message";
$wp_mail_result = wp_mail( 'email@example.com', $message, $message );
if ( true === $wp_mail_result ) {
error_log( 'wp_mail returned true!' );
} else {
error_log( 'wp_mail had an error!' );
}
}如果wp_mail()错误(返回false),那么您希望能够捕获phpMailer中的任何错误,以查看这是否让您了解原因。
add_action( 'phpmailer_init', 'my_log_phpmailer_init' );
function my_log_phpmailer_init( $phpmailer ) {
error_log( print_r( $phpmailer, true ) );
}现在,当cron运行时,您可以检查错误日志(/ when /调试器日志)发生了什么。如果wp_mail()返回为真,则该问题是发送主机或接收方(WP之外)的电子邮件问题。如果错误,请检查来自phpMailer的错误(这也应该在日志中)。
这并不能解决您的问题,但是它可以帮助您了解问题的实质。
发布于 2022-01-10 09:49:10
在使用CLI运行cron作业(首选)时,这种情况非常常见。Wordpress使用PHPMailer,它试图从未定义的$_SERVER变量中获取SERVER_NAME,然后尝试很少回调,从而导致无效的电子邮件地址。我能想到的最简单的hacky修复,例如在wp-config.php中定义它。
if(empty($_SERVER['SERVER_NAME'])) $_SERVER['SERVER_NAME']='www.yourdomain.tld';https://wordpress.stackexchange.com/questions/353865
复制相似问题