private void GetAttachmentsFromConversation(MailItem mailItem) { if (mailItem == null) { return; } if (mailItem.Attachments.CountNonEmbeddedAttachments() > 0) { return; } System.Collections.Generic.Stack <MailItem> st = new System.Collections.Generic.Stack <MailItem>(); // Determine the store of the mail item. Outlook.Folder folder = mailItem.Parent as Outlook.Folder; Outlook.Store store = folder.Store; if (store.IsConversationEnabled == true) { // Obtain a Conversation object. Outlook.Conversation conv = mailItem.GetConversation(); // Check for null Conversation. if (conv != null) { // Obtain Table that contains rows // for each item in the conversation. Outlook.Table table = conv.GetTable(); _logger.Debug("Conversation Items Count: " + table.GetRowCount().ToString()); _logger.Debug("Conversation Items from Root:"); // Obtain root items and enumerate the conversation. Outlook.SimpleItems simpleItems = conv.GetRootItems(); foreach (object item in simpleItems) { // In this example, enumerate only MailItem type. // Other types such as PostItem or MeetingItem // can appear in the conversation. if (item is Outlook.MailItem) { Outlook.MailItem mail = item as Outlook.MailItem; Outlook.Folder inFolder = mail.Parent as Outlook.Folder; string msg = mail.Subject + " in folder [" + inFolder.Name + "] EntryId [" + (mail.EntryID.ToString() ?? "NONE") + "]"; _logger.Debug(msg); _logger.Debug(mail.Sender); _logger.Debug(mail.ReceivedByEntryID); if (mail.EntryID != null && (mail.Sender != null || mail.ReceivedByEntryID != null)) { st.Push(mail); } } // Call EnumerateConversation // to access child nodes of root items. EnumerateConversation(st, item, conv); } } } while (st.Count > 0) { MailItem it = st.Pop(); if (it.Attachments.CountNonEmbeddedAttachments() > 0) { //_logger.Debug(it.Attachments.CountNonEmbeddedAttachments()); try { if (mailItem.IsMailItemSignedOrEncrypted()) { if (MessageBox.Show(null, "Es handelt sich um eine signierte Nachricht. Soll diese für die Anhänge ohne Zertifikat dupliziert werden?", "Nachricht duplizieren?", MessageBoxButtons.YesNo) == DialogResult.Yes) { mailItem.Close(OlInspectorClose.olDiscard); mailItem = mailItem.Copy(); mailItem.Unsign(); mailItem.Save(); mailItem.Close(OlInspectorClose.olDiscard); mailItem.Save(); } else { st.Clear(); break; } } mailItem.CopyAttachmentsFrom(it); mailItem.Save(); } catch (System.Exception ex) { //mailItem.Close(OlInspectorClose.olDiscard); MessageBox.Show(ex.Message); } st.Clear(); } } st.Clear(); Marshal.ReleaseComObject(mailItem); }