本章将教你如何使用struts2 的应用程序发送电子邮件。对于此练习中,需要下载并安装将mail.jar 从 javamail api1.4.4,并将 mail.jar文件放置在web-inflib文件夹,然后继续遵循的标准步骤创建动作,视图和配置文件。
下一步是创建一个action方法,发送电子邮件。让我们创建一个新类称为 emailer.java 以下内容。
package com.h3.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.h3.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。这会给出以下画面:
输入所需信息,并单击“send email ”按钮。如果一切顺利,那么应该看到以下页面: