Java Mailgun API:使用Spring';RESTS模板

Java Mailgun API:使用Spring';RESTS模板,java,spring,multipartform-data,resttemplate,mailgun,Java,Spring,Multipartform Data,Resttemplate,Mailgun,目标是发送带有内联图像的电子邮件。除了图像没有出现在电子邮件中之外,一切正常 我的方法是基于此示例的 publicstaticclientresponse SendInlineImage(){ Client=Client.create(); addFilter(新的HTTPBasicAuthFilter(“api”), “您的API密钥”); 网络资源网络资源= 客户端资源(“https://api.mailgun.net/v3/YOUR_DOMAIN_NAME" + “/信息”); FormD

目标是发送带有内联图像的电子邮件。除了图像没有出现在电子邮件中之外,一切正常

我的方法是基于此示例的

publicstaticclientresponse SendInlineImage(){
Client=Client.create();
addFilter(新的HTTPBasicAuthFilter(“api”),
“您的API密钥”);
网络资源网络资源=
客户端资源(“https://api.mailgun.net/v3/YOUR_DOMAIN_NAME" +
“/信息”);
FormDataMultiPart form=新FormDataMultiPart();
表单字段(“发件人”、“兴奋用户”);
表单字段(“到”baz@example.com");
表单字段(“主题”、“你好”);
字段(“文本”,“测试一些邮枪的威力!”);
字段(“html”,“此处内联图像:”);
File jpgFile=新文件(“files/test.jpg”);
form.bodyPart(新文件DatabodyPart(“内联”),jpgFile,
MediaType.APPLICATION_OCTET_STREAM_TYPE));
返回webResource.type(MediaType.MULTIPART\u FORM\u DATA\u type)。
post(ClientResponse.class、form);
}
但是,我需要使用Spring的RestTemplate

到目前为止,我得到的是:

RestTemplate template = new RestTemplate();

MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
// ... put all strings in map (from, to, subject, html)

HttpHeaders headers = new HttpHeaders();
// ... put auth credentials on header, and content type multipart/form-data

template.exchange(MAILGUN_API_BASE_URL + "/messages", HttpMethod.POST,
        new HttpEntity<>(map, headers), String.class);
RestTemplate=new RestTemplate();
MultiValueMap=新链接的MultiValueMap();
// ... 将所有字符串放入映射(从、到、主题、html)
HttpHeaders=新的HttpHeaders();
// ... 在标题和内容类型多部分/表单数据上放置身份验证凭据
template.exchange(MAILGUN\u API\u BASE\u URL+“/messages”,HttpMethod.POST,
新的HttpEntity(映射,标题),String.class);
剩下的部分是将
*.png
文件放入地图中。我不知道该怎么做。已尝试通过ServletContextResource#getInputStream读取其所有字节,但未成功:生成的电子邮件中未显示图像


我是不是遗漏了什么

事实证明,在这种情况下,一切都设置正确,但只有一个小细节阻止了它的工作

map.add("inline", new ServletContextResource(this.servletContext,   
    "/resources/images/email-banner.png"));
对于Mailgun,您需要使用映射键“inline”。另外,
ServletContextResource
有一个方法
getFilename()
,用于根据图像标记进行解析。因此,图像标签应具有以下内容id:

<img src="cid:email-banner.png"/>

<img src="cid:email-banner.png"/>