Spring 邮件服务:Spring+Javamail+Spring SMTP Mail+Maven

来源:互联网 发布:网络加速器下载免费版 编辑:程序博客网 时间:2024/06/14 01:36

继续昨天的学习(详细见javamail实现发送邮件并简单实现观察者模式),昨天只是简单的用javamail来发送邮件,需要自己进行一些封装,实际应用到项目中可能封装的会更多,由于项目中将要采用Spring MVC+mybatis这个架构来开发,并且有maven来管理,所以就试着搜了下spring是否提供相关功能,发现确实有,故整理出来供大家参考。

先介绍一下采用spring mail的好处吧,Spring 提供了一个发送电子邮件的高级抽象层,它向用户屏蔽了底层邮件系统的一些细节,同时负责低层次的代表客户端的资源处理。所以用 Spring 来发送 email 会省事很多和让发邮件变的简单许多,可以让我们更专注邮件内容本身而不必理会底层的具体实现。Spring邮件抽象层的主要包为org.springframework.mail。它包括了发送电子邮件的主要接口MailSender(实现类为org.springframework.mail.javamail.JavaMailSenderImpl,下面会用到改实现类)和封装了简单邮件属性的值对象SimpleMailMessage。下面会具体介绍spring mail实现过程并应用spring test进行单元测试(文章最后会提供源码下载):

maven工程的构建这里就不详细介绍了,晒一下工程结构目录吧:


pom清单:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>SpringMailTest</groupId><artifactId>SpringMailTest</artifactId><version>1.0</version><packaging>war</packaging><name /><description /><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>3.2.0.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>3.2.0.RELEASE</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.5</version></dependency><!-- javamail --><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.5</version></dependency></dependencies><build><sourceDirectory>${basedir}/src</sourceDirectory><outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory><resources><resource><directory>${basedir}/src</directory><excludes><exclude>**/*.java</exclude></excludes></resource></resources><plugins><plugin><artifactId>maven-war-plugin</artifactId><configuration><webappDirectory>${basedir}/WebRoot</webappDirectory><warSourceDirectory>${basedir}/WebRoot</warSourceDirectory></configuration></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.6</source><target>1.6</target></configuration></plugin></plugins></build></project>
我的spring版本不是最新的,现在已经更新到了4.x版本了,大家可以根据自己的需求选取版本。其中<artifactId>spring-context-support</artifactId>这个依赖提供了spring mail封装的各接口,<artifactId>spring-test</artifactId>这个依赖提供了Spring的单元测试(可以通过简单的注释获取到相关bean),<artifactId>mail</artifactId>这个依赖提供javamail jar包,这个是目前最新的版本。其余的就是日志相关依赖了。

spring-mail配置文件:

<?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:p="http://www.springframework.org/schema/p"      xmlns:aop="http://www.springframework.org/schema/aop"      xmlns:tx="http://www.springframework.org/schema/tx"      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/aop                          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd                          http://www.springframework.org/schema/tx                          http://www.springframework.org/schema/tx/spring-tx-3.0.xsd                          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd                          ">    <!-- 引入属性文件 --><context:property-placeholder location="classpath:mail.properties" />      <!-- 邮件发送器   -->      <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">          <property name="host" value="${mail.host}" />         <property name="username" value="${mail.username}" />          <property name="password" value="${mail.password}" />          <property name="defaultEncoding" value="UTF-8"></property>          <property name="javaMailProperties">              <props>                  <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>                  <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>                  <prop key="mail.smtp.port">${mail.smtp.port}</prop>              </props>          </property>      </bean>          <bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">    <!-- 发件人email -->        <property name="from" value="${mail.username}" />    </bean>        <bean id="mailUtil" class="com.study.mail.MailUtil">    <property name="mailSender" ref="mailSender"></property>    <property name="simpleMailMessage" ref="simpleMailMessage"></property>    </bean>   </beans>  

这个也没啥好说的,估计大家都懂。

mail属性文件:

mail.host=smtp.163.commail.username=xx@163.commail.password=xxmail.smtp.auth=truemail.smtp.timeout=25000mail.smtp.port=25
MailUtil.java:

/** *  */package com.study.mail;import java.util.List;import org.springframework.mail.MailSender;import org.springframework.mail.SimpleMailMessage;/** * * * @author <a href="ls.zhaoxiangyu@gmail.com">zhao</> * @date 2015-9-23 */public class MailUtil {private MailSender mailSender;private SimpleMailMessage simpleMailMessage;//Spring 依赖注入public void setMailSender(MailSender mailSender) {this.mailSender = mailSender;}//Spring 依赖注入public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {this.simpleMailMessage = simpleMailMessage;}/** * 单发 * * @param recipient 收件人 * @param subject 主题 * @param content 内容 */public void send(String recipient,String subject,String content){simpleMailMessage.setTo(recipient);simpleMailMessage.setSubject(subject);simpleMailMessage.setText(content);mailSender.send(simpleMailMessage);}/** * 群发 * * @param recipients 收件人 * @param subject 主题 * @param content 内容 */public void send(List<String> recipients,String subject,String content){simpleMailMessage.setTo(recipients.toArray(new String[recipients.size()]));simpleMailMessage.setSubject(subject);simpleMailMessage.setText(content);mailSender.send(simpleMailMessage);}}
Spring JUnit Test:

/** *  */package com.test.mail;import java.util.ArrayList;import java.util.List;import org.junit.Test;import org.junit.runner.RunWith;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.study.mail.MailUtil;/** * * * @author <a href="ls.zhaoxiangyu@gmail.com">zhao</> * @date 2015-9-23 */@RunWith(SpringJUnit4ClassRunner.class)//@RunWith(SpringJUnit4ClassRunner.class) 来启动 Spring 对测试类的支持@ContextConfiguration("/spring.xml")//@ContextConfiguration 注释标签来指定 Spring 配置文件或者配置类的位置public class MailTest {private static final Logger log = LoggerFactory.getLogger(MailTest.class);@Autowiredprivate MailUtil mailUtil;@Testpublic void sendSingleTest(){log.info("sendSingleTest");mailUtil.send("xx@sina.com", "This is a test single mail", "Hello Single!");}@Testpublic void sendMassTest(){log.info("sendMassTest");List<String> recipients=new ArrayList<String>();recipients.add("xx@sina.com");recipients.add("xx@qq.com");mailUtil.send(recipients, "This is a test mass mail", "Hello Mass!");}}

ok,上面基本就是全部了,运行单元测试就可以成功发送邮件了(单发与群发),晒一张收到邮件图:

最后提供工程源码下载(免费):http://download.csdn.net/download/osaymissyou0/9133825

1 0
原创粉丝点击