You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Spring Boot调用邮件API实现向干系人发送邮件功能

现有代码存在的问题
  • 注解使用错误:@PostMapping 是用来定义你自身服务提供的接口路径,你把第三方邮件API的完整地址填到了这里,属于完全误用,这个注解修饰的方法本身也没有存在的必要。
  • 请求地址错误:你拼接的调用URI是localhost:8080/api/拼接第三方地址,会把请求发到你自身的Spring Boot服务,根本没有指向真实的第三方邮件服务地址10.233.201.246:7070。
  • 请求方法不匹配:根据Postman的展示,第三方邮件API要求使用POST请求调用,你现在用了RestTemplate.getForObject()发GET请求,方法完全不匹配。
  • 参数传递错误:你定义的邮件参数全部没有传递给第三方API,getForObject的第三个参数是用来填充URL路径占位符的,你传sendEmail()的返回值null完全无效,也没有把邮件参数封装到请求体中。
  • 资源使用不合理:每次请求都new一个RestTemplate实例,会造成不必要的资源浪费,应该使用单例注入的RestTemplate。
修复方案

1. 定义邮件参数实体类

用来封装传递给第三方API的请求体参数,没有Lombok可以手动添加getter、setter方法。

import lombok.Data;

@Data
public class EmailRequest {
    private String to;
    private String from;
    private String subject;
    private String message;
    private String cc;
}

2. 配置单例RestTemplate

在配置类或者启动类中注入RestTemplate Bean,避免重复实例化。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

3. 调整业务接口代码

移除无用的sendEmail方法,正确调用第三方邮件API。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;

@RestController
public class EmailController {
    @Resource
    private RestTemplate restTemplate;
    // 第三方邮件API地址,建议后续放到application.yml配置文件中
    private static final String THIRD_PARTY_EMAIL_API = "http://10.233.201.246:7070/VGIL/postal/email";

    @GetMapping("/sendEmail")
    public String postEmailToStakeholders(){
        // 封装邮件请求参数
        EmailRequest request = new EmailRequest();
        request.setTo("karim@gamil.com");
        request.setFrom("helen@gmail.com");
        request.setSubject("Log files processing");
        request.setMessage("The logs files has been created successfully");
        request.setCc("baldemtaga@gmail.com");
        
        // 发送POST请求调用第三方接口
        return restTemplate.postForObject(THIRD_PARTY_EMAIL_API, request, String.class);
    }
}

可选优化

  • 把邮件参数、第三方API地址配置到application.yml中,避免硬编码,方便后续调整
  • 增加异常捕获逻辑,处理第三方接口调用超时、返回错误的场景,返回友好提示
  • 如果第三方接口需要鉴权、自定义请求头,可以用HttpEntity同时封装请求头和请求体再调用

内容的提问来源于stack exchange,提问作者BALDE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:36:00