You could say that the class of the data (e.g. spam vs not spam) is a hidden quality that can be inferred through the observable features (e.g. message subject contains "bitcoin"),
$$P(C \; | \; F)$$
which says that the probability of the class $C$ is conditioned on the visibility of the feature $F$.
Using Bayes' theorem we can write
$$P(C \; | \; F) = \frac{P(F \; | \; C) \, P(C)}{P(F)}$$
Your problem is that you are not taking into account the evidence, $P(F)$, denominator in this expression.

You can have multiple features in your likelihood function
$$P(F \; | \; C) = P(F_1,F_2,F_3,\ldots \; | \; C)$$
and these can be independent
$$\prod_k P(F_k \; | \; C)$$
and then you have your prior
$$P(C) \prod_k P(F_k \; | \; C)$$
but what you are missing is the evidence factor in the denominator
$$P(C \; | \; F) = \frac{P(C) \prod_k P(F_k \; | \; C)}{\sum_C \scriptsize{P(C) \prod_k P(F_k \; | \; C)}}$$
This is the general view of the problem. Specifically, to fix your issue, evaluate the probabilities for all your classes, add them together, then divide each probability by that sum.
For instance, if you have two classes and the probabilities are $p_0$ and $p_1$, then write
$$P(C=0) = \frac{p_0}{p_0 + p_1}$$
and
$$P(C=1) = \frac{p_1}{p_0 + p_1}$$
which guarantees that
$$P(C=0) + P(C=1) = 1$$