使用bean从JSF页面发送邮件

时间:2011-10-16 20:42:23

标签: java email jsf primefaces

我正在使用jsf和primefaces创建一个Web应用程序,我的问题是如何通过网站的联系表单发送电子邮件(我以前使用php完成此操作,非常容易,但从不使用jsf)。我在contact.xhtml页面上创建了表单,以及支持该表单的bean类,所有表单都应该将bean的数据发送到预定义的邮件(即gmail)。我还发现了几个关于如何使用JavaMail发送电子邮件的“教程”,但似乎没有任何工作正常。表单本身由名称,电子邮件和消息字段组成。

有人可以写如何做到这一点,或给我一个链接。我会非常感激。

我是否需要在(在线)服务器上运行我的站点,或者我可以从localhost进行测试。

提前谢谢。

3 个答案:

答案 0 :(得分:6)

非常简短:

  • 制作<h:commandButton action="#{yourBean.send}"
  • 创建一个使用@ManagedBean("yourBean")方法
  • send(..)注释的托管bean
  • 获取commons-email并阅读其简短的“用户指南”;得到一个工作的smtp服务器(commons-email依赖于JavaMail,所以在类路径上也可以这样做)
  • 发送方法中的
  • 使用commons-email发送电子邮件

(您应该阅读JSF教程以了解如何收集表单参数)

请注意,java有点复杂。 “通过JSF发送邮件”并不是一个特别好的问题。它包含两个问题:

  • 如何使用JSF提交表单(每个教程都解释了这一点)
  • 如何用Java发送电子邮件

答案 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)

在我的练习中,SEAM Mail确实有助于发送邮件。

在这里你可以找到一个很好的教程:

Sending mail from JSF - Seam mail