利用SpringBoot集成各类邮箱发送邮件,是一个比较简单的内容,主要有三步:
在第三步中,发送邮件,为了格式好看,是否有附件,像真正的邮件客户端看到的邮件一样格式清晰等,可能需要自己改一改发送内容的格式,比如html格式等。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
在application.yml中添加邮件相关的配置,这里分别罗列几个常用邮件的配置比如QQ邮箱、网易系邮箱、Gmail邮箱。
根据使用不同的邮箱,分别配置到application.yml配置文件中即可,其中application-126.yml、application-163.yml、application-gmail.yml、application-yeah.yml 已经提供了配置样例。
import javax.mail.MessagingException;
public interface IMailService {
/**
* 发送文本邮件
* @param to
* @param subject
* @param content
*/
public void sendSimpleMail(String to, String subject, String content);
public void sendSimpleMail(String to, String subject, String content, String... cc);
/**
* 发送HTML邮件
* @param to
* @param subject
* @param content
* @throws MessagingException
*/
public void sendHtmlMail(String to, String subject, String content) throws MessagingException;
public void sendHtmlMail(String to, String subject, String content, String... cc);
/**
* 发送带附件的邮件
* @param to
* @param subject
* @param content
* @param filePath
* @throws MessagingException
*/
public void sendAttachmentsMail(String to, String subject, String content, String filePath) throws MessagingException;
public void sendAttachmentsMail(String to, String subject, String content, String filePath, String... cc);
/**
* 发送正文中有静态资源的邮件
* @param to
* @param subject
* @param content
* @param rscPath
* @param rscId
* @throws MessagingException
*/
public void sendResourceMail(String to, String subject, String content, String rscPath, String rscId) throws MessagingException;
public void sendResourceMail(String to, String subject, String content, String rscPath, String rscId, String... cc);
}
然后在实现类中,对于每种方法实现其发送方法,写具体业务逻辑封装。
特别说明:
还可以集成邮件模板,邮件也有一个邮件模板的,只需要依赖对应库文件,然后使用对应api可以简单使用,复杂使用也是需要自己定义格式的。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
JavaMailSender mailSender;无法注入问题,这个问题太常见了,错误如下:
No qualifying bean of type ‘org.springframework.mail.javamail.JavaMailSender’ available: expected at least 1 bean which qualifies as autowire candidate
当然这个错误问题肯定有很多原因的,比如扫描不到这个类、配置不对等其它各种原因。
怎么解决?必须先搞清楚原因
打开springboot调试模式观察debug输出,查看JavaMailSender这个类的注入日志,就是吧debug模式打开,看看啥问题。
public static void main(String[] args) {
SpringApplication.run(Application.class, "--debug");
}
正常情况下如上,在启动类中把debug模式打开就可以了,先确定问题。
我遇到的问题是扫描到了就是无法注入的情况。各种百度无果,谷歌找了好久终于知道
出错原因:
加载 JavaMailSender 对象到容器,需要根据配置文件中的配置作为参数初始化,也就是说在application.yml文件中有没有配置发送的邮箱,且有没有配置正确。
但是在错误日志里面我们确实看不出来错误原因的。
部分错误日志如下:
参考其它博客:
当前项目源代码下载
SpringBoot集成各类邮箱进行邮件发送Demo