2010-12-08 30 views
1

是否可以使用JSP通過Spring 3.0的JavaMailSender機制發送電子郵件? JavaMailSender可能與這個問題很少有關係,但是這個想法是利用JSP的<fmt:message key="phrasetitle"/>國際化機制,它的變量/循環JSTL代碼,並且允許設計者輕鬆地遞給我完整的html電子郵件。使用JSP和Spring 3.0發送電子郵件

此外,我可以創建一個導入此JSP的網頁,以便我可以輕鬆地在每封電子郵件中提供鏈接,以便能夠在Web上查看該電子郵件,以防其客戶端無法正常查看該HTML。

UPDATE:下面的2個答案建議使用電子郵件,而不是JSP速度,因此它似乎這是明智的選擇。但是,只需要快速掃描一下stackoverflow即可發現FreeMarker可能更適合我的需求。特別是我希望能夠有一個JSP頁面來反映電子郵件中發送的內容。我必須將代碼從JSP轉換爲Velocity或FreeMarker,但FreeMarker給我的優勢是我可以重用很多JSP代碼,特別是taglib。這有意義嗎?

回答

3

JSP不是一種模板技術。例如對於Velocity是一個更好的選擇。

如果你真的堅持使用JSP,那麼你必須通過java.net.URL在本地執行它。

InputStream input = new URL("http://localhost:8080/context/mailtemplate.jsp").openStream(); 
+0

似乎如此低效的URL來調用,沒有任何方法可以在代碼中做到這一點,而不是通過http? – 2010-12-08 22:43:35

+1

是的,使用模板技術。 JSP不是。這是一個基於Web/HTTP的視圖技術。 – BalusC 2010-12-08 23:10:07

+0

更新了我的問題,使用FreeMarker是否有意義,這樣即使無法完成導入,我也可以重用很多JSP代碼? – 2010-12-09 17:37:07

0

有一些Spring documentation關於使用速度,這將做你想做的。我用它來處理Spring中的電子郵件,它的效果很好。

我通常會做的是有一個EmailService,我從一個負責發送電子郵件的工作的Controller調用。其中的方法接受一個命令對象,該命令對象在速度模板中訪問並呈現爲字符串(電子郵件正文)。然後您可以使用MailSender等來發送郵件。

0

雖然我同意,Velocity或者Freemarker的可能是一個更好的選擇,如果你真的需要渲染一個JSP並捕獲輸出作爲一個String(你可以傳遞給JavaMailer),看看我的教程Capturing JSP Output

它使用Spring 3,並且還允許使用fmt:message,fmt:formatNumber和spring:message。這個想法基本上是使用RequestDispatcher.include方法將頁面呈現爲MockHttpServletRequest。