如何在用户按下Outlook中的“发送”按钮时将电子邮件保存到文件夹而不是发送它

时间:2015-03-25 08:53:38

标签: vsto outlook-addin

我正在尝试使用VSTO编写Outlook插件(2007或更高版本)。当用户按下新电子邮件上的发送按钮时,而不是发送电子邮件我想将整个电子邮件保存到文件夹(插件在首次运行时创建)。
在某个事件发生后将来一段不确定的时间之后,我会以编程方式从我保存的文件夹中发送该电子邮件。
这甚至可行吗?首先,我可以将邮件保存到特殊文件夹而不是发送它。我知道我可以取消发送活动,但如何保存整个电子邮件

2 个答案:

答案 0 :(得分:0)

设置事件以捕获电子邮件的发送事件并取消电子邮件发送,然后执行必要的MailItem。

以下示例代码 -

public partial class ThisAddIn
{
    private Outlook.Inspectors _inspectors;
    public static Outlook.MailItem theCurrentMailItem;

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        _inspectors = Application.Inspectors;
        _inspectors.NewInspector += _inspectors_NewInspector;

        Application.ItemSend += Application_ItemSend;
    }

    void Application_ItemSend(object Item, ref bool Cancel)
    {
        object item = (Outlook.MailItem)Item;

        if(item != null)
        {
            //theCurrentMailItem.Move(..SomeFolder) // Move or save, saveas as needed
            Cancel = true;
        }
    }

    void _inspectors_NewInspector(Outlook.Inspector inspector)
    {
        if (inspector == null) throw new ArgumentNullException("inspector");

        theCurrentMailItem = null;

        object item = inspector.CurrentItem;
        if (item == null) return;

        if (!(item is Outlook.MailItem)) return;

        theCurrentMailItem = inspector.CurrentItem as Outlook.MailItem;
    }

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

答案 1 :(得分:0)

只要用户通过Inspector(在检查器关闭之前,但在用户单击“发送”按钮之后)或者在用户单击“发送”按钮之后发送Microsoft Outlook项目时,就会触发Application类的ItemSend事件。在程序中使用Outlook项目的发送方法,例如MailItem。传递的布尔参数允许取消进一步处理,因此您将能够做任何您需要的事情。

您也可以考虑重新调整功能区UI控件(“发送”按钮),有关详细信息,请参阅Temporarily Repurpose Commands on the Office Fluent Ribbon。在这种情况下,您将能够取消默认操作并执行自己的操作。此外,您可以区分是否要发送新的MailItem。请注意,ItemSend事件会针对所有传出的消息(回复,转发等)触发。

目前尚不清楚您在谈论的文件夹:它是磁盘上的文件夹还是Outlook中的文件夹?

要将Outlook项目放入文件夹,您可以使用Move方法。

要将项目保存到磁盘上的文件夹,您可以使用SaveAs方法将Microsoft Outlook项目保存到指定的路径并采用指定文件类型的格式。如果未指定文件类型,则使用MSG格式(.msg)。稍后您可以使用CreateItemFromTemplate方法根据保存的项目(.msg文件)重新构建MailItem。