Spring Boot使用JavaMailSender发送邮件

Spring提供了非常好用的JavaMailSender接口实现邮件发送。在Spring Boot中也提供了相应的自动化配置。

这篇文章主要讲如何在Spring Boot中使用JavaMailSender发送邮件。

发送邮件

1,在pom.xml中引入spring-boot-starter-mail依赖:

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-mail</artifactId>

</dependency>

2,在application.properties中配置相应的属性:(我这里模拟的是163邮箱给QQ邮箱发送邮件)

spring.mail.host=smtp.163.com

spring.mail.username=邮箱用户名 so****@163.com

spring.mail.password=邮箱密码

spring.mail.default-encoding=UTF-8

3,写发送邮件的测试类

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.mail.SimpleMailMessage;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

@RequestMapping("/mail")

public class MailController {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired

    private JavaMailSender mailSender;

@RequestMapping("/send")

public void sendMail(){

        SimpleMailMessage message = new SimpleMailMessage();

        message.setFrom("so****@163.com");

        message.setTo("239****@qq.com");

        message.setSubject("it is a test for spring boot");

        message.setText("你好,我是小黄,我正在测试发送邮件。");

        try {

            mailSender.send(message);

            logger.info("小黄的测试邮件已发送。");

        } catch (Exception e) {

            logger.error("小黄发送邮件时发生异常了!", e);

        }

    }

}

4,运行启动类

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

@EnableAutoConfiguration

@MapperScan("cn.yideng.*.dao")

public class DemoApplication {

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

}

5,浏览器运行 http://localhost:8080/mail/send

6,登录163邮箱,在发送箱里查看

7,登录QQ邮箱,在收件箱里查看,如下图

可以看出Spring Boot的starter模块提供了自动化配置,在引入了spring-boot-starter-mail依赖之后,会根据配置文件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使用的地方直接@Autowired来引入 JavaMailSender 邮件发送对象。

当然在实际使用过程中,不会这么简单,我们可能会要求带上附件、或使用邮件模块等。这时我们就需要使用MimeMessage来设置更复杂的右键内容,下面就来看看怎么实现它。

发送带附件的邮件

测试类 : 还是模拟 163邮箱 给QQ邮箱发送邮件

import java.io.File;

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.core.io.FileSystemResource;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessageHelper;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**

 *  发送有附件的邮件

 *

 */

@RestController

@RequestMapping("/mail")

public class AttachmentsMailController {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired

    private JavaMailSender mailSender;

@RequestMapping("/att")

public void sendMail() throws MessagingException{

MimeMessage mimeMessage = mailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

helper.setFrom("so****@163.com");

helper.setTo("239****@qq.com");

helper.setSubject("主题:发送有附件的邮件");

helper.setText("你好,我是小黄,我正在测试发送一封有附件的邮件。");

FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));

FileSystemResource file2 = new FileSystemResource(new File("d:\\java-1.jpg"));

helper.addAttachment("附件-1.jpg", file1);

helper.addAttachment("附件-2.jpg", file2);

        try {

            mailSender.send(mimeMessage);

            logger.info("小黄的测试带附件的邮件已发送。");

        } catch (Exception e) {

            logger.error("小黄发送带附件邮件时发生异常了!", e);

        }

    }

}

2,需要 在D盘下准备两张图片cat.jpg  java-1.jpg,

3,浏览器运行 http://localhost:8080/mail/att

4,登录163邮箱,在发送箱里查看,如下图

5,登录QQ邮箱,在收件箱里查看,如下图

嵌入静态资源的邮件

还有一种是通过嵌入图片等静态资源,可以直接看到图片,而不用从附近中查看具体的图片,来看看吧。

测试类:


import java.io.File;

import javax.mail.MessagingException;

import javax.mail.internet.MimeMessage;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.core.io.FileSystemResource;

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessageHelper;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**

 *  嵌入静态资源

 */

@RestController

@RequestMapping("/mail")

public class StaticResourceMailController {

private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired

    private JavaMailSender mailSender;

@RequestMapping("/static")

public void sendMail() throws MessagingException{

MimeMessage mimeMessage = mailSender.createMimeMessage();

MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

helper.setFrom("so****@163.com");

helper.setTo("239****@qq.com");

helper.setSubject("主题:嵌入静态资源");

helper.setText("<html><body><img src=\"cid:hello\" ></body></html>", true);

// 注意addInline()中资源名称 hello 必须与 text正文中cid:hello对应起来

FileSystemResource file1 = new FileSystemResource(new File("d:\\cat.jpg"));

helper.addInline("hello", file1);

        try {

            mailSender.send(mimeMessage);

            logger.info("小黄的测试嵌入静态资源的邮件已发送。");

        } catch (Exception e) {

            logger.error("小黄发送嵌入静态资源的邮件时发生异常了!", e);

        }

    }

}

