views:

388

answers:

2

I am programmer rookie, and I have to create outlook 2007 add-in. I should create a button on the ribbon or taskbar but on the window for the single mail from the inbox. You know, when you double click on mail in inbox, the new window appears. And in that window I need a button which opens a new form with some treeview. Main problem for me is how to create that button. This is all new for me so I'll be very thankful for the help.

A: 

If you open your window that shows the mail message at the top of the form you should have several buttons on the ribbon (save, undo, redo, etc). All the way to the right is a down triangle with a line over it, the tool tip says: Customize quick access toolbar. click that, then select "More commands". In that screen select the "Customize" tab. I think this is where you would add a button to bring up your form. I don't have any custom forms so I can't verify, hope this works.

Justin Holbrook
Ok, but I've made my form in VS2008 with some things and it should read body of the mail and attachments and store it somewhere on the server. Can I do it like you've said?? I found some piece of code on:http://blogs.devsource.com/msdev/content/visual_studio_2008/creating_add-ins_for_outlook_2007.htmlbut its creating things from the active explorer, not the mail window. Any help???
Mishko
+1  A: 

OK, I've done some research and this code below kinda works :) But I'll be very grateful if someone experienced could see this and tells me is it OK and what and how I could change it. This is just beginning of the bigger project.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
using System.Windows.Forms;

namespace OutlookAddInMishko
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {

            Inspectors = this.Application.Inspectors;
            Inspectors.NewInspector += new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector);
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code


        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion


          private Office.CommandBarButton buttonOne;

        private Outlook.Inspectors Inspectors;
        public static Microsoft.Office.Interop.Outlook.Inspector InsMail;

        void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector)
        {
            Outlook.MailItem tmpMailItem = (Outlook.MailItem)Inspector.CurrentItem;

            if (Inspector.CurrentItem is Outlook.MailItem)
            {
                tmpMailItem = (Outlook.MailItem)Inspector.CurrentItem;
                bool exists = false;
                foreach (Office.CommandBar cmd in Inspector.CommandBars)
                {
                    if (cmd.Name == "EAD")
                    {
                        //exists = true;
                        cmd.Delete();
                    }
                }

                Office.CommandBar newMenuBar = Inspector.CommandBars.Add("EAD", Office.MsoBarPosition.msoBarTop, false, true);
                buttonOne = (Office.CommandBarButton)newMenuBar.Controls.Add(Office.MsoControlType.msoControlButton, 1, missing, missing, true);

                if (!exists)
                {
                    buttonOne.Caption = "Scan this mail";
                    buttonOne.Style = Office.MsoButtonStyle.msoButtonCaption;
                    buttonOne.FaceId = 1983;

                    //Register send event handler
                    buttonOne.Click += new Office._CommandBarButtonEvents_ClickEventHandler(buttonOne_Click);
                    newMenuBar.Visible = true;
                }
            }


        }


        private void buttonOne_Click(Office.CommandBarButton ctrl, ref bool cancel)
        {
            ProcessMessages();
        }

        private Form1 form1 = null;

        private void ProcessMessages()
        {
            if (form1 == null)
            {
                form1 = new Form1(this.Application);
            }
            form1.ShowDialog();
        }


    }
}


namespace OutlookAddInMishko
{
    public partial class Form1 : Form
    {
        protected Outlook.Application App;
        public Form1()
        {
            InitializeComponent();
        }
        public Form1(Outlook.Application _app)
        {
            App = _app;
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            label1.Text = "Total number of mails in inbox: " + App.ActiveExplorer().CurrentFolder.Items.Count.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Outlook.MailItem item = (Outlook.MailItem)App.ActiveInspector().CurrentItem;
            textBox1.Text += "From:    " + item.SenderName + "\r\n\n";
            textBox1.Text += "Subject: " + item.Subject + "\r\n\n";
            textBox1.Text += "Body: \r\n\n" + item.Body + "\r\n";
            textBox1.Text += "Mail contains:    " + item.Attachments.Count + " attachment(s).\r\n\n";
        }
    }
}
Mishko