使用spring实现邮件的发送(含测试,源码,注释)

简介: 使用spring实现邮件的发送(含测试,源码,注释)

     此篇主要讲的是使用spring配置实现邮件发送,与之前的底层实现简便了不少,只需要几个配置就可以了,那么请往下看:

  先写个接口

/**  
* @Title: IMailserdService.java
* @Package org.service
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-30 上午10:36:34
* @version V1.0  
*/
package org.service;
 /**   
 *    
 * 项目名称:spring_Schop8   
 * 类名称:IMailserdService   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-30 上午10:36:34   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-30 上午10:36:34   
 * 修改备注:   
 * @version    
 *    
 */
public interface IMailsendService {
  /**
   * 
  * @Title: sendMessage
  * @Description: 该方法的主要作用:发送邮件
  * @param   设定文件  
  * @return  返回类型:void   
  * @throws
   */
  void sendMessage();
}

然后在写个实现该接口的类:

/**  
* @Title: AttMailsendServiceImpl.java
* @Package org.service.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-30 上午11:12:02
* @version V1.0  
*/
package org.service.impl;
import java.io.IOException;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.service.IMailsendService;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
 /**   
 *    
 * 项目名称:spring_Schop8   
 * 类名称:AttMailsendServiceImpl   
 * 类描述:   使用spring实现对邮件的发送
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-30 上午11:12:02   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-30 上午11:12:02   
 * 修改备注:   
 * @version    
 *    
 */
public class AttMailsendServiceImpl implements IMailsendService {
  private JavaMailSender javaMailSender;
  
  /**(非 Javadoc)
   * <p>Title: sendMessage</p>
   * <p>Description(描述):发送带附件的邮件 </p>
   * @see org.service.IMailsendService#sendMessage()
   */
  @Override
  public void sendMessage() {
    MimeMessage message = javaMailSender.createMimeMessage();
    MimeMessageHelper helper;
    try {
      helper = new MimeMessageHelper(message,true,"utf-8");
      helper.setFrom("jerry@mail.com");
      helper.setTo("tina@mail.com");
      helper.setSubject("带附件的邮件");
      //普通格式的
      //helper.setText("发送一个附件内容!<a href='http://www.baidu.com'>百度搜索</a>");
      //html格式的
      helper.setText("发送一个附件内容!<a href='http://www.baidu.com'>百度搜索</a>",true);
      //添加附件1
      ClassPathResource file1 = new ClassPathResource("/org/doc/doc.txt");
      helper.addAttachment(file1.getFilename(),file1.getFile());
      //添加附件2
      ClassPathResource file2 = new ClassPathResource("/org/doc/text.txt");
      helper.addAttachment(file2.getFilename(), file2.getFile());
      javaMailSender.send(message);
      
    } catch (MessagingException e) {
      // TODO 异常执行块!
      e.printStackTrace();
    } catch (IOException e) {
      // TODO 异常执行块!
      e.printStackTrace();
    }
    
  }
  public JavaMailSender getJavaMailSender() {
    return javaMailSender;
  }
  public void setJavaMailSender(JavaMailSender javaMailSender) {
    this.javaMailSender = javaMailSender;
  }
}


上面的这个类还可以发送带附件的邮件,里面含两个附件(文件),我弄上来吧:


还有一种是使用模板发送带html格式的邮件:

我直接上实现类:

/**  
* @Title: CreateMatterServiceImpl.java
* @Package org.service.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-30 上午11:46:53
* @version V1.0  
*/
package org.service.impl;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.service.IMailsendService;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
 /**   
 *    
 * 项目名称:spring_Schop8   
 * 类名称:CreateMatterServiceImpl   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-30 上午11:46:53   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-30 上午11:46:53   
 * 修改备注:   
 * @version    
 *    
 */
public class CreateMatterServiceImpl implements IMailsendService {
  private JavaMailSender javaMailSender;
  private Configuration configuration;
  
  /**(非 Javadoc)
   * <p>Title: sendMessage</p>
   * <p>Description(描述):使用后模板发送邮件 </p>
   * @see org.service.IMailsendService#sendMessage()
   */
  @Override
  public void sendMessage() {
    MimeMessage message = javaMailSender.createMimeMessage();
    try {
      MimeMessageHelper helper = new MimeMessageHelper(message,true,"UTF-8");
      helper.setFrom("jerry@mail.com");
      helper.setTo("tina@mail.com");
      helper.setSubject("使用模板进行发送邮件");
      helper.setText(getText(),true);
      //从模板里面读取
      javaMailSender.send(message);
    } catch (MessagingException e) {
      // TODO 异常执行块!
      e.printStackTrace();
    }
  }
  
