However, is there a good
programmatic way to decide whether a given object is email or netnews?
No, I don't think so. You have to evaluate the object in the context
from which it was obtained. If it came from NNTP, it's netnews;
if it came from POP or IMAP or a mailbox, it's email.
(part of the problem is that there's no standard for email<>news
gateways, nor is there one for sending an email reply to a news article.
so there are too many things that send news-specific headers over email
to use those things as heuristics.)