Hvad er den rigtige fremgangsmåde her?
Den diskussion bliver næsten aldrig færdig, fordi der findes næsten lige så mange "rigtige" måder, som der findes design guides.
Det jeg vil råde dig til er at lave et repository (klasse), der sørger for at hente dine emails ud. Et repository er en klasse der sørger for håndtere data. Det kunne være gemme data, hente data opdatere og så fremdeles. Den findes typisk nederste lag i modellen (data laget).
Herfra kan der være flere måder at gøre det på. Nogen kan ikke lide at arbejde direkte videre på data objekter i deres model lag, fordi man ser dem som seperate ting. Modellen kan f.eks. lave nogle beregninger, og ofte så ses data objekter som objekter, der kun bruges til opbevaring af data. Så her vil nogen mappe deres data objekt over i en model objekt, og så arbejde videre herfra.
Når jeg ser det i forhold til din beskrivelse så vil jeg i mit EmailRepository lave en metode der hed GetAll()som så returnerede en liste af Email objekter.
Din bekymring angående at der mangler informationer er fint grundet, men jeg synes ikke du skal hænge dig alt for meget i den. Selvom du gør et stort arbejde at finde ud af hvad du skal bruge, så mangler du nok noget alligevel. Derfor er det bare vigtigt at du overvejer hvordan du leverer dine emails videre i programmet, for så er det ikke meget bøvlet at tilføje nye data-felter.