如何在 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
我正在创建一个简单的 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