Spring发送邮件总结(附源码)

简介: Spring发送邮件总结(附源码)

做项目用到自动发邮件功能,网上查阅很多没有给出特别详细的说明,需要自己去探索,做了很多弯路。

在此给大家分享一下自己的代码:

360网盘下载地址:http://yunpan.cn/cJzDQ3gVUHBxY  访问密码 8221

1.png使用时 请将Spring 配置文件里的  用户名、密码、邮箱服务器 还有端口 进行修改如果不是 yeah邮箱。



如果使用maven项目:


Pom.xml



添加的内容


<!-- Spring3 -->

 <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-core</artifactId>

  <version>3.2.4.RELEASE</version>

 </dependency>

 <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-context</artifactId>

  <version>3.2.4.RELEASE</version>

 </dependency>

 <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-jdbc</artifactId>

  <version>3.2.4.RELEASE</version>

 </dependency>

 <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-web</artifactId>

  <version>3.2.4.RELEASE</version>

 </dependency>

 <dependency>

  <groupId>org.springframework</groupId>

  <artifactId>spring-aop</artifactId>

  <version>3.2.4.RELEASE</version>

 </dependency>

<!-- Spring Email -->

 <dependency>

     <groupId>org.springframework</groupId>

     <artifactId>spring-context-support</artifactId>

     <version>3.2.4.RELEASE</version>

 </dependency>

 

 <!-- Javamail API -->

   <dependency>

     <groupId>javax.mail</groupId>

     <artifactId>mail</artifactId>

     <version>1.4.4</version>

</dependency>



如果直接导入JAR方式 ,需要引入如下JAR包

20150306000124845.png

ailUtil


package com.bookmarksClouds.util;

import java.io.File;

import javax.annotation.Resource;

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

import org.springframework.core.io.ClassPathResource;

import org.springframework.core.io.FileSystemResource;

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessageHelper;

import org.springframework.stereotype.Component;

@Component("simpleMail")

public class EmailUtil

{



  private JavaMailSender javaMailSender;

  private SimpleMailMessage simpleMailMessage;

 

  /**

     *

     * @方法名: sendMail

     * @参数名:@param subject 邮件主题

     * @参数名:@param content 邮件主题内容

     * @参数名:@param to        收件人Email地址

     * @param isHtml  是否是html格式(发送html时使用utf-8编码)

     * @描述语:  发送邮件

     * @throws MessagingException 发送发生了异常

     */

    public void sendMail(String subject, String content,boolean isHtml, String to) throws MessagingException

    {

     

     

            MimeMessage mimeMessage = javaMailSender.createMimeMessage();

       

            MimeMessageHelper messageHelper =null;

            if(isHtml)

            {

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

            }

            else

            {

               messageHelper = new MimeMessageHelper(mimeMessage,true);

            }

            messageHelper.setFrom(simpleMailMessage.getFrom()); //设置发件人Email

            messageHelper.setSubject(subject); //设置邮件主题

            if(isHtml)

            {

              messageHelper.setText(content,true);   //设置邮件主题内容(html格式)

            }

            else

            {

              messageHelper.setText(content);   //设置邮件主题内容

            }

         

         

            messageHelper.setTo(to);          //设定收件人Email

       

         

            javaMailSender.send(mimeMessage);  

    }

 

 

 

 

 

 

   /**

    * 发送邮件 (包含附件)

    * @param subject 主题

    * @param content 内容

    * @param fileAttachment 附件文件

    * @param isHtml 内容是否是html格式

    * @param to 发送的邮箱地址

    * @throws MessagingException 发送邮件异常(失败)

    */

    public void sendMail(String subject, String content,boolean isHtml, File fileAttachment,String to) throws MessagingException

    {

     

     

            MimeMessage mimeMessage = javaMailSender.createMimeMessage();

       

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

         

            messageHelper.setFrom(simpleMailMessage.getFrom()); //设置发件人Email

            messageHelper.setSubject(subject); //设置邮件主题

            if(isHtml)

            {

              messageHelper.setText(content,true);   //设置邮件主题内容(html格式)

            }

            else

            {

              messageHelper.setText(content);   //设置邮件主题内容

            }

            messageHelper.setTo(to);          //设定收件人Email

            FileSystemResource file = new FileSystemResource(fileAttachment);

       

             messageHelper.addAttachment(file.getFilename(), file); //添加附件

            javaMailSender.send(mimeMessage);  

        }

 

 

 

    /**

     * 发送邮件 (包含附件)

     * @param subject 主题

     * @param content 内容

     * @param classPathResource 附件文件(附加在项目内部时候)

     * @param isHtml 内容是否是html格式

     * @param to 发送的邮箱地址

     * @throws MessagingException

     */

     public void sendMail(String subject, String content,boolean isHtml, ClassPathResource classPathResource,String to)

       throws MessagingException

