1、需求:建立邮件发送中间建,转发邮件,以此跳过网闸。
1、邮件服务器部分:
https://blog.csdn.net/qq_22850319/article/details/111179153
2、java post请求
public static Long sendGxMail(EmailRecords emailRecords,List<MultipartFile> uploadFiles) {
try {
String key = "";
if(uploadFiles != null && uploadFiles.size() > 0) {
key = SendMailUtils.sendFileTo(uploadFiles);
}
String val = SendMailUtils.sendGxMail(emailRecords,key);
return 200L;
} catch (Exception e) {
e.printStackTrace();
return 400L;
}
}
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import com.gdgxkj.support.utils.FastjsonUtils;
import com.thinkgem.jeesite.common.config.Global;
import com.thinkgem.jeesite.common.utils.StringUtils;
import com.thinkgem.jeesite.modules.lgslt.entity.EmailRecords;
import com.thinkgem.jeesite.modules.lgslt.entity.MultipartFileResource;
import net.sf.json.JSONObject;
/**
* 发送文件
*/
public static String sendFileTo(List<MultipartFile> multipartFiles) {
String url = "http://xxxx/xxxx/xxx/file"; //服务器url
ByteArrayResource byteArrayResource;
RestTemplate restTemplate = restTemplate(); //附件传过去中午附件名会乱码,需要处理
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); //设置编码
try {
MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
for (MultipartFile multipartFile : multipartFiles) {
byteArrayResource = new MultipartFileResource(multipartFile);
form.add("files", byteArrayResource);//放入附件
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(form, headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); //发送请求
if(response.getStatusCode() == HttpStatus.OK) {
JSONObject json = JSONObject.fromObject(response.getBody());
return json.getString("data");
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 发送邮件
* */
public static String sendGxMail(EmailRecords emailRecords,String key) {
Map<String, String> map = new HashMap<String, String>();
map.put("title",emailRecords.getTheme());
map.put("content", emailRecords.getContent());
map.put("sendTo", emailRecords.getEmailAccount());
if(StringUtils.isNotBlank(key)) {
map.put("fileKey", key);
}
String params = FastjsonUtils.toJSONString(map); //基本参数
String url = Global.getConfig("mailServerUrl")+"sendMail"; //url
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity<String> requestEntity = new HttpEntity<String>(params,headers);
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class); //发送请求
if(response.getStatusCode() == HttpStatus.OK) {
return response.getBody();
}
return null;
}
RestTemplate spring工具,发送MultipartFile 接收后中文附件名会乱码 (???.doc)
需要进行处理,设置编码:
https://blog.csdn.net/vacherf/article/details/80536326
public static RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
for (Iterator<HttpMessageConverter<?>> iterator = list.iterator(); iterator.hasNext(); ) {
HttpMessageConverter item = iterator.next();
if (item instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) item).setDefaultCharset(StandardCharsets.UTF_8);
} else if (item instanceof FormHttpMessageConverter) {
((FormHttpMessageConverter) item).setCharset(StandardCharsets.UTF_8);
((FormHttpMessageConverter) item).setMultipartCharset(StandardCharsets.UTF_8);
}
}
restTemplate.setMessageConverters(list);
return restTemplate;
}