如何在 Outlook 加载项的 VSTO 项目中动态获取 HTML 文件的路径

How to dynamically get path to HTML file in VSTO project for Outlook add-in

我正在创建一个简单的 Outlook 2016 加载项,允许用户基于 HTML 模板创建新邮件。

我创建了一个 Ribbon 并向其添加了一个按钮。这是点击事件处理程序代码:

 Private Sub btnCreateMail_Click(sender As Object, e As RibbonControlEventArgs) Handles btnCreateMail.Click

    Dim app As Application = Globals.ThisAddIn.Application
    Dim currentAccount As Account = app.Session.Accounts.Item(1)

    Dim mailItem = DirectCast(app.CreateItem(OlItemType.olMailItem), MailItem)
    mailItem.SendUsingAccount = currentAccount
    mailItem.To = currentAccount.DisplayName
    mailItem.BCC = IdentifyContacts()
    mailItem.BodyFormat = OlBodyFormat.olFormatHTML
    mailItem.Importance = OlImportance.olImportanceLow
    mailItem.HTMLBody = GetEmailBody()
    mailItem.Subject = "Subject"
    mailItem.Display(False)

End Sub

GetEmailBody()函数负责读取模板并根据需要修改占位符:

Private Function GetEmailBody() As String
    Dim strEmailBody As String
    Const strTemplatePath = "C:\Users\umute\template.htm"

    ' Read the template
    Using reader As New StreamReader(strTemplatePath)
        strEmailBody = reader.ReadToEnd
        strEmailBody = strEmailBody.Replace("{TodaysDate}", Date.Now.ToString("dddd dd MMM yyyy"))
        strEmailBody = strEmailBody.Replace("{Name}", GetCurrentUser())
        strEmailBody = strEmailBody.Replace("{Greeting}", DetermineGreeting())
        reader.Close()
    End Using

    Return strEmailBody
End Function

上面的代码完美运行,但是,我不确定如何动态获取模板文件的路径,即不输入包括 C:\Users\ 等在内的完整路径。这是因为我想将模板文件与加载项一起发送,以避免依赖用户将其保存在本地硬盘中。

我知道在 ASP.NET 中可以使用 Server.Mappath("~/file.html") 来完成此操作,但我不知道在为 Outlook 编写加载项时是否有类似的功能。

经过几个小时的尝试,我发现引用文件的正确方法是将其添加为 resource

我向项目添加了一个 Resource 类型的新项目,并向其中添加了 html 模板。然后,像这样访问文件:

     Dim strEmailBody As String = My.Resources.AllResources.Template