2010-02-19 59 views
3

我正在爲我正在編寫的網站(asp.net/c#)編寫一個簡單的電子郵件管理器;該網站發送各種電子郵件,如帳戶創建,新聞,一些用戶操作等。因此,會有一些電子郵件模板帶有[$ FirstName]等佔位符,這些佔位符將被實際值取代。相當標準的東西。我只是想知道,如果有人可以建議現有的代碼 - 再次,我需要的東西很簡單,沒有很多花裏胡哨的,顯然與源代碼(和免費)電子郵件模板引擎

任何想法/意見將不勝感激!

感謝, 安德烈

+0

與RazorEngin,車把和SharpTal一些測試:http://stackoverflow.com/questions/340095/can-you-recommend-a-net -template-engine/33546901#33546901 – Nigrimmist 2015-11-05 14:22:03

回答

5

Stack Overflow上有幾個關於這個問題的線程,但是我最終通過各種建議來滾動我自己的解決方案。

我用這個FormatWith擴展方法來照顧簡單的模板,然後我做了一個基本的電子郵件基類來處理常見的任務,如拉入適當的模板並替換所有必需的信息,以及提供一個Send()方法。

我需要發送的所有電子郵件都有自己的從基礎派生的子類,並定義對它們唯一的東西,例如TemplateText,BindingData,Recipients和Subject。讓他們分別在自己的課堂中讓他們非常容易地獨立於應用程序的其他部分進行單元測試。

爲了讓您的應用程序可以使用這些電子郵件類而不必關心它正在使用哪個類,使用任何共享方法(我唯一關心的是Send())來實現接口也是一個好主意,所以那麼你的應用程序可以實例化它想要的任何電子郵件類,並以相同的方式使用它們。也許泛型也可以使用,但這是我想出來的。

IEmail email = new MyEmailClass(); 
email.Send(); 

編輯:這裏還有更多的建議:Can I set up HTML/Email Templates with ASP.NET?

0

如果你正在使用ASP.NET,你已經有一個模板引擎提供給您。只需創建一個ASP.NET頁面,它將爲您生成所需的結果(使用任何控件等),並將響應的ContentType設置爲適當的類型(文本或HTML,具體取決於電子郵件格式)

請確保該網址是而不是公開曝光。

然後,在您的代碼中,您將創建一個HttpWebRequest/HttpWebResponse或WebClient,然後獲取URL並獲取內容。 ASP.NET引擎將處理請求並返回格式化的結果,然後您可以通過電子郵件發送。

如果你想要簡單些,爲什麼不使用正則表達式和匹配?只要確保您的字段具有相當獨特的標識(前綴和後綴,您可以保證永遠不會使用該標識,或者至少可以爲其編寫轉義序列),並且您可以輕鬆使用Match方法執行更換。

正則表達式方法的唯一「陷阱」是如果你必須做嵌入式模板,那就需要多一點工作。

+3

這對我來說似乎是錯誤的工具,你會遇到很多問題,因爲Outlook不會呈現.NET框架認爲標準HTML的內容。而且你必須運行整個頁面循環來獲得更少的代碼。 – Hogan 2010-02-19 19:14:33

0

剛剛完成這項工作後,有一些很好的信息:Sending Email Both in HTML and Plain Text。最好的部分是,除了.NET之外,你不需要任何東西。

本質上,您使用要替換的標籤創建HTML頁面(AKA,格式化的電子郵件)(在此解決方案的情況下,標籤的格式爲:<%TAGNAME%>) 。然後,您可以利用上述網站上的信息創建一個郵件模板,其中標籤中填充了相應的數據,並且注入將會在您的HTML模板中完成。然後,您只需使用內置於.NET中的SMTP類併發送郵件。這非常簡單直接。

讓我知道你是否還有其他問題。希望有所幫助!

1

我總是這樣做。模板=帶有{#}佔位符的文本字符串。要使用模板我加載字符串(從任何商店),然後調用string.Format(template,param1,param2..)

簡單,效果很好。當你需要更強大的東西時,你可以轉向某種框架,但是string.format對我來說一直很好。

艾莉森的r鏈接將這種方法用3.5的匿名類型有很大的影響下一個步驟。如果你是3.5,我建議使用FormatWith(我會),否則這種方式運作良好。

+0

雖然這可能很簡單,但它不會分隔內容和演示文稿。而且,由於電子郵件正在被使用,爲什麼不使用.NET框架已經內置的內容呢? – JasCav 2010-02-19 18:35:01

+1

不確定你在說什麼... {0}是內容,模板是演示文稿。 – Hogan 2010-02-19 19:10:38