2011-10-16 60 views
6

我正在創建一個使用jsf和primefaces的web應用程序,我的問題是如何通過網站的聯繫表單發送電子郵件(我之前使用過php,很容易,但從未使用過JSF)。我已經在contact.xhtml頁面上創建了表單,以及用於支持這個表單的bean類,並且所有表單都應該將bean的數據發送到預定義的郵件(即.gmail)。我還發現了幾個關於如何使用JavaMail發送電子郵件的「教程」,但似乎沒有任何工作正常。表格本身由名稱,電子郵件和消息字段組成。使用bean從JSF頁面發送郵件

有人可以寫怎麼做,或給我一個鏈接。我會非常感激。

我是否需要我的網站在(在線)服務器上運行,或者我可以從本地主機進行測試。

預先感謝您。

+0

你有一個SMTP服務器或至少是主機名,端口號和您的SMTP服務器的登錄信息?你在使用什麼Java EE服務器? (Tomcat,Glassfish等)。這在PHP中很「容易」,因爲很多託管服務器已經爲此進行了預配置。你只需要調用'mail()'函數。或者你只需​​在某些ini文件中輸入SMTP主機配置。 Tomcat不支持這種預配置(它只支持JSP/Servlet輸出框,而不支持JavaMail,所以你必須自己編寫一大堆代碼),但Glassfish支持它(JavaMail是Java EE web profile的一部分)。 – BalusC

+0

請注意,這個問題通常與JSF無關。這與目標服務器及其配置有關。取決於你可以使用它的JavaMail JNDI資源,或者必須自己編寫大量的樣板代碼。 – BalusC

回答

6

在很短:

  • 做出<h:commandButton action="#{yourBean.send}"
  • 使與@ManagedBean("yourBean")註釋的託管bean具有send(..)方法
  • 得到commons-email並閱讀其短 「用戶指南」;得到一個工作的SMTP服務器(公共電子郵件依賴於JavaMail的,所以得到的是在類路徑中)的發送方法使用commons-電子郵件
  • 發送電子郵件

(你應該去通過JSF教程,瞭解如何收集表單參數)

請注意,java有點複雜。 「通過JSF發送郵件」不是一個特別好的問題。它包括兩個問題:

  • 如何有一個形式JSF提交(每教程解釋)
  • 如何發送電子郵件在Java中一般
2

這是所有關於如何捕獲JSF輸出。我的方法是通過JAX-RS調用JSF頁面,捕獲輸出並將其輸入到電子郵件中。儘量使頁面儘可能簡單(JSF喜歡添加大量JS代碼),並將絕對URL設置爲資源。 這裏是我的代碼(簡化):

@Resource(name = "mail/mySession") 
Session mailSession; 

//make request, capture output 
Client client = ClientBuilder.newClient(); 
String htmlBody = 
     client.target("http://localhost:8080/AppName/jsfpage.xhtml") 
     .queryParam("id", 10) //we can add some params 
     .request() 
     .get(String.class); 

//send email 
Message message = new MimeMessage(mailSession); 
message.setFrom(); 
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]")); 
message.setHeader("X-Mailer", "JavaMail"); 
message.setSubject("Subject here"); 
message.setContent(htmlBody, "text/html; charset=utf-8"); //set captured html as content 
message.setSentDate(new Date()); 
Transport.send(message);