在若依(RuoYi)框架中实现邮件发送功能,通常需要借助Java的邮件发送库javax.mail
或其替代品jakarta.mail
。若依框架本身是一个基于Spring Boot的快速开发平台,提供了模块化和插件化的扩展能力,因此我们可以利用这些特性来集成邮件发送功能。
以下是实现邮件发送功能的详细步骤:
首先,在项目的pom.xml
文件中添加邮件相关的依赖项。若依框架使用的是Spring Boot,因此可以直接引入Spring Boot提供的邮件支持模块。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
如果项目中尚未配置Lombok插件,也可以一并引入以简化代码开发:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
在application.yml
或application.properties
文件中配置邮件服务器的相关参数。以下是一个典型的SMTP服务器配置示例:
spring:
mail:
host: smtp.qq.com # 邮件服务器地址,例如QQ邮箱、163邮箱等
port: 587 # SMTP端口
username: your_email@qq.com # 发件人邮箱账号
password: your_auth_code # 授权码,而非邮箱密码
properties:
mail:
smtp:
auth: true # 是否需要身份验证
starttls:
enable: true # 启用TLS加密
default-encoding: UTF-8 # 默认编码
注意:
password
字段的值。在若依框架中,可以通过创建一个Service类来封装邮件发送逻辑。以下是一个简单的实现示例:
public interface MailService {
/**
* 发送简单文本邮件
*
* @param to 收件人邮箱
* @param subject 邮件主题
* @param content 邮件内容
*/
void sendSimpleMail(String to, String subject, String content);
/**
* 发送HTML格式邮件
*
* @param to 收件人邮箱
* @param subject 邮件主题
* @param content 邮件内容(HTML格式)
*/
void sendHtmlMail(String to, String subject, String content);
}
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.Service;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender javaMailSender;
@Override
public void sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(content);
javaMailSender.send(message);
}
@Override
public void sendHtmlMail(String to, String subject, String content) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true); // 第二个参数为true表示启用HTML格式
javaMailSender.send(mimeMessage);
}
}
为了验证邮件发送功能是否正常工作,可以在Controller层编写一个测试接口。例如:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MailController {
@Autowired
private MailService mailService;
@GetMapping("/sendMail")
public String sendMail(@RequestParam String to, @RequestParam String subject, @RequestParam String content) {
try {
mailService.sendHtmlMail(to, subject, content);
return "邮件发送成功!";
} catch (Exception e) {
e.printStackTrace();
return "邮件发送失败:" + e.getMessage();
}
}
}
访问http://localhost:8080/sendMail?to=receiver@example.com&subject=Test&content=<h1>Hello</h1>
即可触发邮件发送。
在实际应用中,可能会遇到各种异常,例如网络问题、认证失败等。因此,建议对邮件发送过程进行日志记录和错误处理。可以在MailServiceImpl
中加入日志记录功能:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Service
public class MailServiceImpl implements MailService {
private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
@Autowired
private JavaMailSender javaMailSender;
@Override
public void sendSimpleMail(String to, String subject, String content) {
try {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to);
message.setSubject(subject);
message.setText(content);
javaMailSender.send(message);
logger.info("邮件发送成功:{}", to);
} catch (Exception e) {
logger.error("邮件发送失败:{}", to, e);
}
}
@Override
public void sendHtmlMail(String to, String subject, String content) throws MessagingException {
try {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
javaMailSender.send(mimeMessage);
logger.info("HTML邮件发送成功:{}", to);
} catch (MessagingException e) {
logger.error("HTML邮件发送失败:{}", to, e);
throw e;
}
}
}
可以使用MimeMessageHelper
的addAttachment
方法来添加附件:
@Override
public void sendAttachmentMail(String to, String subject, String content, String filePath) throws MessagingException {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
FileSystemResource file = new FileSystemResource(new File(filePath));
helper.addAttachment("附件名称", file);
javaMailSender.send(mimeMessage);
}
通过整合Thymeleaf模板引擎,可以动态生成复杂的邮件内容。以下是一个简单的实现:
application.yml
中引入Thymeleaf依赖。emailTemplate.html
)。sendHtmlMail
方法以支持模板渲染。@Autowired
private TemplateEngine templateEngine;
@Override
public void sendTemplateMail(String to, String subject, Map<String, Object> model) throws MessagingException {
Context context = new Context();
context.setVariables(model);
String emailContent = templateEngine.process("emailTemplate", context);
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(emailContent, true);
javaMailSender.send(mimeMessage);
}