![](/img/trans.png)
[英]I got the SSLHandshakeException by using Spring Boot Mail Sender
[英]I cant test my Spring Boot mail sender API by Postman
我无法通过 Postman 测试我的 Spring Boot 邮件发件人 API。 我想用spring boot创建一个api并发送邮件。 为此,我在下面分享了应用程序属性、服务和控制器类。 但是当我通过邮递员提供 url 并将 json body 添加到 post 方法时,我收到错误消息。 我该如何解决?
邮递员回复
{
"timestamp": "2020-10-29T15:26:23.300+00:00",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/mail/send"
}
邮递员测试参数
url: http://localhost:8080/mail/send
method: post
JSON body:
{
"to" : "mail@gmail.com",
"textBody" : "TEST",
"topic" : "TEST"
}
应用属性
spring.mail.default-encoding=UTF-8
spring.mail.host=smtp.gmail.com
spring.mail.username=mail@gmail.com
spring.mail.password=password
spring.mail.port=587
spring.mail.protocol=smtp
spring.mail.test-connection=false
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
服务等级
@Service
public class SendEmailService {
@Autowired
private JavaMailSender javaMailSender;
public void sendEmail(String to, String body, String topic){
try {
System.out.println("Mail sending is started");
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom("mutlueren01@gmail.com");
simpleMailMessage.setTo(to);
simpleMailMessage.setSubject(topic);
simpleMailMessage.setText(body);
javaMailSender.send(simpleMailMessage);
System.out.println("Mail sending is completed");
}catch (Exception e){
System.out.println("Error occured: "+e.getMessage());
}
}
}
控制器
@Controller
public class SendEmailController {
@Autowired
SendEmailService sendEmailService;
@RequestMapping(value = "/mail/send/", method = RequestMethod.POST)
public void sendMail(@RequestParam("to") String to, @RequestParam("textBody") String textBody, @RequestParam("topic") String topic) {
sendEmailService.sendEmail(to, textBody, topic);
}
}
问题出在控制器中。 您正在发送请求正文(json),但试图处理请求参数。 阅读差异。
我建议创建一个类:
public class EmailSendingRequest {
String to;
String textBody;
String topic;
//... getters, setters
}
并按如下方式更改您的控制器方法:
@RequestMapping(value = "/mail/send", method = RequestMethod.POST)
public void sendMail(@RequestBody EmailSendingRequest emailSendingRequest) {
sendEmailService.sendEmail(emailSendingRequest.getTo(),
emailSendingRequest.getTextBody(), emailSendingRequest.getTopic());
}
PS 或者你可以发送带有请求参数的请求并且不要改变任何东西 - 像http://localhost:8080/mail/send?to=mail@gmail.com&textBody=TEST&topic=TEST
,但我不确定这是否是个好主意。
该错误代码表示您要访问不存在的资源。 尝试更改以下注释:
@RequestMapping(value = "/mail/send/", method = RequestMethod.POST)
到
@RequestMapping(value = "/mail/send", method = RequestMethod.POST)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.