【发布时间】:2022-06-16 13:10:04
【问题描述】:
例子
isPersonalEmail("name@gmail.com") // true
isPersonalEmail("name@companyName.com") // false
我找不到这样做的 NPM 包 我需要检查 node.js 服务器中的电子邮件
【问题讨论】:
标签: javascript node.js typescript email npm
例子
isPersonalEmail("name@gmail.com") // true
isPersonalEmail("name@companyName.com") // false
我找不到这样做的 NPM 包 我需要检查 node.js 服务器中的电子邮件
【问题讨论】:
标签: javascript node.js typescript email npm
我建议首先检查某个电子邮件是否有效(like this),然后您自己检查一些给定的域是否是公司电子邮件。
function isPersonalEmail(email, companyDomains) {
if(!validateEmail(email)) {
return false
}
// ensure email is not in companyDomains !
return companyDomains.every(d => email.indexOf(`@${d}`) === -1)
}
function validateEmail(email) {
return email.match(
/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
);
};
const email = 'name@gmail.com'
const email2 = 'name@companyName.com'
const email3 = 'no-email-whatsoever'
const email4 = 'name@personal.com'
// provide the companydomains.
const companyDomains = ['companyName.com']
console.log(isPersonalEmail(email, companyDomains)) // true (personal email)
console.log(isPersonalEmail(email2, companyDomains)) // false (company email!)
console.log(isPersonalEmail(email3, companyDomains)) // false (invalid email)
console.log(isPersonalEmail(email4, companyDomains)) // true (personal email!)
为了能够按ALL FREE email providers 进行过滤,您必须托管一个列表。
在网上搜索后,我发现this 列表可能是您的起点,理想情况下,您会监控哪些电子邮件被接受,哪些不接受,然后手动定期更新列表!
老实说,我不知道这个列表是否有用。使用风险自负! .
【讨论】:
我找到了两个 npm 包,您可以使用它们来实现:
提供相同的解决方案,优点是可以选择使用列表中的所有 4k 域,或仅使用 312 个公共域。他对 common 的定义如下:
common.json 包含 Majestic Million 等级为
我还偶然发现了一个relevant issue,您在提取域时可能会考虑使用它。
const emailProviders = require("email-providers/all.json")
const parser = require('tld-extract');
const validator = require('validator');
const companyEmail = "name@companyName.com"
const personalEmail = "name@gmail.com"
const personalEmailWithSubdomain = "name@abc.gmail.com"
// 1. You should validate that the string is an actual email as well
// if (!validator.isEmail(email)) return error or something...
const isPersonalEmail = (email) => {
// 2. Extract the domain
const broken = email.split('@')
const address = `http://${broken[broken.length - 1]}`
const { domain } = parser(address);
// 3. And check!
return emailProviders.includes(domain)
}
console.log(isPersonalEmail(companyEmail)) // false
console.log(isPersonalEmail(personalEmail)) // true
console.log(isPersonalEmail(personalEmailWithSubdomain)) // true
【讨论】: