0 votes
by (8.4k points)

I want to provide information about email structure to a user (such as subject, number of attachments, their names and lengths). How can I retrieve such information from an IMAP server without downloading whole message?

Applies to: Rebex Secure Mail

1 Answer

0 votes
by (8.4k points)
Best answer

To retrieve inforamtion about message structure, use the ImapListFields.MessageStructure parameter in the GetMessageInfo or GetMessageList methods of the Rebex IMAP/SSL component.

Following example prints requested information:


// connect and login
Imap imap = new Imap();


// retrieve information of emails envelope and structure
ImapMessageCollection col = 
    imap.GetMessageList(ImapListFields.Envelope | ImapListFields.MessageStructure);

// print the information
foreach (ImapMessageInfo item in col)
    Console.WriteLine("{0}: {1}", item.SequenceNumber, item.Subject);
    foreach (ImapMessagePart part in item.GetParts())
        if (part.Kind == ImapMessagePartKind.Attachment)
            Console.WriteLine("  {0} [{1} B]", part.FileName, part.Length);


''# connect and login
Dim imap = New Imap()


''# retrieve information of emails envelope and structure
Dim col = imap.GetMessageList(ImapListFields.Envelope Or ImapListFields.MessageStructure)

''# print the information
For Each item As ImapMessageInfo In col
    Console.WriteLine("{0}: {1}", item.SequenceNumber, item.Subject)
    For Each part In item.GetParts()
        If part.Kind = ImapMessagePartKind.Attachment Then
            Console.WriteLine("  {0} [{1} B]", part.FileName, part.Length)
        End If
    Next part
Next item

Please note the ImapListFields flags are combined together with the OR binary operator (not AND) as shown in the imap.GetMessageList method call.

by (18.0k points)

A special approach is needed when retrieving attachment names from e-mails which have been sent from Hotmail. See the following article for more information.