要特别注意addInline()中资源名称 hello 必须与 text正文中cid:hello对应

2,需要 在D盘下准备两张图片cat.jpg

3,浏览器运行 http://localhost:8080/mail/static

4,登录163邮箱,在发送箱里查看,如下图

5,登录QQ邮箱,在收件箱里查看,如下图

好了,Spring Boot使用JavaMailSender发送邮件就到这里了。

原文地址:https://www.cnblogs.com/wxc-xiaohuang/p/9532631.html

时间: 2024-10-03 22:29:33

Spring Boot使用JavaMailSender发送邮件的相关文章

Spring Boot 发送邮件

Spring Boot 使用 JavaMailSender 来发送邮件,Spring Boot 是用来自动配置实现配置.邮件发送没有什么技术难点,拿来即用. 本项目源码下载 1 新建 Spring Boot Maven 示例工程项目 注意:是用来 IDEA 开发工具 File > New > Project,如下图选择 Spring Initializr 然后点击 [Next]下一步 填写 GroupId(包名).Artifact(项目名) 即可.点击 下一步 groupId=com.fish

spring-boot实战【12】:Spring Boot中使用JavaMailSender发送邮件

相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件. 快速入门 在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖: 1 2 3 4 <dependency> <groupId>org.springframew

Spring Boot中使用JavaMailSender发送邮件

相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送.在Spring Boot的Starter模块中也为此提供了自动化配置.下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件. 快速入门 在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖: <dependency> <groupId>org.springframework.boot

解决spring boot JavaMailSender部分收件人错误导致发送失败的问题

使用spring boot通常使用spring-boot-starter-mail进行邮件的发送.当进行邮件群发的话,如果一个收件人的地址错误,会导致所有邮件都发送失败.因此我们需要在邮件发送失败的时候把错误的收件人移除,重新发送. 当邮件发送失败的时候会抛出MailSendException,异常信息中包含错误的收件人信息. 主要代码如下: private void sendMail(List<String> mailList, MimeMessageHelper message){ try

Spring Boot 2.0 图文教程 | 集成邮件发送功能

文章首发自个人微信公众号: 小哈学Java 个人网站: https://www.exception.site/springboot/spring-boots-send-mail 大家好,后续会间断地奉上一些 Spring Boot 2.x 相关的博文,包括 Spring Boot 2.x 教程和 Spring Boot 2.x 新特性教程相关,如 WebFlux 等.还有自定义 Starter 组件的进阶教程,比如:如何封装一个自定义图床 Starter 启动器(支持上传到服务器内部,阿里 OS

从spring boot发邮件聊到开发的友好性

前些天帮一个朋友做网站,全站都是静态页面,唯一需要用到后端开发的是他需要一个留言板.传统的留言板一般都是提交后保存到数据库,然后提供一个后台的留言列表给管理人员看,我嫌麻烦,就决定留言提交到后台直接发邮件出去,这样就不用开发后台页面了,他也不需要登录一个什么后台才能看留言,两全其美,岂不美哉. 1.最简版spring boot发邮件 spring boot发邮件还是挺简单的,首先把发邮件的start加到pom里面: <dependency> <groupId>org.springf

spring boot发简单文本邮件

首先要去邮箱打开POP3/SMTP权限: 然后会提供个授权码,用来发送邮件.忘记了,可以点生成授权码再次生成. 1.引入spring boot自带的mail依赖,这里版本用的:<spring-boot.version>1.4.3.RELEASE</spring-boot.version> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin

Spring boot + Gradle + Eclipse打war包发布总结

首先感谢两位博主的分享 http://lib.csdn.net/article/git/55444?knId=767 https://my.oschina.net/alexnine/blog/540651 buildscript { ext { springBootVersion = '1.5.2.RELEASE' } repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } jcent

21. Spring Boot过滤器、监听器【从零开始学Spring Boot】

转载:http://blog.csdn.net/linxingliang/article/details/52069490 上一篇文章已经对定义Servlet 的方法进行了说明,过滤器(Filter)和 监听器(Listener)的注册方法和 Servlet 一样,不清楚的可以查看下上一篇文章(20): 本文将直接使用@WebFilter和@WebListener的方式,完成一个Filter 和一个 Listener:使用注解 @ServletComponentScan//这个就是扫描相应的Se