C# VSTO Outlook 外发邮件超链接

C# VSTO Outlook Outgoing Message Hyperlink

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

1
2
3
4
5
6
7
8
9
10
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);

当我运行此代码时,我收到消息"命令失败。" oRange 中的对象。非常感谢任何帮助。


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

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

因此,要在撰写过程中在 Outlook 邮件的插入点插入超链接,代码对 Word 和 Outlook 都有 using 语句:

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

然后这段代码:

1
2
3
4
5
6
7
8
9
10
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.Hyperlinks.Add。由于 Outlook 使用 Microsoft 的 Word 编辑器,doc.Hyperlinks.Add 的锚点使用了一个范围:objSel.Range.


使用 MailItem 类的 HTMLBody 属性来修改 ItemSend 事件处理程序中的消息正文(插入超链接)。您需要找到粘贴超链接 的位置,修改 HTML 格式正确的字符串并将其分配回来。