准备工作
目前大部分的邮件服务都不允许直接使用用户名/密码的方式在代码种发送邮件,都是先要申请授权码,这里以qq邮箱为例,向大家演示授权码的申请流程,首先我们需要登陆到QQ邮箱中进行设置
在账户选项中开启POP3/SMTP服务
项目创建
接下来我们只需要创建springboot项目,由于springboot对邮件发送做了自动配置类,我们只需要加入相关的依赖就可以进行邮件的发送了。
完成创建后,项目依赖如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- 配置邮箱基本信息
spring.mail.host=smtp.qq.com
spring.mail.port=465
spring.mail.username=1056945048@qq.com
spring.mail.password=修改自己开启smpt服务的密码
spring.mail.default-encoding=utf-8
spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.debug=true
spring.mail.properties.mail.smtp.ssl.enable=true
server.port=8092
做好这些后,springboot就会自动帮我们配置好邮件发送类,相关的配置在org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
类中。
发送简单邮件
package com.xzy.mail.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.util.Date;
/**
* @author yangkun
* @date 2020/5/20
*/
@Controller
public class EmpMailSender {
@Autowired
TemplateEngine templateEngine;
@Autowired
JavaMailSender javaMailSender;
@RequestMapping("/send/simpleMail")
public void sendSimpleMail() {
//构建邮件对象
SimpleMailMessage message = new SimpleMailMessage();
//邮件主题
message.setSubject("这是一封测试邮件");
//邮件发送者
message.setFrom("1056945048@qq.com");
//邮件接收者(可以有多个)
message.setTo("1040558262@qq.com");
//邮件抄送人
message.setCc("37xxxxx37@qq.com");
//邮件隐秘抄送人(可以有多个)
message.setBcc("14xxxxx098@qq.com");
//邮件发送日期
message.setSentDate(new Date());
//邮件正文
message.setText("这是测试邮件的正文");
//发送邮件
javaMailSender.send(message);
}
@RequestMapping("/send/thymeleafMail")
public void sendThymeleafMail() throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
mimeMessageHelper.setSubject("入职欢迎");
mimeMessageHelper.setSentDate(new Date());
mimeMessageHelper.setFrom("1056945048@qq.com");
mimeMessageHelper.setTo("1040558262@qq.com");
//邮件抄送人
mimeMessageHelper.setCc("3da1s44654437@qq.com");
//邮件隐秘抄送人(可以有多个)
mimeMessageHelper.setBcc("14445545098@qq.com");
Context context = new Context();
context.setVariable("name", "javaboy");
context.setVariable("posName", "java后端开发");
context.setVariable("joblevelName","java初级工师");
context.setVariable("departmentName","软件开发部" );
String text = templateEngine.process("mail.html", context);
mimeMessageHelper.setText(text,true);
javaMailSender.send(mimeMessage);
}
}