作者:追梦1819
原文:https://www.cnblogs.com/yanfei1819/p/11118340.html
版权声明:本文为博主原创文章,转载请附上博文链接!

引言

  邮件的重要性也无需多说了,例如注册验证,消息通知,系统异常提醒等,都离不开邮件的发送。

版本信息

  • JDK:1.8
  • SpringBoot :2.1.4.RELEASE
  • maven:3.3.9
  • IDEA:2019.1.1
  • mail:2.1.4.RELEASE

使用

本示例演示的是 SpringBoot 项目发送邮件。

首先,创建项目,引入 maven 依赖:

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

然后,在 application.properties 中配置相关信息:

spring.mail.username=xxx@xyz.com
spring.mail.password=xxxxxxspring.mail.host=smtp.xx.com
spring.mail.properties.mail.smtp.ssl.enable=true

最后,测试代码:

package com.yanfei1819.mail;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.test.context.junit4.SpringRunner;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;@RunWith(SpringRunner.class)
@SpringBootTest
public class MailApplicationTests {@Autowiredprivate JavaMailSenderImpl sender;@Testpublic void contextLoads() {SimpleMailMessage message = new SimpleMailMessage();message.setSubject("开会");message.setText("今晚6点开会");message.setTo("xxx@163.com");message.setFrom("xxx@xyz.com");sender.send(message);}
}

在收件箱中可以查看到对应结果。

上述是发送一封简单的邮件。如何发送一封复杂的邮件呢,可以发送附件的那种?

其实也很简单,其余的配置都相同。重新写一个测试方法:

    @Testpublic void test() throws MessagingException {// 创建邮件MimeMessage message = sender.createMimeMessage();final MimeMessageHelper hepler = new MimeMessageHelper(message,true);// 邮件设置hepler.setSubject("开会");hepler.setText("<b>今晚6点开会</b>",true);hepler.setTo("xxx@163.com");hepler.setFrom("xxx@xyz.com");// 发送附件hepler.addAttachment("mybatis源码",new File("C:\\Users\\Administrator\\Desktop\\MyBatis源码分析.md"));// 邮件发送sender.send(message);}

运行,可以查看结果。

相关源码

  SpringBoot 邮件发送是不是很简单?只需要开发者注意几个需要配置的属性和组件即可。没有太多的复杂的代码。

下面我们看看在源码中是如何实现的。

先找到 spring-boot-autoconfigure-2.1.4.RELEASE.jar 下面的 mail 包,仔细查看 MailSenderPropertiesConfiguration 类,其中

    @Bean@ConditionalOnMissingBeanpublic JavaMailSenderImpl mailSender() {JavaMailSenderImpl sender = new JavaMailSenderImpl();applyProperties(sender);return sender;}

即为邮件发送组件。读者可以深入了解自动配置原理。

关于邮件的配置属性,都在 MailProperties 中:

package org.springframework.boot.autoconfigure.mail;import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;/*** SMTP server host. For instance, `smtp.example.com`.*/private String host;/*** SMTP server port.*/private Integer port;/*** Login user of the SMTP server.*/private String username;/*** Login password of the SMTP server.*/private String password;/*** Protocol used by the SMTP server.*/private String protocol = "smtp";/*** Default MimeMessage encoding.*/private Charset defaultEncoding = DEFAULT_CHARSET;/*** Additional JavaMail Session properties.*/private Map<String, String> properties = new HashMap<>();/*** Session JNDI name. When set, takes precedence over other Session settings.*/private String jndiName;// set/get 省略
}

转载于:https://www.cnblogs.com/yanfei1819/p/11118340.html

