首页 > 解决方案 > 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.SenderEmailAddressmi.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;
                }
            }
        }

标签: c#outlookvsto

解决方案


您正在访问回复中的发件人姓名,而不是正在回复的邮件。名称应来自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)。


推荐阅读