  //读取模板
  private String getText(){
    String txt = "";
    try {
      Template template  = configuration.getTemplate("mail.ftl");
      //通过map传递动态数据
      Map map = new HashMap();
      map.put("username","雄雄");
      //解析模板文件
      txt = FreeMarkerTemplateUtils.processTemplateIntoString(template,map);
      } catch (IOException e) {
      // TODO 异常执行块!
      e.printStackTrace();
    } catch (TemplateException e) {
        // TODO 异常执行块!
        e.printStackTrace();
      }
    
    return txt;
  }
  
  public JavaMailSender getJavaMailSender() {
    return javaMailSender;
  }
  public void setJavaMailSender(JavaMailSender javaMailSender) {
    this.javaMailSender = javaMailSender;
  }
  public Configuration getConfiguration() {
    return configuration;
  }
  public void setConfiguration(Configuration configuration) {
    this.configuration = configuration;
  }
}


模板文件如下:


然后在看看spring里面是怎么配置的呢?

<?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"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
  
  <bean id="mailsender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="mail.com"></property>
    <property name="port" value="25"></property>
    <property name="username"  value="jerry"></property>
    <property name="password"  value="123" ></property>
    <property name="protocol"  value="smtp"></property>
    <property name="defaultEncoding" value="utf-8"></property>
    <property name="javaMailProperties">
      <props>
        <prop key="mail.smtp.auth">true</prop>
      </props>
    </property>
  </bean>
  
  <!-- 配置FreeMarker-->
  <bean id="freeMarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
    <!-- 指定模板文件路径 -->
    <property name="templateLoaderPath" value="org/doc/"></property>
    <!-- 设置freekMarker环境变量 -->
    <property name="freemarkerSettings">
      <props>
        <prop key="default_encoding">UTF-8</prop>
      </props>
    </property>
  </bean>
  <!-- 简单邮件 -->
  <bean id="simpleMailsendService" class="org.service.impl.SimpleMailsendServiceImpl">
    <property name="sender" ref="mailsender"></property>
  </bean>
  <!-- html和带附件的邮件 -->
  <bean id="AttMailsendService" class="org.service.impl.AttMailsendServiceImpl">
    <property name="javaMailSender" ref="mailsender"></property>
  </bean>
  <!-- 使用模板发送邮件-->
  <bean id="createMatterService" class="org.service.impl.CreateMatterServiceImpl">
    <property name="configuration" ref="freeMarkerConfiguration"></property>
    <property name="javaMailSender" ref="mailsender"></property>
  </bean>
  
</beans>


当前时间已经是00点多了,又累又困,我就不详细解释这个applicationContexct.xml里面的内容了,里面有注释,看不懂的可以评论,我第一时间改进!

接着我们测试一下:

TestMail:

package org.test;
import org.junit.Test;
import org.service.IMailsendService;
import org.service.impl.Mail;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMail {
  
  @Test
  public void testMail() {
    ApplicationContext ctx = new  ClassPathXmlApplicationContext("applicationContext.xml"); 
    //简单邮件
    //IMailsendService mailsendService=(IMailsendService) ctx.getBean("simpleMailsendService");
    
    //复杂邮件
    //IMailsendService mailsendService=(IMailsendService) ctx.getBean("AttMailsendService");
    
    //使用模板的文件
    IMailsendService mailsendService=(IMailsendService) ctx.getBean("createMatterService");
    mailsendService.sendMessage();
    System.out.println("发送成功!");
  }
  
  
}


注明一下:简单邮件是直接发的文本内容,复杂邮件是包含html格式和附件的,模板发送是html格式的另一种方式,

我们来看看运行的结果:

先看看带附件,还有html格式的邮件:


接下来是简单邮件:


接下来的一种是使用模板发送邮件,用户名是动态上去的:



看不懂的欢迎留言!

相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
103 2
|
2月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
106 5
|
3月前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
400 2
|
6天前
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
28 10
|
6天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
2月前
|
Web App开发 测试技术 API
Playwright 测试报告中显示的标签和注释。
Playwright 测试报告中显示的标签和注释。
106 57
|
1月前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
57 2
|
2月前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
62 4
|
2月前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
75 9
|
2月前
|
Java 测试技术 数据库连接
使用Spring Boot编写测试用例:实践与最佳实践
使用Spring Boot编写测试用例:实践与最佳实践
121 0