2011-10-16 36 views
6

Tôi đang tạo một ứng dụng web bằng cách sử dụng jsf và các nguyên tố, và câu hỏi của tôi là cách gửi email qua biểu mẫu liên hệ của trang web (tôi đã thực hiện điều này bằng cách sử dụng php trước đây, rất dễ dàng, nhưng không bao giờ sử dụng jsf). Tôi đã tạo biểu mẫu trên trang contact.xhtml, cũng như lớp bean để hỗ trợ điều đó và tất cả biểu mẫu đó phải làm là gửi dữ liệu của bean tới một thư được xác định trước (ví dụ: gmail). Tôi cũng đã tìm thấy một số "hướng dẫn" về cách gửi email bằng cách sử dụng JavaMail, nhưng không có gì có vẻ hoạt động đúng. Bản thân biểu mẫu, bao gồm tên, email và các trường thông báo.Gửi thư từ trang JSF bằng cách sử dụng bean

Ai đó có thể viết cách thực hiện điều đó hoặc cho tôi liên kết. Tôi sẽ rất biết ơn.

Tôi có cần trang web của mình chạy trên máy chủ (trực tuyến) hay tôi có thể kiểm tra nó từ máy chủ cục bộ.

Cảm ơn bạn trước.

+0

Bạn có máy chủ SMTP hoặc ít nhất tên máy chủ, số cổng và chi tiết đăng nhập của máy chủ SMTP của bạn không? Bạn đang sử dụng máy chủ Java EE nào? (Tomcat, Glassfish, vv). Đó là "dễ dàng" trong PHP bởi vì rất nhiều máy chủ lưu trữ đã được cấu hình sẵn cho điều đó. Bạn chỉ cần gọi hàm 'mail()'. Hoặc bạn chỉ cần nhập cấu hình máy chủ SMTP trong một số tệp ini. Tomcat không hỗ trợ cấu hình sẵn này (nó chỉ hỗ trợ JSP/Servlet out box, không phải JavaMail, vì vậy bạn đã tự viết toàn bộ mã), nhưng Glassfish chẳng hạn hỗ trợ nó (JavaMail là một phần của cấu hình web Java EE)). – BalusC

+0

Xin lưu ý rằng vấn đề này không liên quan đến JSF nói chung. Điều này liên quan đến máy chủ đích và cấu hình của nó.Tùy thuộc vào đó bạn chỉ có thể sử dụng tài nguyên JavaMail JNDI của nó, hoặc phải tự viết nhiều mã bản mẫu. – BalusC

Trả lời

6

Trong rất ngắn:

  • làm cho một <h:commandButton action="#{yourBean.send}"
  • tạo một bean được quản lý chú thích với @ManagedBean("yourBean") rằng có một phương pháp send(..)
  • được commons-email và đọc ngắn "Hướng dẫn" của nó; có được một máy chủ smtp làm việc (commons-email phụ thuộc vào JavaMail, vì vậy nhận được rằng trên classpath cũng)
  • trong send phương pháp sử dụng commons-email để gửi email

(Bạn nên đi qua một JSF hướng dẫn để xem cách thu thập thông số biểu mẫu)

Lưu ý rằng java phức tạp hơn một chút. "Gửi thư qua JSF" không phải là một câu hỏi đặc biệt hay. Nó bao gồm hai câu hỏi:

  • làm thế nào để có một hình thức nộp cùng với JSF (mỗi hướng dẫn giải thích rằng)
  • làm thế nào để gửi email trong Java nói chung
1

On thực hành Seam Mail của tôi thực sự giúp trong việc gửi thư.

Ở đây bạn có thể tìm thấy một hướng dẫn tốt về nó:

Sending mail from JSF - Seam mail

2

Đó là tất cả về làm thế nào để nắm bắt đầu ra JSF. Cách tiếp cận của tôi là chỉ cần gọi trang JSF qua JAX-RS, bắt đầu chụp và đưa nó vào e-mail. Hãy cẩn thận để làm cho trang càng đơn giản càng tốt (JSF thích thêm nhiều mã JS) và đặt URL tuyệt đối thành tài nguyên. Đây là mã của tôi (đã được đơn giản hóa):

@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); 
Các vấn đề liên quan