Spring Boot发送邮件详解

Spring框架使用JavaMailSender接口为发送邮件提供了一个简单的抽象,并且Spring Boot也为它提供了自动配置和一个starter模块。

如果spring.mail.host和相关的库(通过spring-boot-starter-mail定义)都存在,一个默认的JavaMailSender将被创建。该sender可以通过spring.mail命名空间下的配置项进一步自定义,下面本站素文宅博客具体讲述一下Spring Boot如何实现发送邮件。

引入spring-boot-starter-mail依赖,在pom.xml配置文件中增加如下内容(基于之前章节“Spring Boot 构建框架”中的pom.xml文件):

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

应用发送邮件案例

在application.properties配置文件中加入如下配置(注意替换自己的用户名和密码):

spring.mail.host=smtp.qq.com
spring.mail.username=用户名 //发送方的邮箱
spring.mail.password=密码 //对于qq邮箱而言 密码指的就是发送方的授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

邮件service服务代码,具体如下:

@Service
public class MailService {
 private final Logger logger = LoggerFactory.getLogger(this.getClass()); 

 @Autowired
 private JavaMailSender sender; 

 @Value("${spring.mail.username}")
 private String from; 

 /**
  * 发送纯文本的简单邮件
  * @param to
  * @param subject
  * @param content
  */
 public void sendSimpleMail(String to, String subject, String content){
  SimpleMailMessage message = new SimpleMailMessage();
  message.setFrom(from);
  message.setTo(to);
  message.setSubject(subject);
  message.setText(content); 

  try {
   sender.send(message);
   logger.info("简单邮件已经发送。");
  } catch (Exception e) {
   logger.error("发送简单邮件时发生异常!", e);
  }
 } 

 /**
  * 发送html格式的邮件
  * @param to
  * @param subject
  * @param content
  */
 public void sendHtmlMail(String to, String subject, String content){
  MimeMessage message = sender.createMimeMessage(); 

  try {
   //true表示需要创建一个multipart message
   MimeMessageHelper helper = new MimeMessageHelper(message, true);
   helper.setFrom(from);
   helper.setTo(to);
   helper.setSubject(subject);
   helper.setText(content, true); 

   sender.send(message);
   logger.info("html邮件已经发送。");
  } catch (MessagingException e) {
   logger.error("发送html邮件时发生异常!", e);
  }
 } 

 /**
  * 发送带附件的邮件
  * @param to
  * @param subject
  * @param content
  * @param filePath
  */
 public void sendAttachmentsMail(String to, String subject, String content, String filePath){
  MimeMessage message = sender.createMimeMessage(); 

  try {
   //true表示需要创建一个multipart message
   MimeMessageHelper helper = new MimeMessageHelper(message, true);
   helper.setFrom(from);
   helper.setTo(to);
   helper.setSubject(subject);
   helper.setText(content, true); 

   FileSystemResource file = new FileSystemResource(new File(filePath));
   String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
   helper.addAttachment(fileName, file); 

   sender.send(message);
   logger.info("带附件的邮件已经发送。");
  } catch (MessagingException e) {
   logger.error("发送带附件的邮件时发生异常!", e);
  }
 } 

 /**
  * 发送嵌入静态资源(一般是图片)的邮件
  * @param to
  * @param subject
  * @param content 邮件内容,需要包括一个静态资源的id,比如:<img src=\"cid:rscId01\" >
  * @param rscPath 静态资源路径和文件名
  * @param rscId 静态资源id
  */
 public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){
  MimeMessage message = sender.createMimeMessage(); 

  try {
   //true表示需要创建一个multipart message
   MimeMessageHelper helper = new MimeMessageHelper(message, true);
   helper.setFrom(from);
   helper.setTo(to);
   helper.setSubject(subject);
   helper.setText(content, true); 

   FileSystemResource res = new FileSystemResource(new File(rscPath));
   helper.addInline(rscId, res); 

   sender.send(message);
   logger.info("嵌入静态资源的邮件已经发送。");
  } catch (MessagingException e) {
   logger.error("发送嵌入静态资源的邮件时发生异常!", e);
  }
 }
}

简单测试代码如下:

public class MailTests extends BasicUtClass{
 @Autowired
 private MailService mailService; 

