$address = self::get_recipient_address($recipient);
            $subject = do_shortcode($post->post_title);
            $message = wptexturize(wpautop(do_shortcode($post->post_content)));
            if (wp_mail($address, $subject, $message)) {
                ++$success_count;
            } else {
                ++$failure_count;
            }
        }
        error_log("Message sent to {$success_count} users. {$failure_count} failed.");
    }
    public static function get_recipient_address($recipient)
    {
        if ($recipient instanceof WP_User) {
            return "\"{$recipient->display_name}\" <{$recipient->user_email}>";
        } else {
            if (is_array($recipient)) {
                $name = wskl_get_from_assoc($recipient, 'name');
                $addr = wskl_get_from_assoc($recipient, 'addr');
                if ($name) {
                    return "\"{$name}\" <{$addr}>";
                } else {
                    return $addr;
                }
            }
        }
        return $recipient;
    }
}
WSKL_Inactive_Accounts_Email::init();
 public function process_deactivation(array &$to_disabled, $target_role)
 {
     $post_id = wskl_get_option('inactive-accounts_post_deactivation');
     $shortcodes = WSKL()->submodules()->get_submodule('inactive-accounts')->shortcodes;
     $keys_to_preserve = array(wskl_get_option_name('inactive-accounts_alerted'));
     foreach ($to_disabled as $user) {
         wskl_deactivate_account($user, $this->cron_job_id, $keys_to_preserve, $target_role);
     }
     WSKL_Inactive_Accounts_Email::send_email($to_disabled, $post_id, $shortcodes);
 }