在我的解決方案中,我有一個VB類庫項目。這個類庫有一個包含多個html文件的文件夾,這些文件應該是電子郵件模板。此類庫旨在包含在網站和控制檯應用程序中以生成客戶電子郵件。在VB.Net中創建電子郵件生成類。獲取錯誤嘗試讀取HTML以生成正文文本
我想要做的是將這些html模板讀取到字符串中,並將模板中的關鍵字替換爲簡單數據結構中的數據。目前我正在使用一個字典,其中的關鍵字作爲關鍵字,值作爲字符串替換它。
我遇到的問題是VB似乎不想查找我的html文件。
下面是我的基地電子郵件類
Imports System.Net.Mail
Imports System.IO
Public MustInherit Class Email
Public Property TheMailMessage As MailMessage
Protected MustOverride Property SendFrom As MailAddress
Protected MessageTemplate As StreamReader
Protected DataModel As Dictionary(Of String, String)
Protected BodyContent As String
Protected Function GenerateMessageBody() As String
BodyContent = MessageTemplate.ReadToEnd
For Each d In DataModel
BodyContent.Replace(d.Key, d.Value)
Next
Return BodyContent
End Function
Protected MustOverride Sub PopulateMailMessage()
Protected MustOverride Sub CreateDataModel()
End Class
的代碼下面是對類繼承電子郵件正試圖在HTML文件中讀出一種用於生成郵件正文內容的孩子(我沒有代碼」牛逼包括調用之間,因爲它所做的一切是建立在從地址):
Imports System.IO
Imports System.Net.Mail
Namespace CustomerEmails
Public Class Welcome : Inherits NoReply
Sub New(ByVal Client As NinjaNexus.Model.Client)
MyBase.New(Client)
MessageTemplate = New StreamReader("Welcome.html")
CreateDataModel(Client)
PopulateMailMessage()
End Sub
Protected Overrides Sub CreateDataModel()
Throw New NotImplementedException
End Sub
Protected Overrides Sub PopulateMailMessage()
TheMailMessage.Subject = "Welcome to Company Name"
TheMailMessage.Body = GenerateMessageBody()
End Sub
Protected Overloads Sub CreateDataModel(ByVal Client As NinjaNexus.Model.Client)
DataModel = New Dictionary(Of String, String)
DataModel.Add("{FName}", Client.Name)
DataModel.Add("{Signature}", "Some name here")
End Sub
End Class
End Namespace
當我嘗試和運行代碼來生成歡迎電子郵件,我得到這樣的錯誤:
類型 'System.IO.FileNotFoundException' 發生在 mscorlib.dll中,但在用戶代碼中沒有處理的例外
其他信息:找不到文件「C:\ Program Files文件 (x86)的\ IIS快遞\ Welcome.html」。
我已經嘗試了一些像GetFullPath之類的東西,但沒有奏效。添加文件夾名稱或〜\或。\或任何此類性質都無濟於事。如果我使用完整的完整絕對路徑,它會讀取文件。但是,這個路徑在運行完成應用程序的機器上不會一樣,所以我真的需要一個相對的解決方案。
有誰知道如何讓StreamReader正確讀取我的HTML文件?有沒有比使用StreamReader更好的方法?我想強調一下,這個庫將用於多個相關的項目,所以理想情況下我想保留它所需的所有資源,而不是在某個文件服務器上掛出。
因爲我的目的是爲了將這兩個不同的應用程序一起使用,所以將這些文件放在AppData中會損害目的。 – SCleveland