c# - VSTO Outlook 加载项 - 检索发件人姓名以进行回复
问题描述
我正在通过如何使用功能区设计器创建您的第一个 Outlook 插件的演练:https ://docs.microsoft.com/en-us/visualstudio/vsto/walkthrough-creating-your-first-vsto-add-in -for-outlook?view=vs-2019
我的目标是制作在问候语中包含发件人姓名的回复模板。
通过研究这个问题,我相信我需要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;
}
}
}
}
我试图改变mi.SenderEmailAddress
,mi.Sender
但我仍然一无所获。
任何想法表示赞赏!
更新
这是适用于我的 Outlook Explorer 和弹出窗口的代码(它不是最好的,但它有效):
private void Domain_setup_Click_1(object sender, RibbonControlEventArgs e)
{
if (Globals.ThisAddIn.Application.ActiveExplorer() != null)
{
MailItem mi = Globals.ThisAddIn.Application.ActiveExplorer().ActiveInlineResponse;
Outlook.Selection selection = Globals.ThisAddIn.Application.ActiveExplorer().Selection;
object item = selection[1];
if (mi != null && item is Outlook.MailItem mailItem)
{
string senderName = mailItem.SenderName;
mi.HTMLBody = @"<BODY style=font-size:11pt;font-family:Calibri></BODY>Hello " + senderName + @",
<br>
<br>Here is the information for the new domain/user account:
<br>
<br>Computer username: ENTERDOMAINORUSERNAMEHERE
<br>Computer password: ENTERPASSWORD
<br>
<br>Thank you for your time,
<br>
" + mi.HTMLBody;
}
}
if (Globals.ThisAddIn.Application.ActiveInspector() != null)
{
MailItem mi = Globals.ThisAddIn.Application.ActiveInspector().CurrentItem;
Outlook.Selection selection = Globals.ThisAddIn.Application.ActiveExplorer().Selection;
object item = selection[1];
if (mi != null && item is Outlook.MailItem mailItem)
{
string senderName = mailItem.SenderName;
mi.HTMLBody = @"<BODY style=font-size:11pt;font-family:Calibri></BODY>Hello " + senderName + @",
<br>
<br>Here is the information for the new domain/user account:
<br>
<br>Computer username: ENTERDOMAINORUSERNAMEHERE
<br>Computer password: ENTERPASSWORD
<br>
<br>Thank you for your time,
<br>
" + mi.HTMLBody;
}
}
}
解决方案
您正在访问回复中的发件人姓名,而不是正在回复的邮件。名称应来自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 文档,这两个必须合并(例如,您可以在<body>
标签末尾插入 HTML mi.HTMLBody
)。
推荐阅读
- django - { % extends parent _ template|default:"base.html" % } vs {% extends "base.html" %} 在 Django 中?
- c# - Excel 无法打开文件,因为文件格式或文件扩展名无效。确认文件没有损坏
- android - 更新 RecyclerView 中的记录后实时数据不更新
- python - 如何交换从列表 .txt 文件中读取的数字?错误“列表索引超出范围”
- java - 如何在 Java 运行时动态设置数组名称?
- javascript - 我应该将物化下拉菜单初始化程序放在 Vue js 中的哪个生命周期方法中?
- autohotkey - 如何在 AutoHotKey 中从 DDL 制作菜单下拉菜单
- swift - “VisionFace”类型的值没有成员“轮廓”快速错误
- android - 如何使用改造后参数&body,但我不能一起使用@Filed(FormUrlEncoded)&@Body。我能做些什么?
- math - 这个加法总是会产生一个唯一的数字吗?