1.
GetMessageInfoByUID downloads BodyStructure (MessageInfo.BodyStructure property) so you don't need to invoke GetBodyStructureByUID separately.
2.
When using GetMessageInfoByUID use overload that takes list of uids as a parameter (Imap.GetMessageInfoByUID(List uids)) as a parameter. It's certainly faster than looping over a uid list.
3.
Even I don't need whole body. I need only first 200 characters from the body.
This doesn't make much of difference in terms of speed.
4.
Use GetTextByUID to download text data:
string text = imap.GetTextByUID(info.BodyStructure.Text);
There is also a GetTextByUID bulk overload, that takes list of structures as a parameter: Imap.GetTextByUID(List structures). It fills every structure's Text and Data properties.