SpringBoot - 使用JavaMailSender发送邮件教程2(发送带附件、图片的邮件)
作者:hangge | 2020-02-07 08:10
三、发送带附件的邮件
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 地址发送一个邮件,可以发现目标邮箱可以成功收到这封带有两张图片资源的邮件。
全部评论(0)