VSTO:使用超链接手动替换Outlook MailItem中的URL

时间:2014-03-21 18:47:40

标签: outlook vsto outlook-addin

我正在开发一个Outlook AddIn,它在发送邮件之前从MailItem中提取链接。 AddIn依赖于"自动套用格式键入"使用超链接替换Internet路径的功能。 Outlook似乎可以很好地自动将这些路径转换为超链接,只要它知道用户在"发送"之前已经完成了输入路径。按钮被按下。但是,如果用户刚刚键入了有效的URL然后点击发送,则Outlook不会用链接替换该URL,因为只有在确定用户输入完链接后才会进行替换。换句话说,如果用户输入的最后一件事是" stackoverflow.com",那么Outlook不会用链接替换它。另一方面,如果用户键入的最后一件事是" stackoverflow.com" (注意尾随空格),然后只要插入空格字符,Outlook就会自动用链接替换网址,因为这表示网址的结尾。

我使用Outlook.ApplicationEvents_11_ItemSendEventHandler在发送之前访问MailItem:

Application.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(Application_ItemSend);

Application_ItemSend()看起来像这样:

private void Application_ItemSend(object Item, ref bool Cancel)
{
    if (Item is Outlook.MailItem)
    {
        Outlook.MailItem MailItem = Item as Outlook.MailItem;

        string body = MailItem.HTMLBody;

        // Process links
        // How do I make sure all URLs have been converted to links at this point?
    }
}

在Application_ItemSend()中,我需要确保所有URL都已转换为链接。

如果我打开来自我的"已发送物品"发送后的文件夹然后我可以看到,在调用Application_ItemSend()和保存邮件之间的某个时刻,Outlook已将最后一个URL(" stackoverflow.com")转换为链接。我需要能够从Application_ItemSend()中强制进行转换,但是我无法弄清楚Outlook正在执行哪些代码来触发用链接替换URL。

我已尝试使用正则表达式查找网址然后替换它们,但这会变得混乱,我没有找到一个不会错过很多有效网址的正则表达式,以及非错误匹配有效的网址。除此之外,如果微软已经有代码执行此操作,谁想要重新发明轮子。

我尝试从Application_ItemSend()中执行MailItem.Save(),希望这是导致在Application_ItemSend()和"已发送项目"中保存的项目之间发生URL替换的原因。文件夹,但它没有。

我可以在Application_ItemSend()中执行哪些代码来强制将URL替换为链接?

0 个答案:

没有答案