前言:使用发邮件这个功能不难,但是也有一些坑,下面我把开发邮件功能总结了一下分享给大家,同时为了避免篇幅过长,导致大家看的不仔细或看一半不想看了,我将这个功能细分了一下,写了好几篇供大家各取所需。
Spring mail提供了 JavaMailSender接口实现邮件发送,其底层还是javamail,不过是进一步封装变得更加易用了。下面通过实例看看如何在Spring Boot中使用 JavaMailSender 发送邮件。
一、引入maven依赖
org.springframework.boot
spring-boot-starter-mail
二、开启POP3/SMTP服务
把这个写在第二步,是因为很多没做过发送邮件的可能不知道需要开启这个才能使用第三方程序来发邮件,并且生成的授权码下面也要用到。
三、配置application.properties文件
spring.mail.host=smtp.qq.com --qq邮箱为smtp.qq.com 163邮箱为smtp.163.com
[email protected] --自己定义的发送者账号
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 {
@Autowired
private 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 = "" + text + "" + "";
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 {
@Autowired
MailService mailService;
@RequestMapping("sendEmail")
public String sendMail(ModelMap modelMap) {
String[] toUsers={"[email protected]","[email protected]"};
String[] ccUsers = {"[email protected]","[email protected]"};
String isSend=mailService.sendImgMail(toUsers, ccUsers,"测试邮件", "测试内容", "C:\\Users\\Pictures\\dt.jpg", "dt");
if(isSend){
modelMap.put("isSend", "成功发送给[email protected]用户");
}else{
modelMap.put("isSend", "发送失败");
}
return "index";
}
}
六、最后前台调用sendEmail就行了,具体我就不写了。
其他发送邮件功能参考:
SpringBoot发送邮件(一)只有文本的简单邮件:https://blog.csdn.net/m0_37679452/article/details/84345616
SpringBoot发送邮件(三)发送带有附件的邮件:https://blog.csdn.net/m0_37679452/article/details/84561402