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=25MailUtil.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
- Spring 邮件服务:Spring+Javamail+Spring SMTP Mail+Maven
- web邮件校验:Spring+Javamail+Spring SMTP Mail+Maven
- Spring邮件服务之Html:Maven + Spring SMTP Mail With Html
- Spring中javaMail通过SMTP发送邮件
- Spring中javaMail通过SMTP发送邮件
- Spring中javaMail通过SMTP发送邮件
- spring+mail+maven(spring 发送邮件)
- Spring boot 集成JavaMail服务发送邮件
- Spring JavaMail发送邮件
- spring JavaMail 邮件发送
- Spring Mail邮件发送
- spring mail发送邮件
- spring mail 发送邮件
- Spring mail 发送邮件
- spring mail 发送邮件
- Spring mail 发送邮件
- Spring mail 发送邮件
- maven项目(错误二) spring发送邮件报“com.sun.mail.smtp.SMTPAddressFailedException: 553 5.7.1”的解决方案
- hibernate的查询方式
- iOS开发之获取系统相册中的图片与视频(内带url转换)
- 奇偶排序
- 获取微信二维码的 ticket
- getContextPath、getServletPath、getRequestURI、getRealPath的区别
- Spring 邮件服务:Spring+Javamail+Spring SMTP Mail+Maven
- javaEE__http协议
- struts2 jar包详解
- java学习笔记集合框架Set集合
- UVALive 6930 Wheels(bfs)
- Java和c++类实现单向链表
- Hibernate中的乐观锁和悲观锁
- Android在MTP模式下,只显示指定文件夹
- Unity3d UGUI 动态加载按钮