Проверять корректность должен.
При этом он остается ответственным за одно действие — за установку именно email'a, а не произвольной строки.
Поэтому и генерировать исключение при неправильных данных тоже должен.
Метод же неспроста называется setEmail.
Вы же не удивляетесь, что при попытке присвоить строку в integer поле получаете ошибку (вероятно даже компиляции).
Здесь же происходит фактически тоже самое.
Если говорить про идейность, то еще лучше сделать тип Email и проверки делать в нем. Но в обычном, а не идеальном коде, это почти наверняка будет излишним. Поэтому проверка в setter'e — хороший компромисс.