array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 【SpringBoot】SpringBoot 与邮件(二十三) 【Mail】JavaMail介绍及发送邮件(一) - 爱码网

  本章介绍如何使用SpringBoot发送邮件,关于发邮件基本知识,可以参考【Mail】JavaMail介绍及发送邮件(一)

  1、新建一个SpringBoot Web项目,引入邮件依赖(spring-boot-starter-mail)如下:

1 <dependency>
2     <groupId>org.springframework.boot</groupId>
3     <artifactId>spring-boot-starter-mail</artifactId>
4 </dependency>

  其中spring-boot-starter-mail也是依赖了javax.mail jar包

    【SpringBoot】SpringBoot 与邮件(二十三)
    




【Mail】JavaMail介绍及发送邮件(一)

  完整pom.xml如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.test</groupId>
 8     <artifactId>test-springboot-mail</artifactId>
 9     <version>1.0-SNAPSHOT</version>
10 
11     <parent>
12         <groupId>org.springframework.boot</groupId>
13         <artifactId>spring-boot-starter-parent</artifactId>
14         <version>2.1.8.RELEASE</version>
15     </parent>
16 
17     <properties>
18 
19         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
20         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
21         <java.version>1.8</java.version>
22     </properties>
23 
24     <dependencies>
25 
26         <dependency>
27             <groupId>org.springframework.boot</groupId>
28             <artifactId>spring-boot-starter-web</artifactId>
29         </dependency>
30 
31         <dependency>
32             <groupId>org.springframework.boot</groupId>
33             <artifactId>spring-boot-starter-mail</artifactId>
34         </dependency>
35 
36         <dependency>
37             <groupId>org.springframework.boot</groupId>
38             <artifactId>spring-boot-starter-test</artifactId>
39             <scope>test</scope>
40         </dependency>
41 
42     </dependencies>
43 
44 
45     <!-- SpringBoot打包插件,可以将代码打包成一个可执行的jar包 -->
46     <build>
47         <plugins>
48             <plugin>
49                 <groupId>org.springframework.boot</groupId>
50                 <artifactId>spring-boot-maven-plugin</artifactId>
51             </plugin>
52         </plugins>
53     </build>
54 
55 </project>
pom.xml

  2、查看MailSenderAutoConfiguration自动配置类,它自动导入了MailSenderJndiConfiguration配置类

 1 @Configuration
 2 @ConditionalOnClass({ MimeMessage.class, MimeType.class, MailSender.class })
 3 @ConditionalOnMissingBean(MailSender.class)
 4 @Conditional(MailSenderCondition.class)
 5 @EnableConfigurationProperties(MailProperties.class)
 6 @Import({ MailSenderJndiConfiguration.class, MailSenderPropertiesConfiguration.class })
 7 public class MailSenderAutoConfiguration {
 8 
 9     ...
10 
11 }

  3、MailSenderJndiConfiguration配置类,其中给容器注入了JavaMailSenderImpl对象,此对象就是用来发邮件的

 1 @Configuration
 2 @ConditionalOnClass(Session.class)
 3 @ConditionalOnProperty(prefix = "spring.mail", name = "jndi-name")
 4 @ConditionalOnJndi
 5 class MailSenderJndiConfiguration {
 6 
 7     private final MailProperties properties;
 8 
 9     MailSenderJndiConfiguration(MailProperties properties) {
10         this.properties = properties;
11     }
12 
13     // 用来发送邮件
14     @Bean
15     public JavaMailSenderImpl mailSender(Session session) {
16         JavaMailSenderImpl sender = new JavaMailSenderImpl();
17         sender.setDefaultEncoding(this.properties.getDefaultEncoding().name());
18         sender.setSession(session);
19         return sender;
20     }
21 
22     ...
23 }

   3、配置邮件信息

spring:
  mail:
    host: smtp.163.com
    port: 25
    username: xxxx@163.com
    password: xxxxx
    properties:
      # 开启debug调试  ,打印信息
      mail.debug: true

测试发送邮件

  发送简单邮件

  1、编辑发送邮件测试类,如下:

 1 @RunWith(SpringRunner.class)
 2 @SpringBootTest
 3 public class TestApplication {
 4 
 5     @Autowired
 6     JavaMailSenderImpl javaMailSenderImpl;
 7 
 8     @Test
 9     public void test01(){
10         SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
11         simpleMailMessage.setSubject("邮件测试主题");
12         simpleMailMessage.setText("邮件测试内容");
13         simpleMailMessage.setTo("123456@qq.com");
14         simpleMailMessage.setFrom("xxxx@163.com");
15 
16         javaMailSenderImpl.send(simpleMailMessage);
17     }
18 }

  2、测试,执行test01()方法,查看邮件内容

    【SpringBoot】SpringBoot 与邮件(二十三)
    




【Mail】JavaMail介绍及发送邮件(一)

  发送复杂邮件

  3、编辑发送复杂邮件的方法

 1 @Test
 2 public void test02() throws MessagingException {
 3 
 4     // 创建一个复杂邮件
 5     MimeMessage mimeMessage = javaMailSenderImpl.createMimeMessage();
 6     // 第二个参数为true表示支持附件
 7     MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
 8 
 9     // 邮件设置
10     mimeMessageHelper.setSubject("邮件测试主题");
11     // 第二个参数为true表示内容为html
12     mimeMessageHelper.setText("<b style=\"color:red\">邮件测试内容</b>",true);
13     mimeMessageHelper.setTo("123456@qq.com");
14     mimeMessageHelper.setFrom("xxxx@163.com");
15 
16     // 添加附件
17     mimeMessageHelper.addAttachment("1.jpg", new File("/Users/h__d/Downloads/1.jpg"));
18     mimeMessageHelper.addAttachment("2.jpg", new File("/Users/h__d/Downloads/2.jpg"));
19 
20     javaMailSenderImpl.send(mimeMessage);
21 }

  4、测试运行test02()方法。效果如下:

    【SpringBoot】SpringBoot 与邮件(二十三)
    




【Mail】JavaMail介绍及发送邮件(一)

 

相关文章: