Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#VSTO Outlook发送邮件超链接_C#_Outlook_Vsto_Outlook Addin_Office Addins - Fatal编程技术网

C#VSTO Outlook发送邮件超链接

C#VSTO Outlook发送邮件超链接,c#,outlook,vsto,outlook-addin,office-addins,C#,Outlook,Vsto,Outlook Addin,Office Addins,我正在为Outlook 2010创建一个C#VSTO插件。我试图在正在处理的活动传出邮件的插入点生成超链接(超链接通过邮件窗口功能区上的按钮插入)。外接程序的所有其他功能(功能区按钮,访问ActiveInspector().CurrentItem等)工作正常。我正在使用此代码: object linktext = txtDisplayText.Text; object result = "MY URL"; object missObj = Type.Missing; Outlook.MailI

我正在为Outlook 2010创建一个C#VSTO插件。我试图在正在处理的活动传出邮件的插入点生成超链接(超链接通过邮件窗口功能区上的按钮插入)。外接程序的所有其他功能(功能区按钮,访问
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);
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);

运行此代码时,我收到消息“Command failed”(命令失败)。我怀疑我在Outlook如何使用Microsoft Word的Outlook消息编辑器方面,或者在我在
oRange
中指定选择对象的方式方面,遗漏了什么。非常感谢您的帮助。

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

此问题确实是由为超链接定义选择的方式引起的。Add命令。选择内容需要作为Microsoft Word选择内容键入,而不是对象类型(因为Outlook使用Word作为其编辑器):

因此,要在撰写期间在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;
object oRange = doc.Windows[1].Selection;
doc.Application.Selection.Hyperlinks.Add
    (oRange, ref result, ref missObj, ref missObj, ref linktext, ref missObj);
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使用Microsoft的Word编辑器,
doc.Hyperlinks.Add
的锚点使用了一个范围:
objSel.range

Eugene,因此
ItemSend
事件处理程序在用户发送消息后拦截消息。我正在使用我放置在消息功能区中的自定义功能区按钮,以便用户插入超链接,然后继续处理消息。
HTMLBody
属性将替换整个Outlook邮件,但我希望在邮件文本的插入点(键入时可以看到文本的位置)插入文本。我目前认为,我需要以某种方式更改范围,以停止
超链接。添加
以避免失败。您需要在现有HTML标记中插入超链接,然后将其设置回原位。
HTMLBody
属性不会替换整个Outlook邮件。你尝试了什么代码?尤金,
HTMLBody
不是答案。请参阅上面的代码。谢谢。
HTMLBody
是完成这项工作的另一种方法。Eugene,如果您想发布制作
HTMLBody
的代码,请在Outlook邮件的插入点添加超链接(并在创建超链接后将插入点返回到用户以前的可编辑点)我想我自己和其他人都会从中受益。嘿,乔,谢谢你发布你的答案。事实上,这对我帮助很大。但有一件小事。如果要在超链接中添加新行,您将如何操作?我在循环中调用您的代码以添加多个超链接,但将System.Environment.NewLine添加到我的linktext会导致在下一个链接之前的新行上显示一个有线图标。非常感谢@dbnex14我认为您希望将新行添加到包含链接的range对象。请尝试
objSel.Range.Text=@“\r\n”这里有其他信息:谢谢,但这只是添加字符串“\r\n”。我还尝试设置为“\n”或objSel.Range.Text=System.Environment.NewLine,但这也不会添加新行。非常感谢乔@dbnex14我误解了吗?您不想输出一个超链接,然后是一个换行符,然后是另一个链接,等等吗?我看到你在这里发布了这个问题:。如果我有时间,今晚我将玩代码,并在您发布此问题的地方继续此对话(如上链接)。@dbnex14我将我的答案发布在您的SO问题出现的地方。抱歉在我上面的评论中键入
@“\r\n”
。是一个打字错误,不应该有“@”符号(这使反斜杠成为一个文字字符串,而不是开始转义序列)。在任何情况下,完全忽略评论,因为我现在了解了发生的事情,并详细说明了我认为你的问题的正确答案。干杯