如何用Javascript实现自定义禁止发送邮箱列表功能?
JavaScript 自定义禁止发送邮箱列表实现方案
核心实现逻辑
维护精准的指定邮箱黑名单,在发信流程的前置环节做精确完全匹配校验,仅匹配到列表内的邮箱时才拦截,不会屏蔽整个域名。
前端校验代码示例(用户发信前触发)
// 1. 定义禁止发送的邮箱黑名单,可根据需求灵活增删 const BLOCKED_RECIPIENTS = [ 'ceo@yourcompany.com', 'cfo@yourcompany.com', 'board@yourcompany.com' ].map(item => item.toLowerCase()) // 统一转小写避免大小写匹配问题 // 2. 邮箱拦截校验函数 function checkBlockedRecipient(recipientEmails) { // 支持单个或多个收件人校验,多个收件人用数组传入 const recipients = Array.isArray(recipientEmails) ? recipientEmails : [recipientEmails] // 遍历所有收件人校验是否在黑名单中 return recipients.some(email => { const formattedEmail = email.trim().toLowerCase() return BLOCKED_RECIPIENTS.includes(formattedEmail) }) } // 3. 发信按钮触发逻辑示例 function handleSendEmail() { const toEmail = document.getElementById('recipient-input').value // 多收件人场景可以按分隔符(逗号、分号)切割成数组再传入 // const toEmailList = toEmail.split(/[,;]/).map(item => item.trim()).filter(Boolean) if (checkBlockedRecipient(toEmail)) { alert('抱歉,您无权向该收件人发送邮件,请联系行政团队走特殊申请流程') return // 拦截发信流程 } // 校验通过,继续执行发信逻辑 sendEmailRequest() }
后端校验补充(Node.js 示例)
前端校验仅做友好提示,必须在后端接口层做二次校验,避免前端逻辑被恶意绕过:
// 后端接口接收发信请求时的校验逻辑 app.post('/api/send-email', (req, res) => { const { recipients, content } = req.body // 和前端保持一致的黑名单和校验逻辑 const BLOCKED_RECIPIENTS = [ 'ceo@yourcompany.com', 'cfo@yourcompany.com', 'board@yourcompany.com' ].map(item => item.toLowerCase()) const hasBlocked = recipients.some(email => { const formatted = email.trim().toLowerCase() return BLOCKED_RECIPIENTS.includes(formatted) }) if (hasBlocked) { return res.status(403).json({ code: 403, msg: '无权向指定收件人发送邮件' }) } // 校验通过,执行发信逻辑 })
注意事项
- 所有邮箱匹配前统一做去空格、转小写处理,避免因为输入空格、大小写差异导致匹配失效
- 目前逻辑为精确完全匹配,不会拦截同域名下的其他非禁止邮箱,符合不需要屏蔽整域名的需求
- 后续如果需要新增禁止邮箱,只需要更新
BLOCKED_RECIPIENTS数组即可,不需要修改核心校验逻辑 - 如果需要支持通配符规则(比如拦截所有
*@exec.yourcompany.com后缀的邮箱),可以把匹配逻辑修改为正则匹配即可
内容的提问来源于stack exchange,提问作者Jane Max Meng
相关产品推荐
相关产品推荐

