导入依赖
spring-boot版本为2.3.2.RELEASE
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
发送邮件服务
//-----------------------------------service组件
@Service
public class SendMail {
//如果使用yaml配置必须使用spring的依赖注入,不能new JavaMailSenderImpl
@Autowired
private JavaMailSender javaMailSender;
public String sendMail(){
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom("这里要与配置文件用户名一致@163.com");//发送者
msg.setTo("xxxxx@qq.com");//接收者
msg.setSubject("spring测试");//主题
msg.setText("你好这是一个测试!");//文本内容
try {
//开始发送邮件
javaMailSender.send(msg);
return "发送成功!";
}catch (Exception exception){
System.out.println(exception.toString());
}
return "发送失败!";
}
}
//--------------------------------controller
@RestController
@RequestMapping("/hello")
public class HelloControler {
@Autowired
SendMail sendMail;
@RequestMapping("/sayHello")
public String Hello(){
return "Hello,World!";
}
@RequestMapping("/sendMail")
public String sendMail(){
return sendMail.sendMail();
}
}
结果
注意事项
#1、配置方法1(win下和linux下都正常运行)
spring:
mail:
host: smtp.163.com
username: xxxxxxx@163.com用户名要与代码里的发送方一致
password: 你申请开启smtp服务时给你的授权码
default-encoding: utf-8
port: 465
properties:
mail:
#开启调式模式,会有信息在控制台输出
debug: true
smtp:
#开启权限认证
auth: true
ssl:
#启用ssl协议,端口配置465就必须要启用
enable: true
#要配置与端口对应的协议。
protocol: smtps
#2、配置方法2(在linux运行会用25端口,然后超时。可能与端口禁用有关)
spring:
mail:
host: smtp.163.com
username: xxxxxxx@163.com用户名要与代码里的发送方一致
password: 你申请开启smtp服务时给你的授权码
default-encoding: utf-8
properties:
mail:
#开启调式模式,会有信息在控制台输出
debug: true
smtp:
auth: true
starttls:
enable: true
required: true
可能会遇见的问题
- Got bad greeting from SMTP host: smtp.163.com, port: 465, response: [EOF]
在配置文件中配置了端口没有配置与之对应的协议,参考配置方式1的
protocol: smtps
- org.springframework.mail.MailSendException: Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn’t connect to host, port: smtp.163.com, 25; timeout -1;
出现这个问题先调出你的控制台输入
ping smtp.163.com
,看是否可以ping通。如果可以网络就没问题。然后看你配置文件的字符串里面是不是少了一个.
或者多了个空格。这个我遇见过不过我的比较特殊,我没有使用@Autowirde
注入spring生成的bean,而是直接new JavaMailSenderImpl
,这时候他就读取不了配置文件里面的配置信息,所以找不到host
- org.springframework.mail.MailAuthenticationException:
Authentication failed; nested exception is javax.mail.AuthenticationFailedException:
535 Error: authentication failed
这个是你的授权码错误,配置文件里的
password:
不是你的账户密码,而是授权码。授权码不晓得怎么获取的参考outLook2019配置qq邮箱,要是smtp服务都没开启,随便开一个就行。