Visual Studio 2008's Outlook Add-in projects allows you to create add-ins that can customize almost any feature of Ms Outlook. Two useful events that can be captured are ReminderFire and NewMailEx. The first occurs before a reminder of a calendar item is executed. And the second occurs when a new email is received in the Inbox.
Following are the list of namespaces imported to reduce some typing.
using Outlook = Microsoft.Office.Interop.Outlook; using System.Windows.Forms; //for MessageBox object
The ThisAddIn_Startup event is created automatically with the project and is called before Outlook is launched. In this event the fields _Explorers, _Inspectors and outlookNamspace are initialized. _Explorers will contain the Outlook's Explorers collection, which are the the windows that display the contents of a folder, like the Inbox. The _Inspectors object will contain the Outlook Inspectors collection. An Inspector is a window that displays the contents of a single item like an email or a calendar appointment. And the outlookNamespace field will reference the Mail namespace.
private Outlook.Explorers _Explorers; // the Outlook Explorers collection
private Outlook.Inspectors _Inspectors; // the Outlook Inspectors collection
private Outlook.NameSpace outlookNamespace;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
_Explorers = this.Application.Explorers;
_Inspectors = this.Application.Inspectors;
_Explorers.Application.NewMailEx += new
Outlook.ApplicationEvents_11_NewMailExEventHandler(Application_NewMailEx);
_Explorers.Application.Reminders.ReminderFire += new
Outlook.ReminderCollectionEvents_ReminderFireEventHandler(Application_ReminderFire);
outlookNamespace = this.Application.GetNamespace("MAPI");
}
The ReminderFire event's only parameter is a Reminder object that can be used to get the details of the reminder, like OriginalReminderDate and NextReminderDate if it's recurring.
private void Application_ReminderFire(Outlook.Reminder reminder)
{
MessageBox.Show(reminder.Caption, "New Reminder", MessageBoxButtons.OK);
}
The NewMailEx event has one parameter too. It's a string containing the ID that can be used to retrieve the email. This could be done by passing the ID to the GetItemFromID method of the Application.Session object and getting a MailItem object. The MailItem object has all the email's details, some of the available properties are Attachments, Body, BodyFormat, CC and BCC.
private void Application_NewMailEx(string EntryID)
{
Outlook.MailItem newMail = (Outlook.MailItem)_Explorers.Application.Session.GetItemFromID(
EntryID, System.Reflection.Missing.Value);
if (newMail.Subject != null)
{
MessageBox.Show("From: " + newMail.SenderEmailAddress + "\nSubject: " +
newMail.Subject, "New Email", MessageBoxButtons.OK);
}
else
{
MessageBox.Show("You've got mail.");
}
}