PHP 如何验证一个邮箱有效是否真实有效? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chinassl
V2EX    PHP

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

  •  
  •   chinassl 2015-06-17 14:07:13 +08:00 7529 次点击
    这是一个创建于 3778 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是这样的,我们的程序提供了用户输入邮箱给用户发送邮件功能,好多用户邮箱乱写,写些根本不存在的邮箱,导致占用系统资源,还有有很多系统退信,能否有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-7 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     Solana     2886 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:55 PVG 21:55 LAX 06:55 JFK 09:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86