Creare download link in ftp non ha senso, falli in http, così potrai gestire tutte le autorizzazioni con PHP:
crei un database e assegni a ogni directory un numero random (oppure fai un md5/sha1 di un testo random). Crei una pagina in PHP con un $_GET che prenda il numero o la stringa. In base a essa guardi se sul db c'è, se c'è fai una lista di file contenuti nella cartella, altrimenti restituisci un errore 404. Questo è il modo più semplice senza l'utilizzo delle sessioni, altrimenti devi creare una tabella utente, a ogni utente dai un id gruppo. Crei una tabella gruppo, con tutti i vari gruppi. Ogni gruppo avrà la possibilità di accedere a una o più directory, quando prendi l'id della directory (che in questo caso non serve che sia random) controlli se il gruppo a cui appartiene l'utente può accedere alla directory, se può allora gli fai il listing dei file, altrimenti no.
Per le email, anche in questo caso crei una tabella gruppo e una tabella email. A ogni email associ un gruppo, poi con la funzione mail di PHP mandi le email a ogni email del gruppo