IMAP, POP3, NNTP and SMTP are implemented in C++. RSS is implemented in JS and doesn't follow the same pattern as the C++ protocols.
IMAP,POP3, and NNTP are "incoming" protocols, i.e., we retrieve messages from a server, and represent them as folders to the user. Those protocols all have the following, defined in the corresponding protocol subdirectory of mailnews (i.e., mailnews/imap, mailnews/local, mailnews/news):
An incoming server class, which implements nsIMsgIncomingServer and inherits from mailnews/base/util/nsMsgIncomingServer, i.e.., nsPop3IncomingServer, nsImapIncomingServer, nsNNTPIncomingServer.
A folder class, which implements nsIMsgFolder, and inherits from nsMsgDBFolder. Most commands/operations go through the folder object. nsImapMailFolder, nsNewsFolder, nsLocalMailFolder (for POP3)
A service class, which generally sits between the folder object or the server object, and the protocol object. The service class creates and initializes the url object for the operation, and hands that off to a protocol object to run. The service classes usually have their own interface, but they also implement nsIMsgMessageService.
A url object. These implement nsIMsgMailNewsUrl, inherit from nsMsgMailNewsUrl, and implement their own protocol-specific interface (nsIImapUrl, nsINNTPUrl, nsIPop3Url).