Sending e-mail with Spring MVC--转载

原文地址:http://www.codejava.net/frameworks/spring/sending-e-mail-with-spring-mvc

Table of contents:

1.Spring framework’s support for e-mail

2.Required jar files

3.Creating e-mail sending form

4.Configuring SMTP server settings and Spring MVC

5.Creating Spring MVC controller class

6.Creating result page and error page

7.Run the application

8.Download Eclipse project/WAR file

This tutorial provides a sample spring MVC application that allows user sending an e-mail message by filling a web form. The e-mail form looks like following screenshot:

In this tutorial, you are supposed to familiar with Java EE development as well as developing Spring MVC-based applications.

1. Spring framework’s support for e-mail

Based on JavaMail, Spring framework provides high-level abstraction API which greatly simplifies e-mail sending process. Let’s take a brief look at this API in the following class diagram:

To send e-mail messages, we can use an implementation of interface MailSender – the JavaMailSenderImpl class which is built upon on JavaMail. It’s convenient to configure this implementation as a bean in Spring’s context:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

    <!-- SMTP settings -->

    <property name="host" value="SMTP_HOST" />

    <property name="port" value="SMTP_PORT" />

    <property name="username" value="USER_NAME" />

    <property name="password" value="PASSWORD" />

    <property name="javaMailProperties">

        <!-- additional properties specific to JavaMail -->

        <props>

            <prop key="mail.transport.protocol">smtp</prop>

            <prop key="mail.smtp.auth">true</prop>

            <prop key="mail.smtp.starttls.enable">true</prop>

        </props>

    </property>

</bean>

This bean holds properties for SMTP and JavaMail and can be injected to a business/service class which needs to send an e-mail, for example:


1

mailSender.send(email);

In which email is an object of a type that implements MailMessage interface, such as SimpleMailMessage class. We can construct the email object as follows:


1

2

3

4

SimpleMailMessage email = new SimpleMailMessage();

email.setTo(toAddress);

email.setSubject(subject);

email.setText(body);

That’s for a simple mail message (plain text). In case if we want to send HTML e-mail or attach files to the e-mail, we can use MimeMailMessage class with the help of MimeMessagePreparator class and MimeMessageHelper class. For example, sending an e-mail in HTML format with an attachment:


1

2

3

4

5

6

7

8

9

10

mailSender.send(new MimeMessagePreparator() {

  public void prepare(MimeMessage mimeMessage) throws MessagingException {

    MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true"UTF-8");

    message.setFrom(fromEmail);

    message.setTo(toEmail);

    message.setSubject("A file for you");

    message.setText("<b>See the attached</b>"true);

    message.addAttachment("CoolStuff.doc"new File("CoolStuff.doc"));

  }

});

The following table summarizes the interfaces and classes provided in org.springframework.mail package:


org.springframework.mail


MailSender


MailMessage


JavaMailSender


SimpleMailMessage


JavaMailSenderImpl


MimeMailMessage


MimeMessagePreparator


MimeMessageHelper

Click on a link in the table to see API documentation for the corresponding interface/class.

2. Required jar files

The application requires the following jar files copied to its WEB-INF\lib directory:


Required jar files


JavaMail


mail.jar


Spring framework


spring-beans-3.2.0.RELEASE.jar

spring-context-3.2.0.RELEASE.jar

spring-context-support-3.2.0.RELEASE.jar

spring-core-3.2.0.RELEASE.jar

spring-expression-3.2.0.RELEASE.jar

spring-web-3.2.0.RELEASE.jar

spring-webmvc-3.2.0.RELEASE.jar


Apache Commons Logging


commons-logging-1.1.1.jar

NOTE: Click on a hyperlink in the table above to download the corresponding software.

The sample application we are going to build contains the following key files:

    • EmailForm.jsp: displays an e-mail form.
    • Result.jsp: shows successful message after the e-mail has been sent.
    • Error.jsp: shows error message in case of an exception is thrown.
    • SendEmailController.java: the Spring controller class that takes input from e-mail form, calls Spring’s mailSender to send the e-mail, and redirects user to either successful page or error page.
    • spring-mvc.xml: Spring’s context configuration file. Here we will configure SMTP server settings and various properties for JavaMail.
    • web.xml: web deployment descriptor file.

3. Creating e-mail sending form

Create a JSP file called EmailForm.jsp with the following HTML code:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

     "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Email with Spring MVC</title>

</head>