SpringBoot第十九篇:邮件服务相关推荐

  1. Springboot(十):邮件服务

    发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息.最早期的时候我们会使用javaMail相关api来写邮件相关代码,后来spring退出了javaMailSender ...

  2. springboot 第十九节 starter and muti_datasource 多数据源

    springboot 第十九节 starter and muti_datasource 多数据源 1. spring.datasource.spring.driverClassName=com.mys ...

  3. CCNP-第十九篇-ISIS(二)

    CCNP-第十九篇-ISIS(二) 首先来个对比的通信机制 首先呢,工作环境中,他没OSPF那么复杂哈,然后 底层启了ISIS,通了就不用管它了 实验环境 注意,上图是错误示范哦! 为什么呢? 为啥呢 ...

  4. Zsh 开发指南(第十九篇 脚本实例讲解)

    导读 本文将讲解一些比较简单的 zsh 脚本实例. 实例一:复制一个目录的目录结构 功能: 将一个目录及它下边的所有目录复制到另一个目录中(即创建同名目录),但不复制目录下的其他类型文件. 例子: s ...

  5. 世界上最经典的十九篇爱情短文

    世界上最经典的十九篇爱情短文 (一)开始的开始总是甜蜜的 后来就有了厌倦.习惯.背弃.寂寞.绝望和冷笑 曾经渴望与一个人长相厮守,后来,多么庆幸自己离开了 曾几何时,在一段短暂的时光里, 我们以为自己 ...

  6. 五、springboot 简单优雅是实现邮件服务

    文章目录 前言 邮箱服务器准备 添加依赖和配置 Service 层 controller层 测试 发送附件 番外 前言 spring boot 的项目放下小半个月没有更新了,终于闲下来可以开心的接着写 ...

  7. Android UI开发第三十九篇——Tab界面实现汇总及比较

    Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇--ActivityGroup实现tab功能>.这 ...

  8. SpringBoot第十六篇:用restTemplate消费服务

    这篇文章主要介绍怎么用消费一个 Restful的web服务.我将用restTemplate去消费一个服务: http://gturnquist-quoters.cfapps.io/api/random ...

  9. SpringBoot第二十二篇: 创建含有多module的springboot工程

    这篇文章主要介绍如何在springboot中如何创建含有多个module的工程,栗子中含有两个 module,一个作为libarary. 工程,另外一个是主工程,调用libary .其中libary ...

最新文章

  1. js实现模态框点击空白关闭
  2. 需求分析读书笔记(一)
  3. Document,Node,Element,HTMLDocument ,HTMLCollection,HTMLElement,NodeList
  4. python写文件追加 按行追加_Python3 自学第14天:文件操作,文件句柄,上下文管理器...
  5. Eclipse中在线安装spring-tool-suite插件
  6. erlang精要(31)-尾递归版的翻转列表
  7. 6-堆排序C实现(递增递减的简单转换,可优化(41行提示))
  8. 2015级C++第2周实践项目
  9. struts數據庫訪問
  10. 二维数组各行分别求和_【PyTorch入门】之十分钟看懂二维卷积层的运算、实现及应用...
  11. 中移4G模块-ML302-OpenCpu开发-前端网页搭建
  12. JAVA引用aar_AndroidStudio之如何引入和使用aar包
  13. groovy和java结合使用
  14. 如何在linux下运行php脚本,如何通过Linux命令行使用和运行PHP脚本
  15. mybatis 实现批量更新
  16. ckc交易什么意思_期货交易中的标准仓单充抵保证金是什么意思?
  17. ESIX群晖NAS安装教程
  18. 南水北调工程简介及线路图
  19. 中国足球深度剖析之五,破除周期性怪圈
  20. 云计算 IaaS PaaS SaaS 基础概念和区别终于搞清楚了

热门文章

  1. 让天下没有难Tuning的大模型:PEFT技术简介
  2. Mac brew升级go到指定版本
  3. 干货 | 全面解析“数字经济”
  4. 链表反转(指定区间)
  5. cad拉伸怎么用_三维绘图:203页的CAD三维绘图基础知识,提高绘图效率全靠它
  6. Windows系统下基于开源软件的多物理场仿真
  7. Cocos2d_iphone游戏开发_视频教程__国内顶级专业IOS培训机构__(内部资料不外传)
  8. uniapp 微信小程序 搜索框滚动固定
  9. 开放小程序插件功能,小程序插件的使用
  10. python火车票查询器