Here is my rant/ramble about fetching mail into MH/nmh follows. I'm not sure when I switched to nmh, so I'll just use MH.
When I first started using MH in 1985 or so, I was happy using slocal. I had looked at procmail and decided that it's syntax was too cryptic.
Then I started getting more and more mail, which sendmail would try to deliver concurrently, causing my unseen sequence to get messed up, among other things.
So, I looked at how I could implement something with inc to fetch and filter mail. But that did not seem to do what I wanted. I could have it put things in folders and then move them around, but I did not have much luck with that and the reason escapes me.
At some point I got fed up with all this. At that point TCL was the new shinny, so I wrote a bunch of code to grab mail via POP in TCL/Expect which filtered it into folders. I believe I was using APOP to Qpopper, which worked adequately. I might have had some C code do handle the low level I/O, it's been a while and I don't feel like searching a bunch of CM archives.
The heart of this was some TCL code that called functions to do filtering on the e-mail calling some functions to search the subject, body, to, from, cc, dest (to and cc), ... I used mhl to pull this information out of the message. I implemented this because I thought slocal's syntax was too primitive. My UI is the native programming language that I'm using. I'm a programmer, a programming language is my preferred UI.
Somewhat later, either APOP wasn't cutting it, or I had to switch to IMAP for work. So I split the backend out and implemented a front-end around fetchmail that called my backend. Now I am no longer dependent on a specific transport, I can use whatever fetchmail supports.
Somewhat later, in the last couple years, I realized how bad a choice TCL was and re-implemented everything in python. I'm much happier with the code. However, reading the recent e-mails I kick myself for not looking into sieve libraries. That is something I'll need to look into.
I do duplicate suppression via msgid in my scripts. With TCL I wrote libraries that created files with a munged MSGID. In python I use a DB database.
I have routines to call bogofilter for analysis of the messages and can take action based on the three possible outcomes (SPAM, NOT SPAM and UNSURE).
My lessons learned from all this is:
1) Inc is very restrictive in that it only supports mail drops and POP. That is a no-show for work where they use M$ products and disable POP.
2) Inc doesn't allow scripting to control what is fetched and where it is stored.
3) Fetching mail from the local maildrop or via local host delivery is much less prevalent that it was.
4) slocal is dated. Procmail doesn't have a UI.