采用SpringBoot发送简单、抄送、密送、带附件邮件
前言:JavaMail发送邮件的形式多种多样,有简单、抄送、密送、带附件邮件等。
1. 业务需求 实现邮件的简单、抄送、密送和带附件发送四种方式。
2)引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
3)添加邮件设置信息
4)添加邮件发送接口
@PostMapping(value = "/v1/send/{subject}", name = "发送邮件信息", produces = "application/json;charset=UTF-8")
public boolean sendEmail(@PathVariable("subject")String subject, String text, String[] addressee,
String[] cc, String[] bcc, MultipartFile[] files) throws IOException, MessagingException {
return emailService.sendEmail(addressee, cc, bcc, subject, text, files);
}
5)实现邮件发送方法
@Service
public class EmailServiceImpl implements IEmailService {
@Autowired
private JavaMailSender mailSender;
/** 设置发信人 */
@Value("${spring.mail.username}")
private String sender;
@Override
public boolean sendEmail(String[] addressee, String[] cc, String[] bcc, String subject,
String text, MultipartFile[] files) throws IOException {
/** 接收附件的临时文件信息 */
List<String> paths = new ArrayList<>();
try {
MimeMessage mimeMessage = mailSender.createMimeMessage();
/** true代表多组件,如附件、图片等 */
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(sender);
helper.setTo(addressee);
helper.setSubject(subject);
helper.setText(text);
/** 抄送 */
if (cc != null && cc.length > 0) {
helper.setCc(cc);
}
/** 密送 */
if (bcc != null && bcc.length > 0) {
helper.setBcc(bcc);
}
/** 添加附件 */
if (files != null && files.length > 0) {
for (MultipartFile file : files) {
InputStream inputStream = file.getInputStream();
File tmp = new File(file.getOriginalFilename());
IOUtil.inputStreamToFile(inputStream, tmp);
FileSystemResource resource = new FileSystemResource(tmp);
helper.addAttachment(file.getOriginalFilename(), resource);
/** 保存临时附件信息 */
paths.add(tmp.getAbsolutePath());
}
}
mailSender.send(mimeMessage);
/** 邮件发送成功,删除临时附件 */
for (String path : paths){
File file = new File(path);
if (file.exists() && !file.isDirectory()){
file.delete();
}
}
} catch (Exception e) {
/** 邮件发送失败 ,保留临时附件地址,方便重发该邮件*/
e.printStackTrace();
}
return true;
}
}
补充:当抄送、密送、附件数组都没有数据时即为简单发送。
