było już na forum

w bazie w tabeli usera dodajesz pole o stanie aktywacji np. aktywowany.
To pole może przybierać wartość 0 albo 1 (domyślnie 0). wysyłasz maila z linkiem do aktywacji mailem i po wejściu w ten link zmieniasz wartość z 0 na 1 i user aktywowany.
Kwestie kluczy aktywujących możesz rozwiązać trzymając je np w innej tabeli gdzie będzie id, klucz, data wygenerowania klucza. Po zatwierdzeniu czyli sprawdzeniu czy klucz sie zgadza i zmianie wartości aktywowany usuwasz klucz, raz na jakiś czas czy nie ma przeterminowanych kluczy jeśli tak usuwasz je

edit:
@Kayne rzeczywiście bardzo pomocne...