簡體   English   中英

VSTO outlook 加載項 - 檢索發件人姓名以進行回復

[英]VSTO outlook add-in - Retrieve sender's name for reply

我將通過如何使用功能區設計器創建您的第一個 outlook 插件的演練: https://docs.microsoft.com/en-us/visualstudio/vsto/walkthrough-creating-your-first-vsto-add-in -for-outlook?view=vs-2019

我的目標是制作在問候語中包含發件人姓名的回復模板。

通過研究這個問題,我相信我需要MailItem.SenderEmailAddressMailItem.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 資源管理器和彈出窗口都有效的代碼(它不是最好的,但它有效):

 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 文檔,兩者必須合並(例如,您可以將 HTML 文件插入到<body>的末尾mi.HTMLBody )。

與發件人相關的屬性存在於收到的項目上。 因此,您真正需要的是獲取要回復的源項目。 為避免不必要地搜索原始 email,您可以使用多種方法在 Outlook 中檢索所需信息:

  1. 您可以連接到 Outlook 項目的回復事件,因此當用戶選擇回復 email 時,您將獲得所有必需的信息並粘貼到消息正文中。 您可能會發現在每篇檢查器文章中實現檢查器包裝器並跟蹤項目級事件很有幫助。 響應 object 的一個實例作為參數傳遞,因此您可以使用從事件源中提取的與發送者相關的信息來修改消息正文。

  2. 如果該項目已保存並已發送/接收,則可以使用GetConversation方法獲取表示該項目所屬會話的Conversation object。 對話代表一個或多個文件夾和商店中的一個或多個項目。 如果將對話中的項目移動到“ Deleted Items ”文件夾並隨后使用GetChildrenGetRootItemsGetTable方法枚舉對話,則該項目將不會包含在返回的 object 中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM