SpringBoot - 使用JavaMailSender发送邮件教程2(发送带附件、图片的邮件)
三、发送带附件的邮件
1,改造 MailService
这里对前文封装的邮件发送类 MailService 做个改造,增加一个可以发送包含附件的邮件的方法: 这里使用 MimeMessageHelper 简化邮件配置,通过 MimeMessageHelper 构造一个 multipart message 类型邮件来发送,multipart message 类型邮件可以包含多个正文、附件以及内嵌资源。
@Component public class MailService { // JavaMailSender 在Mail 自动配置类 MailSenderAutoConfiguration 中已经导入,这里直接注入使用即可 @Autowired JavaMailSender javaMailSender; // 发送带附件的邮件 // 方法5个参数分别表示:邮件发送者、收件人、邮件主题、邮件内容、以及附件 public void sendAttachFileMail(String from, String to, String subject, String content, File file) { try { MimeMessage message = javaMailSender.createMimeMessage(); // 这里使用 MimeMessageHelper 简化了邮件配置 // 第二个参数true表示构造一个 multipart message 类型邮件 // multipart message类型邮件包含多个正文、附件以及内嵌资源,邮件表现形式更加丰富 MimeMessageHelper helper = new MimeMessageHelper(message,true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(content); // 最后通过 addAttachment 方法添加附件 helper.addAttachment(file.getName(), file); javaMailSender.send(message); } catch (MessagingException e) { e.printStackTrace(); } } }
2,开始测试
(1)首先我们创建一个 Controller 调用这个 Service 方法进行测试:@RestController public class HelloController { @Autowired MailService mailService; @GetMapping("/hello") public void hello() { mailService.sendAttachFileMail("123@QQ.com", "service@hangge.com", "我是邮件的标题", "我是邮件的内容", new File("/Users/hangge/Desktop/test.txt")); } }
(2)启动项目,访问 http://localhost:8080/hello 地址发送一个邮件,可以发现目标邮箱可以成功收到这封带附件的邮件。
四、发送带图片资源的邮件
1,改造 MailService
这里对前面封装的邮件发送类 MailService 做个改造,增加一个可以发送带图片的邮件的方法: 如果需要在邮件正文中插入图片,可以使用 FileSystemResource 实现这一功能。通过 FileSystemResource 构造静态资源,然后调用 addInline 方法将资源加入到邮件对象中。
@Component public class MailService { // JavaMailSender 在Mail 自动配置类 MailSenderAutoConfiguration 中已经导入,这里直接注入使用即可 @Autowired JavaMailSender javaMailSender; // 发送带附件的邮件 // 方法5个参数分别表示:邮件发送者、收件人、邮件主题、邮件内容、图片资源路径、以及资源id public void sendMailWithImg(String from, String to, String subject, String content, String[] srcPath,String[] resIds) { if (srcPath.length != resIds.length) { System.out.println("发送失败"); return; } try { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message,true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); // 第二个参数true表示邮件正文是HTML格式(默认为false) helper.setText(content,true); for (int i = 0; i < srcPath.length; i++) { // 通过FileSystemResource构造静态资源,让后调用addInline方法将资源加入到邮件对象中 FileSystemResource res = new FileSystemResource(new File(srcPath[i])); helper.addInline(resIds[i], res); } javaMailSender.send(message); } catch (MessagingException e) { System.out.println("发送失败"); } } }
2,开始测试
(1)首先我们创建一个 Controller 调用这个 Service 方法进行测试:注意:邮件的正文是一段 HTML 文本,用 cid 标注出两个静态资源,分别为 p01 和 p02。
@RestController public class HelloController { @Autowired MailService mailService; @GetMapping("/hello") public void hello() { mailService.sendMailWithImg("123@QQ.com", "service@hangge.com", "这个是邮件的标题)", "<div>hello,这是一封带图片资源的邮件:<br>" + "这是图片1:<div><img src='cid:p01'/></div>" + "这是图片2:<div><img src='cid:p02'/></div>" + "</div>", new String[]{"/Users/hangge/Desktop/logo.png", "/Users/hangge/Desktop/image.png"}, new String[]{"p01", "p02"}); } }
(2)启动项目,访问 http://localhost:8080/hello 地址发送一个邮件,可以发现目标邮箱可以成功收到这封带有两张图片资源的邮件。