這是所有關於如何捕獲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);
你有一個SMTP服務器或至少是主機名,端口號和您的SMTP服務器的登錄信息?你在使用什麼Java EE服務器? (Tomcat,Glassfish等)。這在PHP中很「容易」,因爲很多託管服務器已經爲此進行了預配置。你只需要調用'mail()'函數。或者你只需在某些ini文件中輸入SMTP主機配置。 Tomcat不支持這種預配置(它只支持JSP/Servlet輸出框,而不支持JavaMail,所以你必須自己編寫一大堆代碼),但Glassfish支持它(JavaMail是Java EE web profile的一部分)。 – BalusC
請注意,這個問題通常與JSF無關。這與目標服務器及其配置有關。取決於你可以使用它的JavaMail JNDI資源,或者必須自己編寫大量的樣板代碼。 – BalusC