如何驗證訪問者在我的網站上註冊時,他/她使用的電子郵件是否有效。我想通過電子郵件向他們發送一個鏈接,他們可以點擊來證明他們的會員資格,這怎麼辦?使用PHP驗證電子郵件
回答
在較高的水平,你想要做的是大致有以下幾種:
- 當用戶註冊,創建一個祕密代碼,用戶無法弄清楚自己
- 這可是隨機分配的,像一個隨機字符串
- 這也可以是你可以用程序計算(但用戶不能)像用戶電子郵件地址的MD5連接到一個祕密字符串;這樣做可以節省您的數據庫列,因爲你就不必存儲它
- 保存的密碼,並將其發送給用戶一個鏈接的形式在電子郵件
- 設置在收聽該鏈接,如果代碼匹配,「激活用戶」
至於如何做到這一步一步,tutorials abound。
如果你使用PHP 5.2或更高版本,一種選擇是filter_var功能...
if (filter_var('[email protected]', FILTER_VALIDATE_EMAIL) !== FALSE)
儘管關於FILTER_VAL – kylex 2011-04-07 03:07:10
的蹩腳部分,我不認爲他只是想驗證電子郵件的格式。他想驗證電子郵件是屬於用戶的真實電子郵件地址。所以,他想發送帶有用戶必須點擊的鏈接的確認電子郵件。如果用戶輸入一個虛假的電子郵件,他不能驗證他的帳戶並登錄。 – squawknull 2011-04-07 03:08:05
創建一個獨特的隨機數,並將其存儲在他們旁邊的用戶ID的表。向他們發送帶有指向接受隨機數的頁面鏈接的消息作爲輸入。如果他們有正確的隨機數字,那麼標記他們的帳戶活躍。
我在某個時間點做了類似的事情,但是我不必驗證用戶是否存在,我確實需要驗證格式以及它是否爲真實域(scrub [email protected] )。你可以看看我的功能,並從那裏開始。
//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
另外,none.com的傢伙將不高興,這是一個真正的域名(即使人們繼續使用它,就好像它不是)。你的意思是'example.com'? – Piskvor 2011-04-07 13:27:06
和我對@Sourav說的。至少你包括.info和.mobi,但是嘿,「.travel不存在(2001!),.museum不存在(2001!),.рф不存在(2010),la la la」 。 – Piskvor 2011-04-07 13:37:14
請**請**不要這樣做。這是一個可怕的想法。接受用戶輸入的任何電子郵件地址,只要它包含@和句點,並通過**向他們發送電子郵件**進行驗證。我對過分熱心/破壞的電子郵件地址驗證感到厭倦。 – meagar 2011-04-07 13:48:26
要去下列方法處理。
用戶註冊。 數據庫更新了其詳細信息並添加了一個用於激活/未激活的標誌。 電子郵件發送到帶鏈接的註冊電子郵件地址。 鏈接轉到可確認電子郵件地址有效的頁面並更新數據庫。
不知道你的工作環境和做出一些假設,這大致是你如何去做的。
我假設您已經堅持用戶註冊? 您提供以下將要產生某種形式的散列和與用戶/成員細節一起插入此...
$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
- 1. 使用filter_var驗證電子郵件PHP
- 2. 使用PHP的電子郵件驗證
- 3. 電子郵件驗證PHP
- 4. PHP - 電子郵件驗證
- 5. 電子郵件驗證php
- 6. PHP電子郵件驗證
- 7. PHP電子郵件驗證
- 8. Android電子郵件驗證與Firebase電子郵件驗證
- 9. PHP電子郵件驗證IBM電子郵件(全球範圍)
- 10. 通過電子郵件和PHP進行電子郵件驗證?
- 11. 電子郵件驗證使用JQuery(電子郵件匹配)
- 12. 消毒或驗證電子郵件PHP
- 13. 驗證電子郵件在PHP
- 14. 身份驗證電子郵件PHP(CodeIgniter)
- 15. 在php中的電子郵件驗證?
- 16. 在PHP 5.2中驗證電子郵件?
- 17. PHP erigi:貶值(電子郵件驗證)
- 18. PHP電子郵件表單驗證
- 19. AJAX實時電子郵件驗證(PHP)
- 20. 身份驗證電子郵件PHP
- 21. php中的電子郵件驗證
- 22. 驗證電子郵件格式PHP
- 23. 在PHP中驗證電子郵件?
- 24. PHP電子郵件驗證功能
- 25. PHP表單驗證和電子郵件
- 26. 如何使用電子郵件驗證
- 27. 使用AMAZON SES驗證電子郵件
- 28. 使用jQuery驗證電子郵件
- 29. 使用Java驗證電子郵件
- 30. Php電子郵件表單驗證,驗證不起作用
你想驗證電子郵件ID還是要檢查電子郵件ID是否存在? – Sourav 2011-04-07 03:04:38
這主要取決於你的託管解決方案什麼是最好的答案在這裏,但你可以先看看PHPMailer – therealsix 2011-04-07 03:07:09
可能重複的[簡單的方法爲PHP電子郵件驗證鏈接。](http://stackoverflow.com/questions/3794959/ – 2011-04-07 06:53:10