When I retrieve messages with your IMAP component, it's automatically marks them as "Seen"/"Read" (var eml = imap.GetMessageByUID(uid);)
My Questions:
You can use Imap.Peek* methods, if you don't want your IMAP server to mark messages as seen.
var eml = imap.PeekMessageByUID(uid);