当前位置: > > > SpringBoot - 使用JavaMailSender发送邮件教程1(发送一个简单邮件)

SpringBoot - 使用JavaMailSender发送邮件教程1(发送一个简单邮件)

    邮件发送是一个非常常见的功能,最初 Sun 公司提供了 JavaMail 用来实现邮件发送,但是配置烦琐。后来 Spring 中提供了 JavaMailsender 用来简化邮件配置,而 Spring Boot 则提供了 MailSenderAutoConfiguration 对邮件的发送做了进一步简化。

一、准备工作

(1)这里我们使用 QQ 邮箱来演示邮件的发送,首先要申请开通 POP3/SMTP 服务或者 IMAP/SMTP服务。
  • SMTP 全称为 Simple Mail Transfer Protocol,译作简单邮件传输协议,它定义了邮件客户端软件与 SMTP 服务器之间,以及 SMTP 服务器与 SMTP 服务器之间的通信规则。也就是说,aaa@qq.com 用户先将邮件投递到腾讯的 SMTP 服务器,这个过程就使用了 SMTP 协议,然后腾讯的 SMTP 服务器将邮件投递到网易的 SMTP 服务器,这个过程依然使用了 SMTP 协议,SMTP 服务器就是用来接收邮件的。
  • POP3 全称为 Post Office Protocol3,译作邮局协议,它定义了邮件客户端与 POP3 服务器之间的通信规则。当邮件到达网易的 SMTP 服务器之后,111@163.com 用户需要登录服务器查看邮件,这个时候就用上该协议了:邮件服务商会为每一个用户提供专门的邮件存储空间,SMTP 服务器收到邮件之后,将邮件保存到相应用户的邮件存储空间中,如果用户要读取邮件,就需要通过邮件服务商的 POP3 邮件服务器来完成。
  • IMAP 协议,则是对 POP3 协议的扩展,功能更强,作用类似。

(2)登录 QQ 邮箱,依次单击顶部的“设置”按钮:

(3)接着点击“账户”选项卡:

(4)在账户选项卡下方找到 POP3/SMTP 服务,单击后方的“开启按钮”:

(5)接着按照引导步骤发送短信,操作成功后,会获取一个授权码,将授权码保存下来后面需要使用。

二、一个简单的邮件发送样例

1,环境配置

(1)首先编辑项目的 pom.xml 文件,添加邮件依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

(2)接着在 application.properties 中配置邮件基本信息:
# 配置邮件服务器的地址
spring.mail.host=smtp.qq.com
# 配置邮件服务器的端口(465或587)
spring.mail.port=465
# 配置用户的账号
spring.mail.username=123@qq.com
# 配置用户的密码(即上面我们申请到的授权码)
spring.mail.password=qgczjydhuqytabcd
# 配置默认编码
spring.mail.default-encoding=UTF-8
# SSL 连接配置
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
# 开启 debug,这样方便开发者查看邮件发送日志
spring.mail.properties.mail.debug=true

2,样例代码

(1)创建一个 MailService 用来封装邮件的发送,代码如下:
@Component
public class MailService {

    // JavaMailSender 在Mail 自动配置类 MailSenderAutoConfiguration 中已经导入,这里直接注入使用即可
    @Autowired
    JavaMailSender javaMailSender;

    //方法5个参数分别表示:邮件发送者、收件人、抄送人、邮件主题以及邮件内容
    public void sendSimpleMail(String from, String to, String cc, String subject, String content) {
        // 简单邮件直接构建一个 SimpleMailMessage 对象进行配置并发送即可
        SimpleMailMessage simpMsg = new SimpleMailMessage();
        simpMsg.setFrom(from);
        simpMsg.setTo(to);
        simpMsg.setCc(cc);
        simpMsg.setSubject(subject);
        simpMsg.setText(content);
        javaMailSender.send(simpMsg);
    }
}

(2)接着我们创建一个 Controller 调用这个 Service 方法进行测试:
@RestController
public class HelloController {

    @Autowired
    MailService mailService;

    @GetMapping("/hello")
    public void hello() {
        mailService.sendSimpleMail("123@QQ.com",
                "hangge@163.com",
                "service@hangge.com",
                "我是邮件的标题",
                "我是邮件的内容");
    }
}

(3)启动项目,访问 http://localhost:8080/hello 地址发送一个邮件,可以发现目标邮箱可以成功收到邮件。
评论0