首先,导入依赖
<!-- 邮件服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.5.4</version>
</dependency>
然后写发送邮件controller代码:
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import test.sendEmail.service.EmailMessageService;
import javax.servlet.http.HttpServletRequest;
@Controller
@Slf4j
@RequestMapping("/email")
public class EmailMessageController {
@Autowired
private EmailMessageService emailMessageService;
@PostMapping("/sendEmailCode")
@ResponseBody
public void sendEmailCode(String email,//收件邮箱
MultipartFile[] file,//附件
HttpServletRequest request){
emailMessageService.sendEmailCode(email,file,request);
}
}
其中email是接收人的邮箱,file是需要发送的附件,其中发送人的账号密码信息在application中配置,发送的主题内容信息在业务代码中编写,也可以通过controller中的参数直接传进来。
业务代码:
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import test.sendEmail.service.EmailMessageService;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
@Service
@Slf4j
public class EmailMessageServiceImpl implements EmailMessageService {
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
// 发送邮箱账号
private String from;
/**
* 发送邮件
*
* @param email
* @param file
*/
@Override
public void sendEmailCode(String email, MultipartFile[] file, HttpServletRequest request) {
try{
MimeMessageHelper messageHelper = new MimeMessageHelper(mailSender.createMimeMessage(), true);//true表示支持复杂类型
messageHelper.setFrom(from);
messageHelper.setTo(email);//接收人
messageHelper.setSubject("主题");
messageHelper.setText("内容");
// messageHelper.setCc("");//抄送
for (MultipartFile multipartFile : file) {
messageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile);
}
messageHelper.setSentDate(new Date());
mailSender.send(messageHelper.getMimeMessage());//正式发送邮件
}catch(Exception e){
e.printStackTrace();
log.error("发送邮箱失败,邮箱:{}", email);
throw new RuntimeException("邮箱登录维护中,请使用其他方式登录");
}
}
}
然后在配置文件中,配置发送人的信息:
spring:
mail:
# 服务地址
host: smtp.163.com
# 用户邮箱
username: ……777777@163.com
# 授权码
password: RGADP……GYCN
default-encoding: utf-8
properties:
mail:
smtp:
ssl:
enable: true
protocol: smtps
一开始我还以为这是很难的东西,但是弄清楚之后还是很简单的,开箱即用。
一个集坚强与信心于一身的菇凉。