V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chinassl
V2EX  ›  PHP

PHP 如何验证一个邮箱有效是否真实有效?

  •  
  •   chinassl · 2015-06-17 14:07:13 +08:00 · 7121 次点击
    这是一个创建于 3466 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是这样的,我们的程序提供了用户输入邮箱给用户发送邮件功能,好多用户邮箱乱写,写些根本不存在的邮箱,导致占用系统资源,还有有很多系统退信,能否有PHP程序在用户提交邮箱信息后进行验证,这个邮箱真实有效则发送邮件,否则跳过邮件发送?有没有办法做到呢?
    29 条回复    2016-06-12 09:10:01 +08:00
    lianyue
        1
    lianyue  
       2015-06-17 14:11:34 +08:00
    b821025551b
        2
    b821025551b  
       2015-06-17 14:11:58 +08:00   ❤️ 1
    不能完美解决。
    1、改为用邮箱注册,并验证邮箱;
    2、如果有系统退信,对这个邮箱的相应用户做一些操作。
    chinassl
        3
    chinassl  
    OP
       2015-06-17 14:13:35 +08:00
    @b821025551b 哦,由于系统没有强制用户注册后使用,看来真的没啥好办法!
    tabris17
        4
    tabris17  
       2015-06-17 14:16:27 +08:00
    光检查MX记录无法确认邮箱是真实有效的
    SMTP协议有个VRFY命令用来验证用户是否存在,不过很多SMTP服务器都把这个命令禁用了
    davidyin
        5
    davidyin  
       2015-06-17 15:14:07 +08:00
    强制新用户验证一次邮箱。
    旧用户的email地址导出,专门导入到邮件列表程序,验证。
    Andy1999
        6
    Andy1999  
       2015-06-17 15:52:36 +08:00 via iPhone
    filter_var
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // invalid emailaddress
    }

    checkdnsrr
    if (!checkdnsrr($domain, ‘MX’)) {
    // domain is not valid
    }
    b821025551b
        7
    b821025551b  
       2015-06-17 16:18:12 +08:00
    @Andy1999 MX只能检测输的那个域名是否存在,也是不能解决问题。
    chinassl
        8
    chinassl  
    OP
       2015-06-17 16:25:14 +08:00
    @davidyin 这个也不太现实,由于用户不是固定用户,基本全是新用户!
    111111111111
        9
    111111111111  
       2015-06-17 16:34:36 +08:00 via Android
    a. 检查MX 记录存在
    b. 测试MX服务器SMTP 正常访问
    c. SMTP协议 给用户发一封邮件 捕捉返回值

    以上操作可以让用户界面的js 做,也可以找第三方服务商做
    davidyin
        10
    davidyin  
       2015-06-17 16:35:07 +08:00
    @chinassl 还是改程序吧,只限验证过email地址的用户才能激活账号。
    fangjinmin
        11
    fangjinmin  
       2015-06-17 16:45:27 +08:00
    没有完美的用程序直接验证邮箱存不存在的方法。
    发认证码让用户认证是最好的解决办法。
    chinassl
        12
    chinassl  
    OP
       2015-06-17 16:47:15 +08:00
    @111111111111 你可以写这个程序吗?还有这样是否会除了给用户发送我们发送的邮件,还会多一个验证邮件呢?
    chinassl
        13
    chinassl  
    OP
       2015-06-17 16:48:18 +08:00
    @fangjinmin 好的!
    chinassl
        14
    chinassl  
    OP
       2015-06-17 16:48:38 +08:00
    @davidyin 好的!
    huage
        15
    huage  
       2015-06-17 16:53:08 +08:00
    1.只准使用某些后缀的邮箱,像如163、126等等;2.你参考一下这些邮箱允许用户的地址规则,然后做一个判断;3.注册时发邮件,确认验证。
    learnshare
        16
    learnshare  
       2015-06-17 17:01:52 +08:00
    让用户点击邮箱中收到的链接,通过这个唯一的链接来确认邮箱有效。嗯,跟 PHP 没关系
    s2555
        17
    s2555  
       2015-06-17 17:27:57 +08:00
    模拟注册这些邮箱,已经注册的肯定不能注册成功,那就说明是存在的
    lilydjwg
        18
    lilydjwg  
       2015-06-17 19:24:38 +08:00
    @s2555 这个难度是最高、问题也是最大的……

    @huage 不建议这样做,因为总会有你忘记和没有及时更新的邮箱后缀。

    Disqus 也是不验证的。它拿邮件来通知用户后续评论。你的用户为什么需要输入邮箱呢?为什么会有很多用户乱填呢?DIsqus 的情况,我能想到的唯一可能就是恶意攻击,可以根据访问者特征出验证码。
    chuangbo
        19
    chuangbo  
       2015-06-17 19:26:13 +08:00   ❤️ 1
    楼主是销售吗?如果不是技术背景并且确定你的技术水平比你们技术强,就不要在外面帮技术问问题,然后回去跟技术说找到了个技术方案看可不可行。这代表了你对同事的不信任。
    chinassl
        20
    chinassl  
    OP
       2015-06-17 19:37:59 +08:00
    @lilydjwg 是这样的,我们提供了一种免费的服务,需要生成用户所需的文件,有一点专业性质,好多用户不懂,总是忘记下载文件,所以我们启用了生成完毕自动发送附件给用户邮箱,然而有好多用户可能出于测试的目的随便填写下信息,随便填写不存在的邮箱,所以出现了上述问题!
    chinassl
        21
    chinassl  
    OP
       2015-06-17 19:38:36 +08:00
    @chuangbo 哥,你想太多了!
    Hello1995
        22
    Hello1995  
       2015-06-17 19:47:57 +08:00 via Android
    chinassl
        23
    chinassl  
    OP
       2015-06-17 19:50:22 +08:00
    @Hello1995 这个代码6楼显然已经发过,还是无法验证邮箱是否有效!
    lilydjwg
        24
    lilydjwg  
       2015-06-18 07:45:23 +08:00
    @chinassl 那应该量不太大吧,测试填错误的邮箱也得不到结果啊。难道说大中华无聊的人真那么多?

    网上能搜到验证服务的,比如 http://verify-email.org/ 。原理很简单,直接和邮件服务器进行会话,看对方是否说指定的信箱无效。当然有些邮件服务器会不肯说。
    chinassl
        25
    chinassl  
    OP
       2015-06-18 08:41:08 +08:00
    @lilydjwg 量确实不算很大,但总收到退信也是头痛的事,没错,确实无聊的人很多,填写无效的也就算了,还有人填写什么微软、百度的企业邮箱,都服了这些人了,好多时候都是一颗老鼠屎坏了一锅好粥!
    sixbyte
        26
    sixbyte  
       2015-06-18 09:27:28 +08:00
    我觉得还是得用户登录邮箱进行验证一次.
    因为他完全可以使用非自己的邮箱.
    chinassl
        27
    chinassl  
    OP
       2015-06-18 09:50:49 +08:00
    @sixbyte 因为大多数用户是使用自己的邮箱的,因为这个信息是只有用户收到才能用,但就是有极个别的用户随便乱写,如果加上验证太影响正常用户的的体验,比较繁琐了,看来还没有完美的解决方案!
    chinassl
        28
    chinassl  
    OP
       2015-06-18 09:59:13 +08:00
    看来这样解决,加个选项,默认不发送邮件,只有用户选中复选框后发送,只能先这样了!
    aec4d
        29
    aec4d  
       2016-06-12 09:10:01 +08:00
    &list=PLt0SDK0_hDSDkDFSXgcxCvtR3zc5fXkXJ&index=11
    http://verify-email.org/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:46 · PVG 02:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.