350 字
2 分钟
SpringBoot集成邮件发送功能
SpringBoot集成邮件发送功能
SpringFramework也是有mail的starter供springboot集成的,依赖如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.7.18</version>
</dependency>
我们可以直接在springboot的配置文件中填写关于邮件的参数,以outlook为例:
spring:
mail:
# 配置 SMTP 服务器地址
host: smtp.office365.com
# 发送者邮箱
username:
password:
# 端口号465或587
port: 587
# 默认的邮件编码为UTF-8
default-encoding: UTF-8
properties:
from:
接下来我们可以直接封装一个邮件发送的工具类,在需要的业务实现类中直接调用:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
/**
* @author Flyinsky
* @email w2084151024@gmail.com
* @date 2024/9/3 14:56
*/
@Component
public class MyMailSender {
@Resource
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
@Value("${spring.mail.username}")
private String fromEmail;
/**
* 发送邮件的方法
*
* @param to 接收者邮箱地址
* @param subject 邮件主题
* @param text 邮件内容
* @return 发送结果
*/
public String sendSimpleMessage(String to, String subject, String text) {
Properties properties = mailSender.getJavaMailProperties();
properties.put("mail.smtp.starttls.enable", "true");
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(fromEmail, "谈天说地");
helper.setTo(to);
helper.setSubject(subject);
helper.setText(text, true); // 第二个参数true表示支持HTML格式的邮件
mailSender.send(message);
return "邮件发送成功";
} catch (UnsupportedEncodingException | MessagingException e) {
throw new RuntimeException(e);
}
}
}
public class UserServiceImpl implements UserService {
@Resource
MyMailSender myMailSender;
@Override
public String sendAuthCode(String email, String sessionId) {
Random random = new Random();
int code = random.nextInt(899999) + 100000;
myMailSender.sendSimpleMessage(email, "您的验证码", "您的身份验证码为:" + code + ",有效期为三分钟。");
return null;
}
}