WordPress中发送邮件相关的调整

通过SMTP服务器来发送邮件,同时将发送任务放入Action Scheduler队列。

function izs_on_wp_mail($attrs) {
	$attrs['source'] = 'action-scheduler';
	return $attrs;
}
function izs_on_do_send_mail($attrs) {
	add_filter( 'wp_mail', 'izs_on_wp_mail', 10, 1 );
	wp_mail( $attrs['to'], $attrs['subject'], $attrs['message'], $attrs['headers'] ?? '', $attrs['attachments'] ?? [] );
	remove_filter( 'wp_mail', 'izs_on_wp_mail' );
}
add_action( 'izs_do_send_mail', 'izs_on_do_send_mail', 10, 1 );

// 将邮件放入队列
add_filter( 'pre_wp_mail', function ($return, $attrs) {
	if ($return != null) {
		return $return;
	}

	if (isset($attrs['source']) && $attrs['source'] === 'action-scheduler') {
		unset($attrs['source']);
		return null;
	}

	$result = as_schedule_single_action( time(), 'izs_do_send_mail', [$attrs], 'izs-seo' );
	return $result > 0;
}, 10, 2 );

// 使用SMTP发送邮件
function izs_on_phpmailer_init(\PHPMailer\PHPMailer\PHPMailer $mailer) {
    $mailer->isSMTP();
    $mailer->Host = '这里是邮箱服务器地址';
    $mailer->SMTPAuth   = true;
    $mailer->SMTPSecure = true;
    $mailer->Port = 465;
    $mailer->Username = '这里是SMTP账号';
    $mailer->Password = '这里是SMTP密码';
    $mailer->setFrom('这里是发送人邮箱地址', '这里是发送人备注');
    return $mailer;
}
add_filter('phpmailer_init', 'izs_on_phpmailer_init', 10, 1 );

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注