Micheal Choudhary
Micheal Choudhary

Reputation: 382

Prevent MailItem.Reply from opening Inspector window in Outlook 2016

I am building a addin for Outlookto add custom signature in outlook email, when the user click on "Reply" button. As soon as user click on reply button in explorer, a new inspector opens and i close the inspector with code (which s#cks). There may be a way to totally disable the reply inspector from opening.

    private Microsoft.Office.Tools.CustomTaskPane CustomTaskPane;
    UserDetail usr = null;
    Outlook.Explorer currentExplorer = null;
    Outlook.MailItem mailItem;
    private Inspector replyInspector;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        currentExplorer = this.Application.ActiveExplorer();
        currentExplorer.SelectionChange +=
                            new Outlook.ExplorerEvents_10_SelectionChangeEventHandler(CurrentExplorer_Event);
    }
    private void CurrentExplorer_Event()
    {
        if (this.Application.ActiveExplorer().Selection.Count == 1
        && this.Application.ActiveExplorer().Selection[1] is Outlook.MailItem)
        {
            if (mailItem != null)
            {
                // when the reply button is clicked
                ((Outlook.ItemEvents_10_Event)mailItem).Reply -= new Outlook.ItemEvents_10_ReplyEventHandler(MailItem_Reply);

                // When an item is selected
                Outlook.Selection mySelection = this.Application.ActiveExplorer().Selection;
                Outlook.MailItem mailitem = null;
                foreach (Object obj in mySelection)
                {
                    if (obj is Outlook.MailItem)
                    {
                        mailitem = (Outlook.MailItem)obj;
                        if (mailitem != null)
                        {
                            if (mailitem.Sent)
                            {

                            else
                            {
                                // Compose
                            }
                        }
                    }
                }
            }
            mailItem = this.Application.ActiveExplorer().Selection[1];
            ((Outlook.ItemEvents_10_Event)mailItem).Reply += new
             Outlook.ItemEvents_10_ReplyEventHandler(MailItem_Reply);
            // Close Inspector
            replyInspector.Close(OlInspectorClose.olDiscard);
        }
        else
        {
        }
    }

    void MailItem_Reply(Object response, ref bool cancel)
    {
        try
        {
            MailItem mitem = (Outlook.MailItem)response;
            replyInspector = (mitem).GetInspector;
            replyInspector.Activate();
            (mitem).HTMLBody = tempSignature + ((Outlook.MailItem)response).HTMLBody;
        }
        catch (System.Exception e)
        {
            MessageBox.Show(e.ToString());
        }
    }

Upvotes: 0

Views: 441

Answers (1)

Dmitry Streblechenko
Dmitry Streblechenko

Reputation: 66276

Firstly, why would you want to close the inspector if you are opening it anyway? Why not insert the signature when the inspector is opened?

Secondly, you cannot concatenate two HTML strings and expect the resulting string to be valid HTML, The two needs to be merged. Or, better yet, use Word Object Model (Word.Document is returned from Inspector.WordEditor) to insert any text anywhere in the message body.

Upvotes: 1

Related Questions