 private String to = "xujijun@mail.cn"; 

 @Test
 public void sendSimpleMail() {
  mailService.sendSimpleMail(to, "主题:简单邮件", "测试邮件内容");
 } 

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot实现邮件注册功能示例代码

    注册流程 1.[前端] 用户在注册页面提交注册信息: 2.[后端] 校验用户提交的参数,有误直接返回错误信息,无误向下执行: 3.[后端] 随机生成一个ID,将ID作为key,用户信息作为value,存入redis,设置时长: 4.[后端] 生成激活链接,通过邮件系统发送邮件到用户邮箱 5.[前端] 用户点击上图的"确认注册": 6.[后端] 校验value是否过期,校验邮箱是否已经注册,没有则保存用户信息到数据库,提示用户已经注册成功: 功能实现(逆向分析) 1.先看看邮件发送的实现

  • Spring学习笔记3之消息队列(rabbitmq)发送邮件功能

    rabbitmq简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过 队列来通信.队列的使用除去了接收和发送应用程序同时执行的要求.其中较为成熟的MQ产品有IBM WEBSPHERE MQ. 本节的内容是用户注册时,将邮

  • Java的Spring框架中实现发送邮件功能的核心代码示例

    Spring中已经封装了邮件操作类,通过spring配置文件可以便捷地注入到controller.action等地方. 下面是配置: <!-- mail sender --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" p:host="${mail.host}" p:port="${mail.por

  • Spring Boot实战之发送邮件示例代码

    一.邮件服务简介 邮件服务在互联网早期就已经出现,如今已成为人们互联网生活中必不可少的一项服务.那么邮件服务是怎么工作的呢?如下给出邮件发送与接收的典型过程: 1.发件人使用SMTP协议传输邮件到邮件服务器A: 2.邮件服务器A根据邮件中指定的接收者,投送邮件至相应的邮件服务器B: 3.收件人使用POP3协议从邮件服务器B接收邮件. SMTP(Simple Mail Transfer Protocol)是电子邮件(email)传输的互联网标准,定义在RFC5321,默认使用端口25: POP3(

  • spring mail借助qq邮箱服务器发送邮件

    spring mail封装了javaMail的邮件服务,让邮件服务使用起来更简单,下面以qq邮箱服务器为例,用spring mail服务来发送邮件 配置qq邮箱,"设置"--"账户",打开smtp服务,生成授权码 生成授权码需要验证手机,接下来用qq邮箱账号和授权码就可以发送邮件了,不需要qq密码 spring mail服务在spring-context-support中,配置依赖,然后就可以借助qq邮箱提供的发件服务器发送邮件了 <dependency>

  • Spring实现邮件发送功能

    前言:以前都是直接用Java自带的邮件工具发送邮件,现在Spring帮我们做了封装,提供了更好用更简单的发送邮件工具JavaMailSender,关于邮件服务器的设置就不在这里说了,直接去QQ邮箱设置下就好,下面看下主要的步骤: 步骤一.添加发送邮件相关Maven依赖 <!-- Spring 邮件发送 --> <dependency> <groupId>org.springframework</groupId> <artifactId>sprin

  • springMVC发送邮件的简单实现

    利用javax.mail发送邮件,图片与附件都可发送 1,Controller类 package com.web.controller.api; import javax.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.

  • Spring+quartz实现定时发送邮件功能实例

    在做具体的系统管理时,往往会有每隔一段时间发给用户一些邮件的业务,现在参考的网上的大部分代码,写下了我自己的代码. 在ApplicationContext.xml的内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.spr

  • SpringMVC实现通过邮件找回密码功能

    最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. 参考别人的思路:发送邮件→请求邮件里的URL→验证url→{验证成功修改密码,不成功跳转到失败页面} 重点就是如何生成这个url和如何解析这个url. 需要注意的是一个url只能修改一次密码,当同一帐号发送多封邮件,只有最后一封邮件的url 加密能防止伪造攻击,一次url只能验证一次,并且绑定了用户

  • Spring Boot中利用JavaMailSender发送邮件的方法示例(附源码)

    快速入门 在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> 如其他自动化配置模块一样,在完成了依赖引入之后,只需要在applicatio

随机推荐