1) La variabile $db dentro la funzione non è la stessa di quella fuori quindi ti risulta indefinita perché dentro la funzione non è stata inizializzata.
Se vuoi che funzioni, devi passare $db come parametro a nomeCron().
Per maggiori informazioni fa una ricerca sullo scope delle variabili.

2) Evidentemente la query fallisce e quindi $email non contiene il risultato della query, ma FALSE, da cui il messaggio ti dice che stai passando un booleano.
Stampa a video la query con un echo invece di eseguirla e vedi se la sintassi è corretta, se ancora non capisci il problema della query, copiala e usala direttamente sul db, per esempio usando phpMyAdmin, lì riceverai maggiori informazioni riguardo a cosa succede

3) secondo me isset() lo devi usare su $_POST['lista'] e non su $_SESSION['lista'], stai ricevendo dei dati da un form giusto? Quindi li trovi in $_POST non in $_SESSION