<body>

    <center>

        <h1>Sending e-mail with Spring MVC</h1>

        <form method="post" action="sendEmail.do">

            <table border="0" width="80%">

                <tr>

                    <td>To:</td>

                    <td><input type="text" name="recipient" size="65" /></td>

                </tr>

                <tr>

                    <td>Subject:</td>

                    <td><input type="text" name="subject" size="65" /></td>

                </tr>

                <tr>

                    <td>Message:</td>

                    <td><textarea cols="50" rows="10" name="message"></textarea></td>

                </tr>               

                <tr>

                    <td colspan="2" align="center">

                        <input type="submit" value="Send E-mail" />

                    </td>

                </tr>

            </table>

        </form>

    </center>

</body>

</html>

This is a simple form with three fields: ToSubject and Message – which are necessary attributes for a simple outgoing e-mail message. On submitting this form, the action named “sendEmail.do” will be called, as specified by the form’s actionattribute. We will implement a Spring controller class for handling this action in the next section.

4. Configuring SMTP server settings and Spring MVC

Create a Spring context configuration file called spring-mvc.xml with the following XML code:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

    http://www.springframework.org/schema/context

    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="net.codejava.spring" />

    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

        <property name="host" value="smtp.gmail.com" />

        <property name="port" value="587" />

        <property name="username" value="youremail" />

        <property name="password" value="yourpassword" />

        <property name="javaMailProperties">

            <props>

                <prop key="mail.transport.protocol">smtp</prop>

                <prop key="mail.smtp.auth">true</prop>

                <prop key="mail.smtp.starttls.enable">true</prop>

            </props>

        </property>

    </bean>

    

    <bean id="viewResolver"

        class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="prefix" value="/" />

        <property name="suffix" value=".jsp" />

    </bean>

        

    <bean

        class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

        <property name="exceptionMappings">

            <props>

                <prop key="java.lang.Exception">Error</prop>

            </props>

        </property>

    </bean>   

</beans>

This configuration is pretty straightforward:

    • <context:component-scan ... />: tells Spring to scan the package net.codejava.spring for initializing components which are annotated by Spring annotations (It’s a Spring controller class, in case of this application).
    • Bean mailSender: this is the important part because it declares a Spring bean for e-mail implementation – theJavaMailSenderImpl class and configures SMTP server settings, which is for a Gmail account in this case. This bean will be injected to a Spring controller class which will be covered in the next section.
    • Bean viewResolver: maps logical view names to real JSP file names.
    • Bean SimpleMappingExceptionResolver: maps all exceptions of type java.lang.Exception to be handled byError.jsp page.

The web deployment descriptor file (web.xml) is configured as follows:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<?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>EmailSpringMVC</display-name>

  

    <servlet>

        <servlet-name>SpringController</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <init-param>

            <param-name>contextConfigLocation</param-name>

            <param-value>/WEB-INF/spring-mvc.xml</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>

    

    <servlet-mapping>

        <servlet-name>SpringController</servlet-name>

        <url-pattern>*.do</url-pattern>

    </servlet-mapping>

  

  <welcome-file-list>

    <welcome-file>EmailForm.jsp</welcome-file>

  </welcome-file-list>

</web-app>

It declares Spring controller servlet with its context configuration file (/WEB-INF/spring-mvc.xml). The controller is configured to handle all requests whose URL end with pattern: *.do. And the default page when accessing the application is the email form (EmailForm.jsp).

5. Creating Spring MVC controller class

In order to handle submission from the e-mail form, we need to create a Spring controller class as follows:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

package net.codejava.spring;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

@Controller

@RequestMapping("/sendEmail.do")

public class SendEmailController {

    @Autowired

    private JavaMailSender mailSender;

    

    @RequestMapping(method = RequestMethod.POST)

    public String doSendEmail(HttpServletRequest request) {

        // takes input from e-mail form

        String recipientAddress = request.getParameter("recipient");

        String subject = request.getParameter("subject");

        String message = request.getParameter("message");

        

        // prints debug info

        System.out.println("To: " + recipientAddress);

        System.out.println("Subject: " + subject);

        System.out.println("Message: " + message);

        

        // creates a simple e-mail object

        SimpleMailMessage email = new SimpleMailMessage();

        email.setTo(recipientAddress);

        email.setSubject(subject);

        email.setText(message);

        

        // sends the e-mail

        mailSender.send(email);

        

        // forwards to the view named "Result"

        return "Result";

    }

}

This controller class is quite simple. It is declared as a Spring MVC controller by the annotation @Controller, and is mapped to the e-mail form’s action by the @RequestMapping annotation. We inject the mailSender bean declared inspring-mvc.xml file into this controller through the private field also named mailSender. The injection is done automatically by Spring as we use the @Autowired annotation.

The method doSendEmail()is responsible for capturing input from e-mail form, creating a SimpleMailMessage object and sending the e-mail by invoking the send() method on the mailSender bean. The e-mail is in plain text format. Finally, it returns a view named “Result” which causes Spring to use the viewResolver to find and load appropriate JSP file (Result.jsp).

