使用PHP验证电子邮件

时间:2011-04-07 03:03:50

标签: php mysql email-validation

如何验证访问者在我的网站上注册的时间,他/她使用的电子邮件是否有效。我想通过电子邮件向他们发送一个链接,他们可以点击这些链接来证明他们的会员资格,如何做到这一点?

5 个答案:

答案 0 :(得分:5)

在高层次上,您想要做的大致如下:

  • 当用户注册时,创建一个用户无法弄清楚自己的密码
    • 这可以像随机字符串一样随机分配
    • 这也可以是您可以以编程方式计算的(但用户不能),就像用户的电子邮件地址的MD5连接到一个秘密字符串;这样做可以节省数据库列,因为你不必存储它
  • 保存密码并以电子邮件中的链接形式发送给用户
  • 在该链接上设置一个侦听器,如果代码匹配,则“激活用户”

至于如何逐步执行此操作tutorials abound

答案 1 :(得分:2)

创建一个唯一的随机数,并将其与用户ID一起存储在一个表中。通过电子邮件向他们发送消息,其中包含指向接受随机数作为输入的页面的链接。如果他们有正确的随机数,请将其帐户标记为有效。

答案 2 :(得分:1)

如果您使用的是PHP 5.2或更高版本,则一个选项是filter_var函数...

if (filter_var('email@example.com', FILTER_VALIDATE_EMAIL) !== FALSE)

答案 3 :(得分:1)

采用以下方法。

用户注册。 数据库将更新其详细信息,并为活动/非活动添加标记。 电子邮件通过链接发送到注册的电子邮件地址 链接转到可以确认电子邮件地址有效的页面并更新数据库。

不知道你在做什么环境并做出一些假设,这大致就是你如何去做的。

我假设您已经持续进行用户注册? 您对以下内容将要生成某种类型的哈希,并将其与用户/成员详细信息一起插入...

$hash = substr(md5(uniqid()), 0, 5);

您是否有信心构建电子邮件视图并使用phpMailer或类似方式发送? 如果是这样的话,请使用一个链接,当它被击中时,将获取member_id和member_hash,以及类似下面的内容... 我在这里再次使用PDO,有很多方法可以做你想做的事情......无论什么对你最好。

// PDO Instance
$pdo = $this->actionServer->getDataSource('PDO');

$findMember = $pdo->prepare('SELECT * FROM member WHERE member.member_id = :memberId AND member.member_hash = :memberHash AND hidden = 1');
$findMember->bindParam(':memberId', $memberId);
$findMember->bindParam(':memberHash', $memberHash);
$findMember->execute();
$findMemberResult = $findMember->fetch(PDO::FETCH_ASSOC);

if (empty($findMemberResult)) {
    $this->log->error('Could not find member based on ID and Hash combination');
    throw new HTTPException(404);
}

/**
 * Could use a method like below to approve
 */

protected function approveMember($memberId, $pdo) {
    $sql = 'UPDATE member SET member.hidden = 0 WHERE member.member_id = :memberId';
    $updateMember = $pdo->prepare($sql);
    $updateMember->bindParam(':memberId', $memberId);
    $updateMember->execute();
}

希望这有帮助!

Cheerio

答案 4 :(得分:-2)

我在某个时间点做了类似的事情,但是我没有验证用户是否存在,我确实需要验证格式以及它是否是真实域名(scrub none@none.com) 。您可以查看我的功能并从那里开始。

//Verify formatting
function verify_email($email){

    if(!preg_match('/^[_A-z0-9-]+((\.|\+)[_A-z0-9-]+)*@[A-z0-9-]+(\.[A-z0-9-]+)*(\.[A-z]{2,4})$/',$email)){
        return false;
    } else {
        return $email;
    }
}

//Verify MX records exist
function verify_email_dns($email){

    // This will split the email into its front
    // and back (the domain) portions
    list($name, $domain) = split('@',$email);

    if(!(checkdnsrr($domain,'MX') || checkdnsrr($domain, 'A'))){

        // No MX record found
        return false;

    } else {

        // MX record found, return email
        return true;

    }
}

您也可以查看stack question