Syncing e-mails for multiple accounts
I feel like some of the code you haven't shown has a few leaky abstractions. For example:


using (var emailProvider = new ReceiveEmailProvider(emailAccount.Email,
            emailAccount.Password, emailAccount.Host, emailAccount.Port, emailAccount.Secure))



Every argument you send to RecieveEmailProvider comes from emailAccount. I would add an overload to it's constructor so that you could simply pass in an emailAccount. I think it greatly simplifies the code. 

using (var emailProvider = new RecieveEmailProvider(emailAccount))


There's something similar happening here. 


var dbEmail = AddNewEmail(email, emailAccount.Id, emailCounter);

// Add email to category
AddEmailToCategory(emailAccount.User.UserId,dbEmail);



Why does the client code go through all the trouble of spelling this out? AddEmailToCategory should know how to get the info it needs from an emailAccount so the dev doesn't have to.