【问题标题】:Check email domain type (personal email or company email)检查电子邮件域类型(个人电子邮件或公司电子邮件)
【发布时间】: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


    【解决方案1】:

    我建议首先检查某个电子邮件是否有效(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 列表可能是您的起点,理想情况下,您会监控哪些电子邮件被接受,哪些不接受,然后手动定期更新列表!

    老实说,我不知道这个列表是否有用。使用风险自负! .

    【讨论】:

    • 我使用joi npm 进行电子邮件验证和整个请求正文验证,但我的问题是(我无法指定 companyDomains 数组)。因为该应用程序将服务于全球而不是特定的公司域
    • 嗯,你需要检查这个世界上所有公司的电子邮件?? .请在下次写问题时澄清这一点..
    • 感谢您的帮助,有没有办法检查所有免费电子邮件提供商(gmail、雅虎...等)
    • 我找到了一个列表,并把它放在了答案中。
    【解决方案2】:

    我找到了两个 npm 包,您可以使用它们来实现:

    Free Email Domains by Kiko Beats

    包基于HubSpot-blocked domains

    Email Providers by derhuerst

    提供相同的解决方案,优点是可以选择使用列表中的所有 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
    

    【讨论】:

      猜你喜欢
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多