wordpress:允许仅向特定域发送电子邮件

问题描述 投票:0回答:2

WordPress 问题:如果有人能帮助我解决这个问题,那就太好了: 出于安全原因,我想将“收件人”字段限制为仅包含几个特定域,例如,如果仅发送到@domain1.com和@domain2.com,则允许发送电子邮件;所有其他电子邮件将被阻止。

我需要在 wp_mail 功能中添加任何过滤器吗?任何线索都会有帮助,因为我是 WordPress 编程的新手:)。谢谢。

wordpress smtp
2个回答
0
投票

在使用 wp_mail 函数发送邮件之前,您必须使用 preg_match 检查电子邮件地址是否与您的域匹配

使用这种模式(此示例允许使用以下域的邮件:domain.com 和domain2.com) https://www.regextester.com/94044 如果 preg_match 返回 true 则发送邮件,否则抛出错误


0
投票

这使用了

'pre_wp_mail'
钩子,该钩子允许阻止发送邮件,并将过滤使用
wp_mail()
发送的所有邮件。

这仅检查“收件人”收件人,如果需要,还需要对抄送和密件抄送进行额外检查。

    add_filter(
        hook_name: 'pre_wp_mail',
        callback: static function (?bool $return, array $atts) {
            $regex = ".*@domain1\.com|.*@domain2\.com";

            $to = $atts['to'] ?? [];
            $to = !is_array($to) ? explode(',', $to) : $to;
            foreach ($to as $address) {
                if (preg_match('/(.*)<(.+)>/', $address, $matches) && count($matches) === 3) {
                    $address = $matches[2];
                }

                if (!preg_match($regex, $address)) {
                    return false;
                }
            }

            return null;
        },
        accepted_args: 2
    );
© www.soinside.com 2019 - 2024. All rights reserved.