6. Creating result page and error page

Code the Result.jsp file as follows:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

    "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Send e-mail result</title>

</head>

<body>

    <center>

        <h2>Thank you, your email has been sent.</h2>

    </center>

</body>

</html>

And code the Error.jsp as follows:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

    "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Error</title>

</head>

<body>

    <center>

        <h2>Sorry, the email was not sent because of the following error:</h2>

        <h3>${exception.message}</h3>

    </center>

</body>

</html>

As we can see, the result page simply tells the user that the e-mail has been sent, while the error page displays an error message if any exception thrown during the process of sending e-mail.

7. Run the application

So far we have created all the key pieces of the application. Let’s deploy it on a servlet container like Tomcat, and access the application by typing the following URL into browser’s address bar (your host name and port number maybe different, depending on server configuration):

http://localhost:8080/EmailSpringMVC

The e-mail form is displayed, type in required information:

Hit Send E-mail button, it may take a while for the e-mail to be sent. A successful message comes from the result page in case everything is going well:

In case of error (such as network failure or the SMTP server could not be reached), the error page displays:

You can download the sample application as an Eclipse project or deployable WAR file in the attachment section, and remember to update SMTP settings to match your e-mail account.

时间: 2024-10-10 21:28:54

Sending e-mail with Spring MVC--转载的相关文章

string与spring mvc集成多种技术构建复杂工程(转载)

使用spring集成其他技术,最基本的配置都是模板化的,比如配置视图模板引擎.数据库连接池.orm框架.缓存服务.邮件服务.rpc调用等,以spring的xml配置为例,我将这些配置过程整理出来,并不时更新,以备参考! spring 在普通的java工程中引入spring,只需要配置以下依赖 1 2 3 4 5 <dependency>     <groupId>org.springframework</groupId>     <artifactId>sp

[转载] Spring MVC - 处理器拦截器

5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   5.1.1.常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间

转载:Spring MVC配置详解

以下内容引自:http://www.cnblogs.com/superjt/p/3309255.html spring MVC配置详解 现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理. 一.Spring MVC环境搭建:(Spring 2.5.6 + Hiber

【转载】Spring MVC入门

转自:http://www.importnew.com/15141.html MVC框架是什么 模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计模式.它主要通过分离模型.视图及控制器在应用程序中的角色将业务逻辑从界面中解耦.通常,模型负责封装应用程序数据在视图层展示.视图仅仅只是展示这些数据,不包含任何业务逻辑.控制器负责接收来自用户的请求,并调用后台服务(manager或者dao)来处理业务逻辑.处理后,后台业务层可能会返回了一些数据在视图层展示.控制器收集这些数据及

Spring MVC 和 Spring 总结 (转载自留)

Spring MVC 和 Spring 总结 1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,如性能监测.事务管理.日志记录等. 3). 声明式事务的支持 4). 方便集成各种优秀框架 5). 降低Java EE API的使用难度 如对JDBC,JavaMail,远程调用等提供了简便

Spring MVC 中 HandlerInterceptorAdapter的使用--转载

原文地址:http://blog.csdn.net/liuwenbo0920/article/details/7283757 一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的,这种方式可以实现Bean预处理.后处理. Spring MVC的拦截器不仅可实现Filter的所有功能,还可以更精确的控制拦截精度. Spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,

Spring mvc中@RequestMapping 6个基本用法小结(转载)

小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: Java代码   @RequestMapping(value="/departments") public String simplePattern(){ System.out.println("simplePattern method was called"); return "someResult"; } 则访问http://local

(转载)Spring mvc中@RequestMapping 6个基本用法小结

小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: Java代码 @RequestMapping(value="/departments") public String simplePattern(){ System.out.println("simplePattern method was called"); return "someResult"; } 则访问http://localho

Spring MVC静态资源处理——&lt;mvc:resources /&gt; ||&lt;mvc:default-servlet-handler /&gt; 转载

Spring MVC静态资源处理——<mvc:resources /> ||<mvc:default-servlet-handler /> mvcmvc:resources 优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往使用 *.do . *.xhtml等方式.这就决定了请求URL必须是一个带后缀的URL,而无法采用真正的REST

解决 spring mvc 3.0 结合 hibernate3.2 使用&lt;tx:annotation-driven&gt;声明式事务无法提交的问题(转载)

1.问题复现 spring 3.0 + hibernate 3.2 spring mvc使用注解方式:service使用@service注解 事务使用@Transactional 事务配置使用 Java代码   <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> [java] view plaincopy <tx:an