我正在使用jsf和primefaces创建一个Web应用程序,我的问题是如何通过网站的联系表单发送电子邮件(我以前使用php完成此操作,非常容易,但从不使用jsf)。我在contact.xhtml页面上创建了表单,以及支持该表单的bean类,所有表单都应该将bean的数据发送到预定义的邮件(即gmail)。我还发现了几个关于如何使用JavaMail发送电子邮件的“教程”,但似乎没有任何工作正常。表单本身由名称,电子邮件和消息字段组成。
有人可以写如何做到这一点,或给我一个链接。我会非常感激。
我是否需要在(在线)服务器上运行我的站点,或者我可以从localhost进行测试。
提前谢谢。
答案 0 :(得分:6)
非常简短:
<h:commandButton action="#{yourBean.send}"
@ManagedBean("yourBean")
方法send(..)
注释的托管bean
(您应该阅读JSF教程以了解如何收集表单参数)
请注意,java有点复杂。 “通过JSF发送邮件”并不是一个特别好的问题。它包含两个问题:
答案 1 :(得分: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("asd@asd.pl"));
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);
答案 2 :(得分:1)