2015-10-31 52 views
1

在我的解決方案中,我有一個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更好的方法?我想強調一下,這個庫將用於多個相關的項目,所以理想情況下我想保留它所需的所有資源,而不是在某個文件服務器上掛出。

回答

1

原來答案是設置文件的生成操作與我的模板「嵌入的資源。」然後,我可以使用GetManifestResourceStream獲取文件的內容並按照我的意願去做。我也將HTML文件轉換爲TXT文件。雖然我仍然覺得可能有更好的方法來實現我的目標,但這是有效的。

0

我相信你想在本地計算機上查找文件。 你可以檢查here...

你可能想要使用AppDat文件夾來存儲你的AppData(推薦)。 看看下面的代碼片段:

Imports System.Environment 

Class Sample 
    Public Shared Sub Main() 
     ' Get the path to the Application Data folder 
     Dim appData As String = GetFolderPath(SpecialFolder.ApplicationData) 

     ' Display the path 
     Console.WriteLine("App Data Folder Path: " & appData) 
    End Sub 
End Class 
+0

因爲我的目的是爲了將這兩個不同的應用程序一起使用,所以將這些文件放在AppData中會損害目的。 – SCleveland

相關問題