描述:在网上找了很多方法实现,结果总是出现各种问题,解决了一个又冒出来新问题(汗),我将我的步骤写出来希望可以帮到需要的人
注意:我的代码中的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抽风了