转载

Struts2 发送邮件Email

   

本章将教你如何使用Struts2 的应用程序发送电子邮件。对于此练习中,需要下载并安装将mail.jar 从 JavaMail API1.4.4,并将 mail.jar文件放置在WEB-INF/lib文件夹,然后继续遵循的标准步骤创建动作,视图和配置文件。

创建动作:

下一步是创建一个Action方法,发送电子邮件。让我们创建一个新类称为 Emailer.java 以下内容。

 package com.yiibai.struts2;  import java.util.Properties; import javax.mail.Message; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;  import com.opensymphony.xwork2.ActionSupport;  public class Emailer extends ActionSupport {     private String from;    private String password;    private String to;    private String subject;    private String body;     static Properties properties = new Properties();    static    {       properties.put("mail.smtp.host", "smtp.gmail.com");       properties.put("mail.smtp.socketFactory.port", "465");       properties.put("mail.smtp.socketFactory.class",                      "javax.net.ssl.SSLSocketFactory");       properties.put("mail.smtp.auth", "true");       properties.put("mail.smtp.port", "465");    }     public String execute()     {       String ret = SUCCESS;       try       {          Session session = Session.getDefaultInstance(properties,               new javax.mail.Authenticator() {             protected PasswordAuthentication              getPasswordAuthentication() {             return new              PasswordAuthentication(from, password);             }});           Message message = new MimeMessage(session);          message.setFrom(new InternetAddress(from));          message.setRecipients(Message.RecipientType.TO,              InternetAddress.parse(to));          message.setSubject(subject);          message.setText(body);          Transport.send(message);       }       catch(Exception e)       {          ret = ERROR;          e.printStackTrace();       }       return ret;    }     public String getFrom() {       return from;    }     public void setFrom(String from) {       this.from = from;    }     public String getPassword() {       return password;    }     public void setPassword(String password) {       this.password = password;    }     public String getTo() {       return to;    }     public void setTo(String to) {       this.to = to;    }     public String getSubject() {       return subject;    }     public void setSubject(String subject) {       this.subject = subject;    }     public String getBody() {       return body;    }     public void setBody(String body) {       this.body = body;    }     public static Properties getProperties() {       return properties;    }     public static void setProperties(Properties properties) {       Emailer.properties = properties;    } }

可以看到在上面的源代码中,Emailer.java有对应的形式在下面给出的email.jsp页的属性的属性。这些属性

  • from - 发件人的电子邮件地址。由于我们使用的是谷歌的SMTP,我们需要一个有效的gtalk ID

  • password - 上述帐户的密码

  • to - 给谁发送电子邮件?

  • Subject - 电子邮件主题

  • body - 实际的电子邮件消息

我们有没有考虑过上述各个属性的任何验证,验证将被添加在下一章。现在让我们看看在execute()方法。 execute()方法使用使用javax邮件库发送一封电子邮件,使用提供的参数。如果邮件被发送,动作返回 SUCCESS,否则它返回ERROR。

创建主页页:

让我们编写主页index.jsp的JSP文件,这将被用来收集电子邮件的相关信息,上面提到的:

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Email Form</title> </head> <body>    <em>The form below uses Google's SMTP server.     So you need to enter a gmail username and password    </em>    <form action="emailer" method="post">    <label for="from">From</label><br/>    <input type="text" name="from"/><br/>    <label for="password">Password</label><br/>    <input type="password" name="password"/><br/>    <label for="to">To</label><br/>    <input type="text" name="to"/><br/>    <label for="subject">Subject</label><br/>    <input type="text" name="subject"/><br/>    <label for="body">Body</label><br/>    <input type="text" name="body"/><br/>    <input type="submit" value="Send Email"/>    </form> </body> </html>

创建视图:

我们将使用JSP文件的success.jsp将被调用的情况下行动返回SUCCESS,但在发生ERROR 的情况下,我们将有另一种视图认为文件是从操作返回。

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Email Success</title> </head> <body>    Your email to <s:property value="to"/> was sent successfully. </body> </html>

下面将是在一个错误的情况下,从动作返回视图文件error.jsp。

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Email Error</title> </head> <body>    There is a problem sending your email to <s:property value="to"/>. </body> </html>

配置文件:

现在,让我们将这一切组合起来使用struts.xml的配置文件如下:

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts>     <constant name="struts.devMode" value="true" />    <package name="helloworld" extends="struts-default">        <action name="emailer"           class="com.yiibai.struts2.Emailer"          method="execute">          <result name="success">/success.jsp</result>          <result name="error">/error.jsp</result>       </action>     </package>  </struts>

以下是web.xml文件中的内容:

 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://java.sun.com/xml/ns/javaee"     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"    id="WebApp_ID" version="3.0">        <display-name>Struts 2</display-name>    <welcome-file-list>       <welcome-file>index.jsp</welcome-file>    </welcome-file-list>     <filter>       <filter-name>struts2</filter-name>       <filter-class>          org.apache.struts2.dispatcher.FilterDispatcher       </filter-class>    </filter>     <filter-mapping>       <filter-name>struts2</filter-name>       <url-pattern>/*</url-pattern>    </filter-mapping> </web-app>

现在,右键点击项目名称,并单击 Export > WAR File创建一个WAR文件。然后部署此WAR在Tomcat的webapps目录下。最后,启动Tomcat服务器和尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp。这会给出以下画面: 

Struts2 发送邮件Email

输入所需信息,并单击“Send Email ”按钮。如果一切顺利,那么应该看到以下页面:

Struts2 发送邮件Email
   
正文到此结束
Loading...