SpringBoot:实现发送邮件的功能

描述:在网上找了很多方法实现,结果总是出现各种问题,解决了一个又冒出来新问题(汗),我将我的步骤写出来希望可以帮到需要的人

注意:我的代码中的xxx和password都是要改成每个人自己的,如果不用qq邮箱而使用其他邮箱,记得要将host的qq.com改成自己使用的邮箱后缀

1.配置邮箱,这里以QQ邮箱为例

打开设置,账号,在服务状态那一栏打开服务,完成后会生成一串授权码,将授权码保存好

2.打开IDEA,选择项目的maven配置文件,引入相关依赖

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

3.打开项目配置文件,并将下面的内容配置好

spring:
  mail:
    host: smtp.qq.com 
    port: 25
    username: xxxx@qq.com
    password: 之前获取的授权码

按照常理来说,之后只要将控制类写好就可以使用了,我们可以使用测试类做一个测试

@SpringBootTest
class NewbeeApplicationTests {

    @Autowired
    JavaMailSenderImpl mailSender;

    @Test
    void sendMail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject("test");
        message.setFrom("xxxxxxxxxx@qq.com");
        message.setTo("xxxxxxxxxx@qq.com");
        message.setText("可以");
        mailSender.send(message);
    }
}

from就是你授权的邮箱,to就是你想发送到的邮箱,可以两个相同,这样就是自己给自己发一封邮件。好了接下来运行测试类,如果能够正常发送,那到这里就可以结束了。

网上常规的这样也是可以正常运行的,但是我不能正常运行,再重新编写一个测试类找找问题

@SpringBootTest
class DemoApplicationTests {
	@Autowired
	JavaMailSenderImpl javaMailSenderImpl;

	@Test
	void sendMail() {
		String host = javaMailSenderImpl.getHost();
		System.out.println(host);
	}
}

正常情况下输出应该是smtp.qq.com,但我的输出是null,说明配置文件没有生效,具体的原因我还没有找到,可能和版本问题有关,所以只能自己编写一个配置类来实现了

package com.example.newbee.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;

/**
 * ClassName: emailConfig
 * Package: com.example.newbee.config
 *
 * @author qqq
 * @date 2024/3/2
 */
@Configuration
public class emailConfig {
    @Bean
    public JavaMailSenderImpl mailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.qq.com"); // 设置SMTP服务器地址
        mailSender.setUsername("xxxxxxxxxxx@qq.com"); // 设置邮箱用户名
        mailSender.setPassword("xxxxxxxxxx"); // 设置授权码
        mailSender.setPort(25); // 设置端口号,默认为25
        mailSender.setProtocol("smtp"); // 设置邮件协议,默认为smtp
        // 可以设置其他属性,例如超时时间、默认编码等
        return mailSender;
    }
}

创建这样一个配置类,重新运行测试类,输出的内容是smtp.qq.com,说明这次的配置生效了,再发送一次邮件,发现没有任何问题,就可以正常使用了。

在这个过程中还发生了一个很抽象的问题,我将测试类的代码copy到控制类中,它居然不能正常发送邮件了,我又在控制类中重打了一遍代码,又可以发送邮件了???只能将问题归结于IDEA抽风了

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值