Search code examples
c#emailoutlookvstopreview

Outlook Add In VSTO


I'm still quite in the field of programming. But now I have come across small problem. I'm currently working on an Outlook add-in that takes an email and packs it into a new mail as an attachment and automatically sends it to a specific address. That works well so far. However, it only works if I have opened the mail that I want to send as an attachment in a new window.

My goal, however, would be that it is already sufficient if the mail is open in the reading area. However, I have unfortunately not found a way to address this area. Maybe someone can give me a link or an example to address the mail, which is currently displayed in the preview with Visual Studio. As a language I use C #.

So far I reach the opened mail as follows:

String path = "C:\\Test\\Mail.msg";

Inspector inspector = Globals.ThisAddIn.Application.ActiveInspector();
MailItem mailitem = inspector.CurrentItem as MailItem

But how do I reach the mail that can be seen as a preview in the reading area?

Thank you very much for your help.


Solution

  • To get the currently selected item from the Explorer window in Outlook you need to use the following code:

            if (Application.ActiveExplorer().Selection.Count > 0)
            {
                Object selObject = this.Application.ActiveExplorer().Selection[1];
                if (selObject is Outlook.MailItem)
                {
                    Outlook.MailItem mailItem =
                        (selObject as Outlook.MailItem);
                    itemMessage = "The item is an e-mail message." +
                        " The subject is " + mailItem.Subject + ".";
                    mailItem.Display(false);
                }
                else if (selObject is Outlook.ContactItem)
                {
                    Outlook.ContactItem contactItem =
                        (selObject as Outlook.ContactItem);
                    itemMessage = "The item is a contact." +
                        " The full name is " + contactItem.Subject + ".";
                    contactItem.Display(false);
                }
                else if (selObject is Outlook.AppointmentItem)
                {
                    Outlook.AppointmentItem apptItem =
                        (selObject as Outlook.AppointmentItem);
                    itemMessage = "The item is an appointment." +
                        " The subject is " + apptItem.Subject + ".";
                }
                else if (selObject is Outlook.TaskItem)
                {
                    Outlook.TaskItem taskItem =
                        (selObject as Outlook.TaskItem);
                    itemMessage = "The item is a task. The body is "
                        + taskItem.Body + ".";
                }
                else if (selObject is Outlook.MeetingItem)
                {
                    Outlook.MeetingItem meetingItem =
                        (selObject as Outlook.MeetingItem);
                    itemMessage = "The item is a meeting item. " +
                         "The subject is " + meetingItem.Subject + ".";
                }
            }
    

    But if you need to get all selected items in the Explorer view you need to iterate over all items in the Selection object.