采用SpringBoot发送简单、抄送、密送、带附件邮件

 

前言:JavaMail发送邮件的形式多种多样,有简单、抄送、密送、带附件邮件等。

1. 业务需求
实现邮件的简单、抄送、密送和带附件发送四种方式。

2. 实现步骤
    在这里,我使用QQ邮箱作为测试(网易邮箱的设置方式和此类似)。
    
    1)开启QQ邮箱的第三方登录

采用SpringBoot发送简单、抄送、密送、带附件邮件_第1张图片

2)引入依赖


	org.springframework.boot
	spring-boot-starter-mail

3)添加邮件设置信息

spring.mail.host=smtp.qq.com
spring.mail.username=QQ邮箱
spring.mail.password=授权码
spring.mail.default-encoding=UTF-8

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 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;
    }
}

补充:当抄送、密送、附件数组都没有数据时即为简单发送。

3. 总结
由于QQ邮箱和网易邮箱的不,在用QQ邮箱进行测试时,会顺畅点,基本都发送成功;当用网易邮箱进行抄送、密送、带附件发送邮件时,会报554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件。目前,我还没有找到有效的解决方法,希望知道的大佬可以告诉我。
最后,文章若是有不对的地方,欢迎指出,谢谢。

你可能感兴趣的:(Java)