Вы можете использовать гем mail для анализа любой строки в соответствии с RFC2822 следующим образом:
def valid_email( value )
begin
return false if value == ''
parsed = Mail::Address.new( value )
return parsed.address == value && parsed.local != parsed.address
rescue Mail::Field::ParseError
return false
end
end
Это проверяет, предоставлено ли письмо, т.е. возвращает false
для пустого адреса, а также проверяет, что адрес содержит домен.