Few days back , questioned was thrown at me like - hey dude , have you ever tried extending ribbon in outlook? and my answer at that point was 'No'. then next question was - is it possible to have some buttons in the ribbon which will allow you to create new meeting request and mails with predefined data and recipients?
Question did sound interesting to me , and that immediately taken me in front of machine. I opened up VS 2010 to see what can be done.
It is easy to extend ribbon of Office applications using VS 2010 , as it gives you the project template.
I will not cover up how to create new ribbon and add buttons on it but here is what I learned on that evening - how to create new meeting request and new mails with predefined contents.
Just added two buttons on my custom ribbon , and added code behind of custom ribbon and buttons
Question did sound interesting to me , and that immediately taken me in front of machine. I opened up VS 2010 to see what can be done.
It is easy to extend ribbon of Office applications using VS 2010 , as it gives you the project template.
I will not cover up how to create new ribbon and add buttons on it but here is what I learned on that evening - how to create new meeting request and new mails with predefined contents.
Just added two buttons on my custom ribbon , and added code behind of custom ribbon and buttons
private Application
m_outlookApp;
private Explorer
m_outlookActiveWindow;
- To create new mail programmatically
try
{
m_outlookApp = Globals.ThisAddIn.Application;
m_outlookActiveWindow
= m_outlookApp.ActiveExplorer();
MailItem mailItem = m_outlookApp.CreateItem(OlItemType.olMailItem) as
MailItem;
if (mailItem != null)
{
mailItem.Body
= "Add Your Contents Here..";
mailItem.Subject
= "Add Appointment Subject Here..";
mailItem.To
= "target.user@smtp.com";
mailItem.Save();
mailItem.Display(true);
Marshal.ReleaseComObject(mailItem);
}
}
catch (System.Exception
ex)
{
System.Windows.Forms.MessageBox.Show("Error:
" + ex.Message);
}
- To create new meeting request programmatically
try
{
m_outlookApp
= Globals.ThisAddIn.Application;
m_outlookActiveWindow
= m_outlookApp.ActiveExplorer();
AppointmentItem appItem = m_outlookApp.CreateItem(OlItemType.olAppointmentItem) as AppointmentItem;
if (appItem != null)
{
appItem.Body
= "Add Your Contents Here..";
appItem.Subject
= "Add Appointment Subject Here..";
appItem.RequiredAttendees
= "target.user1@smtp.com;target.user2@smtp.com";
appItem.OptionalAttendees
= "optional.user1@smtp.com";
appItem.Start
= DateTime.Now.AddHours(1);
appItem.End
= DateTime.Now.AddHours(2);
appItem.Save();
appItem.Display(true);
Marshal.ReleaseComObject(appItem);
}
}
catch (System.Exception
ex)
{
System.Windows.Forms.MessageBox.Show("Error:
" + ex.Message);
}
References:
http://blogs.msdn.com/b/mcsuksoldev/archive/2010/10/01/building-and-deploying-an-outlook-2010-add-in-part-1-of-2.aspx
http://www.add-in-express.com/creating-addins-blog/2011/11/04/outlook-create-appointment-item/
http://msdn.microsoft.com/en-us/library/bb612741.aspx
Hi Bhushan,
ReplyDeleteExcellent one. I need your help,
I have the button in sharepoint webpart, If I click that button then one event will be created in Outlook 2010.
Can you please provide your inputs.
Thanks
Murali Arumugam
Hey glad that post helped you.
ReplyDeleteabout your scenario - you should be able to do something like this - create new appointment on click of a button in your web part which will ultimately create an calendar item in outlook.
you will need to add the reference of the Microsoft.Office.Interop.Outlook to your solution
Example
using Outlook = Microsoft.Office.Interop.Outlook;
protected void Button1_Click(object sender, EventArgs e)
{
Outlook.Application Outlookapplication = null;
try
{
Outlookapplication = GetOutlook();
if (Outlookapplication != null)
{
AppointmentItem appItem = Outlookapplication.CreateItem(OlItemType.olAppointmentItem) as AppointmentItem;
if (appItem != null)
{
appItem.Body = "Add Your Contents Here..";
appItem.Subject = "Add Appointment Subject Here..";
appItem.RequiredAttendees = "target.user1@smtp.com;target.user2@smtp.com";
appItem.OptionalAttendees = "optional.user1@smtp.com";
appItem.Start = DateTime.Now.AddHours(1);
appItem.End = DateTime.Now.AddHours(2);
appItem.Save();
appItem.Display(true);
Marshal.ReleaseComObject(appItem);
}
}
}
catch (System.Exception ex)
{
this.Controls.Add(new LiteralControl("Error: " + ex.Message));
}
}
public Outlook.Application GetOutlook()
{
Outlook.Application application = null;
// Check whether there is an Outlook process running.
if (System.Diagnostics.Process.GetProcessesByName("OUTLOOK").Length > 0)
{
// If so, use the GetActiveObject method to obtain the process and cast it to an Application object.
application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
}
else
{
// If not, create a new instance of Outlook and log on to the default profile.
application = new Outlook.Application();
Outlook.NameSpace nameSpace = application.GetNamespace("MAPI");
nameSpace.Logon("", "", Missing.Value, Missing.Value);
nameSpace = null;
}
return application;
}
Reference - http://msdn.microsoft.com/en-us/library/ff462097.aspx
Hope this helps you.
Hi Bhushan,
DeleteFirst I want to say sorry for my late reply.
I thanks allllllllllooooooooooottttttt for your great reply.
The above code worked like as a charm. You are saved my time dear. Thank you again.
Thanks
Murali Arumugam