【问题标题】:Send mail from JSF page using beans使用 bean 从 JSF 页面发送邮件
【发布时间】:2011-12-08 21:17:06
【问题描述】:

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

有人可以写下如何做到这一点,或者给我一个链接。不胜感激。

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

提前谢谢你。

【问题讨论】:

  • 您是否有 SMTP 服务器或至少有您的 SMTP 服务器的主机名、端口号和登录详细信息?您使用的是什么 Java EE 服务器? (Tomcat、Glassfish 等)。在 PHP 中这很“简单”,因为很多托管服务器已经为此进行了预配置。您只需调用mail() 函数。或者你只需​​要在一些 ini 文件中输入 SMTP 主机配置。 Tomcat 不支持这种预配置(它只支持 JSP/Servlet 输出框,不支持 JavaMail,因此您必须自己编写整堆代码),但 Glassfish 例如支持它(JavaMail 是 Java EE Web 配置文件的一部分)。
  • 请注意这个问题通常与 JSF 无关。这与目标服务器及其配置有关。根据这一点,您可以只使用它的 JavaMail JNDI 资源,或者必须自己编写大量样板代码。

标签: java email jsf primefaces


【解决方案1】:

简而言之:

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

(您应该通过 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("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);
    

    【讨论】:

      【解决方案3】:

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

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

      Sending mail from JSF - Seam mail

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 2013-04-01
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        相关资源
        最近更新 更多