在WordPress中,站长为了让自己更加了解站点的运行情况,一般新用户注册、登录或者用户评论时都会发送邮件通知站长本人,或者发送相关的通知给用户,但是由于在WordPress发送邮件的方式是同步的,而我又是使用的qq邮箱的smtp发送邮件,服务器不是在国内,这导致用户登录或者评论文章都要好久的时间,如果可以异步发送邮件就好了,不阻塞用户当前操作,改善用户体验。
然后就找到了这个链接:https://wordpress.stackexchange.com/questions/185295/how-to-make-wordpress-emails-async
主要的异步发送邮件代码如下:
/**
* 异步发送邮件
*/
if ( ! defined( 'DOING_CRON' ) || ( defined( 'DOING_CRON' ) && ! DOING_CRON ) ) {
function wp_mail() {
// 获取 wp_mail 函数的参数
$args = func_get_args();
// 添加一个随机值以避免重复发送,参考: http://codex.wordpress.org/Function_Reference/wp_schedule_single_event
$args[] = mt_rand();
// 5 秒之后发送邮件
wp_schedule_single_event( time() + 5, 'cron_send_mail', $args );
}
}
add_action( 'cron_send_mail', function () {
$args = func_get_args();
// 移除上面添加的随机数
array_pop( $args );
call_user_func_array( 'wp_mail', $args );
}, 10, 10 );
上述代码重写了非CRON请求的wp_mail
函数,使用wp_schedule_single_event
做定时任务,在5秒之后才发送邮件,这样就可以完美的解决同步发送邮件会阻塞的缺点,是一个非常好的异步解决方案。
参考链接
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:WordPress – 异步发送邮件,解决发送邮件阻塞耗时的问题
原文链接:https://www.stubbornhuang.com/2621/
发布于:2023年05月19日 9:17:36
修改于:2023年05月19日 9:18:58
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52