You have two options: use MimeData.ContentType property -or- use MimeData.SafeFileName.
I would use the second option as some mail clients may attach word documents using generic 'application/octet-stream' content type, instead of 'application/msword' (doc) or 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' (docx).
Here's the approach with checking the extension:
using(Imap imap = new Imap())
{
imap.Connect("imap.example.com"); // or ConnectSSL for SSL
imap.UseBestLogin("user", "password");
imap.SelectInbox();
List<long> uids = imap.Search(Flag.Unseen);
foreach (long uid in uids)
{
var eml = imap.GetMessageByUID(uid);
IMail email = new MailBuilder().CreateFromEml(eml);
foreach (MimeData mime in email.Attachments)
{
string ext = Path.GetExtension(mime.SafeFileName)
.ToLowerInvariant();
if (ext == ".doc" || ext == ".docx")
{
byte[] data = mime.Data;
// here you can process ms-word data.
}
}
}
imap.Close();
}
Not sure what you mean exactly by the certain string in the attachment.
If the attachment is MSWord file you need to process it first by some component/library that knows how to open MSWord documents.
I'm not sure about your scenario, but you probably could use Imap.GetMessageInfoByUID to get all emails' details and fully download only those only those that have attachments matching your needs:
https://www.limilabs.com/blog/get-email-information-from-imap-fast