c# VSTO Outlook外发消息超链接

本文关键字:消息 超链接 VSTO Outlook | 更新日期: 2023-09-27 18:06:57

我正在为Outlook 2010创建一个c# VSTO插件。我试图在正在处理的活动传出消息的插入点生成超链接(超链接通过消息窗口ribbon上的按钮插入)。插件的所有其他功能(功能区按钮,访问ActiveInspector().CurrentItem等)都可以正常工作。我正在使用这个代码:

object linktext = txtDisplayText.Text;
object result = "MY URL";
object missObj = Type.Missing;
Outlook.MailItem currentMessage = 
     Globals.ThisAddIn.Application.ActiveInspector().CurrentItem;
Word.Document doc = currentMessage.GetInspector.WordEditor;
object oRange = doc.Windows[1].Selection;
doc.Application.Selection.Hyperlinks.Add
    (oRange, ref result, ref missObj, ref missObj, ref linktext, ref missObj);

当我运行这段代码时,我得到消息"命令失败。"我怀疑我在Outlook如何使用Microsoft Word的Outlook消息编辑器或我在oRange中指定选择对象的方式方面错过了一些东西。

c# VSTO Outlook外发消息超链接

这个问题确实是由Hyperlinks.Add命令定义选择的方式引起的。而不是对象类型,选择需要键入为Microsoft Word选择(由于Outlook使用Word作为其编辑器):

Word.Selection objSel = doc.Windows[1].Selection;

因此,为了在合成期间在Outlook消息的插入点插入超链接,代码对Word和Outlook都使用了using语句:

using Outlook = Microsoft.Office.Interop.Outlook;
using Word = Microsoft.Office.Interop.Word;

然后这个代码:

object linktext = txtDisplayText.Text;
object result = "MY URL";
object missObj = Type.Missing;
Outlook.MailItem currentMessage = 
     Globals.ThisAddIn.Application.ActiveInspector().CurrentItem;
Word.Document doc = currentMessage.GetInspector.WordEditor;
Word.Selection objSel = doc.Windows[1].Selection;
doc.Hyperlinks.Add
     (objSel.Range, ref result, ref missObj, ref missObj, ref linktext, ref missObj);

还有两个值得注意的调整。因为使用了Word.Selection类型作为超链接的锚,所以需要将Hyperlinks.Add命令从doc.Application.Selection.Hyperlinks.Add更改为doc.Hyperlinks.Add。由于Outlook使用微软的Word编辑器,doc.Hyperlinks.Add的锚点使用了一个范围:objSel.Range .

使用MailItem类的HTMLBody属性来修改ItemSend事件处理程序中的消息主体(插入超链接)。您需要找到粘贴超链接<a href=.../>的位置,修改HTML格式良好的字符串并将其分配回去。