C# VSTO outlook加载项-检索发件人';答复人姓名
我将介绍如何使用ribbon designer创建第一个outlook加载项的演练: 我的目标是制作在问候语中包含发件人姓名的回复模板 通过研究该问题,我认为我需要C# VSTO outlook加载项-检索发件人';答复人姓名,c#,outlook,vsto,C#,Outlook,Vsto,我将介绍如何使用ribbon designer创建第一个outlook加载项的演练: 我的目标是制作在问候语中包含发件人姓名的回复模板 通过研究该问题,我认为我需要MailItem.SenderEmailAddress或MailItem.Sender,但当我试图将其添加到MailItem.htmlbody时,它根本没有显示任何内容 这是我的测试代码 private void Teser_button2_Click(object sender, RibbonControlEventArgs e)
MailItem.SenderEmailAddress
或MailItem.Sender
,但当我试图将其添加到MailItem.htmlbody
时,它根本没有显示任何内容
这是我的测试代码
private void Teser_button2_Click(object sender, RibbonControlEventArgs e)
{
{
if (Globals.ThisAddIn.Application.ActiveExplorer() != null)
{
MailItem mi = Globals.ThisAddIn.Application.ActiveExplorer().ActiveInlineResponse;
if (mi != null)
{
mi.HTMLBody = mi.SenderEmailAddress + @"<BODY style=font-size:11pt;font-family:Calibri></BODY>Hello ENTERNAMEHERE,
<br><
<br>Here is a brief summary on everything worked on:
<br>
<br>Thank you for your time,
<br>
" + mi.HTMLBody;
mi.BodyFormat = Outlook.OlBodyFormat.olFormatHTML;
}
}
}
}
您正在访问回复上的发件人名称,而不是正在回复的邮件。该名称应来自
Globals.ThisAddIn.Application.ActiveExplorer().Selection
集合中的第一项
Outlook.Selection selection = Globals.ThisAddIn.Application.ActiveExplorer().Selection;
if (selection.Count > 0)
{
object item = selection[1];
if (item is Outlook.MailItem mailItem)
{
string senderName = mailItem.SenderName;
}
}
此外,您不能也不应该连接两个HTML字符串-结果将不是有效的HTML文档,必须将两者合并(例如,您可以在
mi.HTMLBody
中的
标记末尾插入HTML)。收到的项目上存在与发件人相关的属性。因此,您实际需要的是获取要回复的源项。为避免不必要地搜索原始电子邮件,您可以使用多种方法在Outlook中检索所需信息:
已删除项目
文件夹,然后使用GetChildren
、GetRootItems
或GetTable
方法枚举对话,则返回的对象中将不包括该项目
我尝试使用
testvare=Globals.ThisAddIn.Application.ActiveExplorer().sender代码>但我收到一个错误,错误是:type'不包含'name'的定义,并且找不到接受第一个'type'类型参数的可访问扩展方法'name'(是否缺少using指令或程序集引用?
我还尝试使用testvar=Globals.ThisAddIn.Application.ActiveExplorer.sender代码>但我收到另一个错误,即Application.ActiveExplorer是一个方法,在给定上下文中无效。
请参阅上面的更新答案,这确实有效-但我应该更详细。你看,我只给出了函数的一半,因为我认为它没有那么重要。你看,我实际上同时使用了ActiveExplorer()
和ActiveInspector()
,这样我就可以从outlookexplorer或弹出窗口中进行回复。您的代码可以工作,但只能与outlook explorer配合使用,因为这是我唯一要求的。哈哈哈,我试着看看ActiveInspector()。选择是否是一件事,但它似乎不是。我会把你的答案记为正确的,看看我能不能从中吸取教训。谢谢如果你在inspector中有一个新项目,事情就更复杂了——你不知道你正在处理的回复(在ActiveInspector.CurrentItem
)来自哪里。它可以是显示原始项目的另一个检查器,也可以来自Explore
r中选择的项目。要处理这两个事件,您需要捕获Explorer.SelectionChange
和Inspector.NewInspector
事件,并在原始项目上设置Reply/ReplyAll/Forward
事件处理程序。当事件激发时,您将同时拥有旧项和新项(作为参数传递)。
Outlook.Selection selection = Globals.ThisAddIn.Application.ActiveExplorer().Selection;
if (selection.Count > 0)
{
object item = selection[1];
if (item is Outlook.MailItem mailItem)
{
string senderName = mailItem.SenderName;
}
}