发送邮件(二)发送包含图片的邮件"/>
SpringBoot发送邮件(二)发送包含图片的邮件
前言:使用发邮件这个功能不难,但是也有一些坑,下面我把开发邮件功能总结了一下分享给大家,同时为了避免篇幅过长,导致大家看的不仔细或看一半不想看了,我将这个功能细分了一下,写了好几篇供大家各取所需。
Spring mail提供了 JavaMailSender接口实现邮件发送,其底层还是javamail,不过是进一步封装变得更加易用了。下面通过实例看看如何在Spring Boot中使用 JavaMailSender 发送邮件。
一、引入maven依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
二、开启POP3/SMTP服务
把这个写在第二步,是因为很多没做过发送邮件的可能不知道需要开启这个才能使用第三方程序来发邮件,并且生成的授权码下面也要用到。
三、配置application.properties文件
spring.mail.host=smtp.qq.com --qq邮箱为smtp.qq.com 163邮箱为smtp.163.com
spring.mail.username=123456789@qq.com --自己定义的发送者账号
spring.mail.password=123456 --这里不是注册时的密码,而是上面生成的授权码
spring.mail.properties.mail.smtp.auth=true --开启验证 true为开启,false不开启
spring.mail.properties.mail.smtp.starttls.enable=true --加密通讯,true开启,false不开启
spring.mail.properties.mail.smtp.starttls.required=true --是否必须通过使用加密通讯进行通讯,true开启,false不开启
四、编写service
为了能真实使用,编写了一个MailService ,我就不在junt上写了
@Service
public class MailService {@Autowiredprivate JavaMailSender mailSender;// 获取application.properties中的值赋给from@Value("${spring.mail.username}")private String from;/*** @param toUsers 收件人* @param ccUsers 抄送人* @param title 标题* @param text 内容* @param imgPath 图片路径* @param imgId 图片id* @return true-成功,false-失败*/public boolean sendImgMail(String[] toUsers,String[] ccUsers, String title, String text, String imgPath, String imgId) {boolean isSend = true;try {MimeMessage mimeMessage = mailSender.createMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);helper.setFrom(from);// 发件人helper.setTo(toUsers);// 收件人//helper.setCc(ccUsers);//抄送人,使用Cc还是Bcc大家根据具体场景自己选择helper.setBcc(ccUsers);//秘密抄送(发件人,收件人,抄送人都不会看到抄送给谁了)helper.setSubject(title);// 标题/* 创建html内容,若不创建html标签,则图片会以附件的形式发送,而并非直接以内容显示 */String content = "<html><body>" + text + "<img src=\'cid:" + imgId + "\'></img>" + "</body></html>";helper.setText(content, true);// text:内容,true:为HTML邮件(false则为普通文本邮件)File file = new File(imgPath);// 创建图片文件FileSystemResource resource = new FileSystemResource(file);helper.addInline(imgId, resource);mailSender.send(mimeMessage);// 发送邮件} catch (MessagingException e) {isSend = false;e.printStackTrace();}return isSend;}
}
五、在controller中或service中调用
写到这大家肯定都会写了,下面我以controller为例(具体使用场景肯定不是这样的,我只是给大家举个例子)
@Controller
public class UserController {@AutowiredMailService mailService;@RequestMapping("sendEmail")public String sendMail(ModelMap modelMap) {String[] toUsers={"666666@163.com","777777@163.com"};String[] ccUsers = {"888888@qq.com","999999@163.com"};String isSend=mailService.sendImgMail(toUsers, ccUsers,"测试邮件", "测试内容", "C:\\Users\\Pictures\\dt.jpg", "dt");if(isSend){modelMap.put("isSend", "成功发送给666666@163.com用户");}else{modelMap.put("isSend", "发送失败");}return "index";}
}
六、最后前台调用sendEmail就行了,具体我就不写了。
其他发送邮件功能参考:
SpringBoot发送邮件(一)只有文本的简单邮件:
SpringBoot发送邮件(三)发送带有附件的邮件:
更多推荐
SpringBoot发送邮件(二)发送包含图片的邮件
发布评论