前言
前段时间,在开发注册功能的时候,发现需要向用户提供的邮箱发送邮件,使用户有效点击后激活账号以使其正常使用,所以,对该功能的实现进行了整理记录。
1.添加依赖
首先,需要在pom.xml中添加以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.添加配置
然后,需要在配置文件中进行配置(下列配置以QQ邮箱为例):
spring.mail.host=smtp.qq.com
spring.mail.port=465
spring.mail.username=xxx@qq.com
spring.mail.password=xxoo
spring.mail.protocol=smtps
spring.mail.properties.mail.smtp.ssl.enable=true
username: 发送者的邮箱地址
password: 这个并不是该邮箱的密码,而是SMTP,获取方式可以自行搜索
3.编码实现
实现MailClient类,其中的 sendMail() 方法可用于发送邮件.
其中,利用了 MimeMessageHelper 来辅助设置各类信息,如:to接收者、subject主题、content内容。
@Component
@Data
public class MailClient {
private static final Logger logger = LoggerFactory.getLogger(MailClient.class);
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username} ")
private String from;
public void sendMail(String to, String subject, String content) {
try {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true); //true表示可以发送HTML
mailSender.send(helper.getMimeMessage());
} catch (MessagingException e) {
logger.error("发送邮件失败:" + e.getMessage());
}
}
}
4.测试
对该功能进行测试,执行以下方法即可使接收者收到邮件。
@Test
public void testTextMail() {
mailClient.sendMail("xxx@qq.com", "From Great Bisccuit", "hello");
}
当然,也可以发送HTML,其会对其进行处理,使其以HTML的形式显示:
HTML文件内容为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<h1>This is a HTML!</h1>
</body>
</html>
测试方法为:
@Test
public void testHtmlMail() {
Context context = new Context();
context.setVariable("username", "GreatBiscuit");
String content = templateEngine.process("/mail/demo", context);
System.out.println(content);
mailClient.sendMail("xxx@qq.com", "HTML", content);
}