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

继续昨天的学习(详细见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.com
mail.username=xx@163.com
mail.password=xx
mail.smtp.auth=true
mail.smtp.timeout=25000
mail.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);
	
	@Autowired
	private MailUtil mailUtil;
	
	@Test
	public void sendSingleTest(){
		log.info("sendSingleTest");
		mailUtil.send("xx@sina.com", "This is a test single mail", "Hello Single!");
	}
	
	@Test
	public 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

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值