使用PHP验证电子邮件
当访问者在我的网站上注册时,我如何验证他/她使用的电子邮件是否有效。我想通过电子邮件向他们发送一个链接,他们可以点击该链接来证明自己的会员资格,如何做到这一点?如果您使用的是PHP5.2或更高版本,一个选项是filter\u var函数使用PHP验证电子邮件,php,mysql,email-validation,Php,Mysql,Email Validation,当访问者在我的网站上注册时,我如何验证他/她使用的电子邮件是否有效。我想通过电子邮件向他们发送一个链接,他们可以点击该链接来证明自己的会员资格,如何做到这一点?如果您使用的是PHP5.2或更高版本,一个选项是filter\u var函数 if (filter_var('email@example.com', FILTER_VALIDATE_EMAIL) !== FALSE) 创建一个唯一的随机数,并将其存储在用户ID旁边的表格中。通过电子邮件向他们发送一条消息,其中包含一个链接,指向一个接受随
if (filter_var('email@example.com', FILTER_VALIDATE_EMAIL) !== FALSE)
创建一个唯一的随机数,并将其存储在用户ID旁边的表格中。通过电子邮件向他们发送一条消息,其中包含一个链接,指向一个接受随机数作为输入的页面。如果他们有正确的随机数,则将其帐户标记为活动。在较高级别上,您要做的大致如下:
- 当用户注册时,创建一个用户自己无法识别的密码
- 这可以是像随机字符串一样随机分配的内容
- 这也可以是您可以编程计算的东西(但用户不能),比如将用户电子邮件地址的MD5连接到一个秘密字符串;这样做可以为您节省一个数据库列,因为您不必存储它
- 保存密码并以电子邮件链接的形式发送给用户
- 在该链接上设置侦听器,如果代码匹配,“激活用户”
至于如何一步一步地做这件事,.我曾经做过类似的事情,但是我不需要验证用户是否存在,我需要验证格式以及它是否是一个真正的域(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;
}
}
您也可以使用以下方法检查此项 用户注册。 数据库将使用其详细信息进行更新,并为活动/非活动添加一个标志。 电子邮件通过链接发送到注册的电子邮件地址。 链接转到可以确认电子邮件地址有效并更新数据库的页面 不知道你在什么样的环境中工作,也不知道你在做一些假设,这大概就是你的工作方式 我假设您已经在坚持用户注册? 对于以下内容,您需要生成某种哈希,并将其与用户/成员详细信息一起插入
$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您想验证电子邮件id,还是想同时检查电子邮件id是否存在?这主要取决于您的托管解决方案这里的最佳答案是什么,但您可以从查看phpMail可能的副本开始,尽管关于FILTER_VALI的蹩脚部分并不认为他只想验证电子邮件的格式。他希望验证电子邮件是否是属于用户的真实电子邮件地址。因此,他想发送一封确认电子邮件,其中包含用户必须点击的链接。如果用户输入了一封伪造的电子邮件,他就无法验证他的帐户并登录。此外,none.com上的人也会不高兴,这是一个真实的域名(尽管人们一直在使用它,好像它不是)。你是说
example.com
?还有我对@Sourav说的话。至少你包括了.info和.mobi,但嘿,“.travel不存在(2001!),.museum不存在(2001!),.ф不存在(2010),拉拉”,请不要这样做。这是个糟糕的主意。接受用户输入的任何电子邮件地址,只要它包含@和句点,并通过向他们发送电子邮件进行验证。我对过于热心/不可靠的电子邮件地址验证感到厌烦。@如果这个解决方案在我的应用程序中对我有效,我建议从验证域开始。我还提供了一个类似SO问题的链接。