WordPress 问题:如果有人能帮助我解决这个问题,那就太好了: 出于安全原因,我想将“收件人”字段限制为仅包含几个特定域,例如,如果仅发送到@domain1.com和@domain2.com,则允许发送电子邮件;所有其他电子邮件将被阻止。
我需要在 wp_mail 功能中添加任何过滤器吗?任何线索都会有帮助,因为我是 WordPress 编程的新手:)。谢谢。
在使用 wp_mail 函数发送邮件之前,您必须使用 preg_match 检查电子邮件地址是否与您的域匹配
使用这种模式(此示例允许使用以下域的邮件:domain.com 和domain2.com) https://www.regextester.com/94044 如果 preg_match 返回 true 则发送邮件,否则抛出错误
这使用了
'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
);