SpringBoot集成各类邮箱进行邮件发送

主要内容

利用SpringBoot集成各类邮箱发送邮件,是一个比较简单的内容,主要有三步:

  • 添加邮件相关Starter模块依赖
  • 添加Spring Boot配置(QQ/网易系/Gmail)
  • 调用JavaMailSender接口发送邮件

必备知识点

在第三步中,发送邮件,为了格式好看,是否有附件,像真正的邮件客户端看到的邮件一样格式清晰等,可能需要自己改一改发送内容的格式,比如html格式等。

  • 难点在第二步中需要配置使用的邮箱配置,而对于各个邮箱的配置又需要搞清楚各个协议及部分名词的解释和使用【POP3、SMTP和IMAP、授权码、免费邮箱功能、开通协议方式】

添加Starter模块依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

添加Spring Boot配置

在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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Spring Boot集成邮箱验证码功能,你可以按照以下步骤进行操作: 1. 在项目的pom.xml文件中添加mail模块的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> ``` 这样就可以使用Spring Boot提供的邮件功能了。\[1\] 2. 在配置文件(application.properties或application.yml)中填写相关的邮箱配置,例如使用163邮箱: ```properties # Mail spring.mail.host=smtp.163.com spring.mail.username=your-email@163.com spring.mail.password=your-password spring.mail.default-encoding=UTF-8 mail.from=your-email@163.com ``` 其中,`spring.mail.host`是SMTP服务器地址,`spring.mail.username`和`mail.from`是你的邮箱地址,`spring.mail.password`是你的邮箱授权码(不是邮箱密码)。你需要在相关邮箱设置中开启SMTP服务,并获取授权码。\[2\]\[3\] 3. 在你的代码中使用JavaMailSender发送邮件,可以通过注入`JavaMailSender`对象来实现: ```java @Autowired private JavaMailSender javaMailSender; public void sendVerificationCode(String email, String code) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(email); message.setSubject("验证码"); message.setText("您的验证码是:" + code); javaMailSender.send(message); } ``` 以上代码示例中,`sendVerificationCode`方法用于发送验证码邮件,其中`email`是收件人邮箱地址,`code`是验证码内容。你可以根据实际需求自定义邮件的主题和内容。 这样,你就可以在Spring Boot集成邮箱验证码功能了。记得替换相关配置为你自己的邮箱信息。 #### 引用[.reference_title] - *1* *2* *3* [Spring Boot 整合163或者qq邮箱发送验证码](https://blog.csdn.net/hghjgkjn/article/details/125952509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值