Spring Boot发送邮件一——最简单的邮件

  • 我们平时都会想到发一封邮件的需求,无论是工作需要,还是朋友间沟通,那么怎么能用java发一封邮件呢,我们先从邮件的协议说起

邮件的协议

  • SMTP(Simple Mal Translate Protocol)
    它是客户端向邮箱服务器发送邮件的协议
  • POP3(Post Office Protocl 3)
    它是客户端从服务器获取邮件的协议
  • IMAP(Internet Mail Access Protocl)
    与POP3一样,也是获取邮件的协议,它是POP3的增强版

邮件的流转

比如你想用QQ邮箱给139邮箱发一封邮件

  • 1.首先你需要发送邮件到QQ邮箱服务器
  • 2.QQ邮箱服务器收到邮件后会发给139邮箱服务器
  • 3.最后你在139邮箱上读取邮件内容

那么你在这个过程中,都使用了什么协议?

  • 1.首先你需要发送邮件到QQ邮箱服务器(这个过程使用的是POP3协议或IMAP协议)
  • 2.QQ邮箱服务器收到邮件后会发给139邮箱服务器(同样这个过程,也使用的是POP3协议或IMAP协议)
  • 3.最后你在139邮箱上读取邮件内容(这个过程使用的是SMTP协议)

邮件开启POP3/STMP、IMAP/STMP

以139邮箱为例,首先点击“账户信息”,找到“邮箱协议设置”,然后"开启POP3/STMP服务"选项打勾
在这里插入图片描述
在这里插入图片描述

  • 这样根据邮箱的账号密码,就可以用java代码往邮箱上发邮件了,下面进入代码编写

代码编写

Spring Boot 简化了发送邮件的配置,下面以 Spring Boot 来发送邮件,IDEA IntelliJ 来创建 Spring boot 项目,选了两个依赖:Spring Web 和 Java Mail Sender,Spring Web 就不说了,就是一个 JavaWeb 项目的依赖,Java Mail Sender 是 Spring Boot 提供的邮件发送工具
在这里插入图片描述
创建后在 application.properties 中添加如下内容

spring.mail.host=smtp.139.com
spring.mail.port=25
[email protected]
spring.mail.password=Xuanjin01
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.stmp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true

解释下 application.properties配置内容的含义

  • spring.mail.host=smtp.139.com 139邮箱的服务地址
  • spring.mail.port=25 不带SSL的端口
  • [email protected] 邮箱的真实账号
  • spring.mail.password=Xuanjin01 邮箱的真实密码(如果是 QQ 邮箱是一串加密串)
  • spring.mail.default-encoding=UTF-8 邮件内容的编码
  • spring.mail.properties.mail.stmp.socketFactory.class=javax.net.ssl.SSLSocketFactory 这个类是Socket用的,大概是指定SSL的Socket工厂类
  • spring.mail.properties.mail.debug=true 在控制台打印邮件的发送过程

可能有些人要问,邮箱服务器地址和端口哪里来的,其实每个邮箱都有说明,以 139 邮箱为例,在上面第二张图上的箭头指向的“需要帮助?”里,就有说明,我先截下图:
在这里插入图片描述
好了,由于发送邮件代码比较简单,就直接在test里编码了

@SpringBootTest
class MailApplicationTests {
    @Autowired
    JavaMailSender javaMailSender;//配置好后,Spring Boot自动生成的邮件发送对象
    @Test
    void contextLoads() {
        SimpleMailMessage msg = new SimpleMailMessage();
        msg.setFrom("[email protected]");//发件人
        msg.setSentDate(new Date());//发送日期
        msg.setSubject("这是测试主题");//发送主题
        msg.setText("这是测试内容");//发送内容
        msg.setTo("[email protected]");//收件人
        javaMailSender.send(msg);//发送
    }
  • 由于我其他邮箱开头不了 POP3/STMP 协议(主要是其他邮箱要手机号验证,我换号了),就自己给自己的 139 邮箱发邮件吧,我们看到只需要短短7行代码就可以了,执行@Test测试方法,控制台可以看见邮件的发送过程
    在这里插入图片描述

查看139邮箱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章