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

时间:2016-10-27 11:20:08

标签: vb.net vsto outlook-addin

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

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

 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编写加载项时我不知道这相当于此。

1 个答案:

答案 0 :(得分:0)

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

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

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