     {

       

       

             MimeMessage mimeMessage = javaMailSender.createMimeMessage();

           /**

              * new MimeMessageHelper(mimeMessage,true)之true个人见解:

              * 关于true参数,官方文档是这样解释的:

              * use the true flag to indicate you need a multipart message

              * 翻译过来就是:使用true,以表明你需要多个消息

              * 再去翻一下MimeMessageHelper的API,找到这样一句话:

              * supporting alternative texts, inline elements and attachments

              * 也就是说,如果要支持内联元素和附件就必须给定第二个参数为true

              * 否则抛出 java.lang.IllegalStateException 异常

              */

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

             messageHelper.setFrom(simpleMailMessage.getFrom()); //设置发件人Email

             messageHelper.setSubject(subject); //设置邮件主题

             if(isHtml)

             {

               messageHelper.setText(content,true);   //设置邮件主题内容(html格式)

             }

             else

             {

               messageHelper.setText(content);   //设置邮件主题内容

             }

             messageHelper.setTo(to);          //设定收件人Email

             /**  FileSystemResource file = new FileSystemResource(fileAttachment);

         

              * ClassPathResource:很明显就是类路径资源,我这里的附件是在项目里的,所以需要用ClassPathResource

              * 如果是系统文件资源就不能用ClassPathResource,而要用FileSystemResource,例:

              *

         

             ClassPathResource file = new ClassPathResource("attachment/Readme.txt");

               */

           /**

              * MimeMessageHelper的addAttachment方法:

              * addAttachment(String attachmentFilename, InputStreamSource inputStreamSource)

              * InputStreamSource是一个接口,ClassPathResource和FileSystemResource都实现了这个接口

           

         

               //发送附件邮件

             */

             ClassPathResource file = classPathResource;

              messageHelper.addAttachment(file.getFilename(), file); //添加附件

             javaMailSender.send(mimeMessage);  

       

     }

   

 

      //Spring 依赖注入

    @Resource

    public void setSimpleMailMessage(SimpleMailMessage simpleMailMessage) {

        this.simpleMailMessage = simpleMailMessage;

    }

      //Spring 依赖注入

    @Resource

    public void setJavaMailSender(JavaMailSender javaMailSender) {

        this.javaMailSender = javaMailSender;

    }

}


Demo


package com.bookmarksClouds.test;

import javax.mail.MessagingException;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bookmarksClouds.util.EmailUtil;

public class EmailUtilTest

{

 private  ApplicationContext factory = new ClassPathXmlApplicationContext(

            new String[] {"spring/spring-smtp-mail-attachment.xml"});

@Test

public void test()

{

 

 EmailUtil mail = (EmailUtil)factory.getBean("simpleMail");

 String html= "<html><head><META http-equiv=Content-Type content='text/html; charset=UTF-8'><title>云书签注册激活</title></head><body>欢迎使用,云书签。<br/><a href='www.baidu.com' >云书签</a><br>点击上面超链接 激活账户信息!</body><html>";

 

       try {

  mail.sendMail("云书签注册自动发邮件", html,true, "***@qq.com");

 } catch (MessagingException e) {

  System.out.println("发送邮件失败!");

  //e.printStackTrace();

 }

}

}


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:context="http://www.springframework.org/schema/context"

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

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

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

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

         http://www.springframework.org/schema/context/spring-context-3.2.xsd

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

         http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">

                     <context:annotation-config/>

<context:component-scan base-package="com.bookmarksClouds"/>  

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

        <!--  服务器  -->

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

         <!--  端口号  -->

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

         <!--  用户名  -->

         <property  name ="username"  value ="邮箱地址"   />

         <!--   密码    -->

         <property  name ="password"  value ="邮箱密码"   />

         <!--  SMTP服务器验证  -->

         <property  name ="javaMailProperties" >

             <props >

                 <!--  验证身份  -->

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

            </props >

         </property >

</bean >

<bean id="simpleMailMessage" class="org.springframework.mail.SimpleMailMessage">

       <!-- 发件人email -->

       <property name="from" value="发送邮箱地址" />

       <!--

        收件人email

       <property name="to" value="to@yeah.net" />

       email主题(标题)

       <property name="subject" value="Subject" />

       email主题内容

       <property name="text">

         <value>ContentText</value>

       </property>

       -->

   </bean>

 

</beans>



////

相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
96 2
|
2月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
102 5
|
3天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
存储 缓存 Java
Spring面试必问:手写Spring IoC 循环依赖底层源码剖析
在Spring框架中,IoC(Inversion of Control,控制反转)是一个核心概念,它允许容器管理对象的生命周期和依赖关系。然而,在实际应用中,我们可能会遇到对象间的循环依赖问题。本文将深入探讨Spring如何解决IoC中的循环依赖问题,并通过手写源码的方式,让你对其底层原理有一个全新的认识。
57 2
|
2月前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
75 9
|
4月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
364 24
|
4月前
|
缓存 Java 开发工具
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
三级缓存是Spring框架里,一个经典的技术点,它很好地解决了循环依赖的问题,也是很多面试中会被问到的问题,本文从源码入手,详细剖析Spring三级缓存的来龙去脉。
237 24
|
3月前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
200 5
|
3月前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
3月前
|
Java Spring 容器
Spring IOC、AOP与事务管理底层原理及源码解析
【10月更文挑战第1天】Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
157 9