MimeMessageHelper 개체의 setText를 먼저 호출 한 후 (본문 설정)
addInline 메서드를 호출 해야 정상적으로 이미지가 Mime 타입으로 변환되어 전송 되었습니다.
Http의 URL의 이미지를 다운로드 받아 , img src 태그의 값을 cid:id로 형태로 변경 하고 이미지 파일을 첨부 하였습니다.
@GetMapping("/MailSendTest")
public String MailSendTest(@RequestParam HashMap<String,String> param) {
String methodName = new Exception().getStackTrace()[0].getMethodName();
logger.info(methodName);
try {
String from = "lionking7@test.com";
String to = "lionking7@test.com";
String subject = "SMTP 발송 테스트 진행";
StringBuffer sb = new StringBuffer();
sb.append("<html><head></head><body><p style='font-size:30px'>MIME Message 테스트</p>");
sb.append("<img src='http://localhost:38080/img/400_500.jpg' />"); // 이미지 태그 포함 테스트 진행
sb.append("<br />"); // 이미지 태그 포함 테스트 진행
sb.append("<img src='http://localhost:38080/img/500_400.jpg' />"); // 이미지 태그 포함 테스트 진행
sb.append("</body></html>");
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeHelper = new MimeMessageHelper(mimeMessage , true , "UTF-8");
mimeHelper.setFrom(from);
mimeHelper.setTo(to);
mimeHelper.setSubject(subject);
// HTML 의 이미지 처리 변경
Document doc = Jsoup.parse(sb.toString());
// 본문을 먼저 설정 해야 이미지가 첨부 됨 -_-; ) SetText를 먼저해야 함
HashMap<String,String> imgUrlMap = new HashMap<>();
int[] imgIdx = {0};
doc.getElementsByTag("img").stream().forEach(a -> {
String imgURL = a.attr("src");
String imgCid = String.format("imgID%d" , imgIdx[0]);
imgUrlMap.put(imgCid , imgURL);
//img src 값 수정
a.attr("src",String.format("cid:%s", imgCid));
imgIdx[0]++;
});
// 본문 설정 처리 진행 ( img src 변경 )
mimeHelper.setText(doc.toString() , true);
imgUrlMap.forEach((key,val) -> {
try {
// 이미지 첨부 진행
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(val);
CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
try(InputStream inputStream = httpResponse.getEntity().getContent();) {
DataSource dataSource = new ByteArrayDataSource(inputStream, "image/jpeg");
mimeHelper.addInline(key , dataSource);
}
} catch(Exception exception) {
logger.error(methodName,exception);
}
});
logger.info(doc.toString());
logger.info(mailSender.getHost());
logger.info(mailSender.getPort());
mailSender.send(mimeMessage);
} catch(Exception exception) {
logger.error(exception);
}
return "SUCCESS";
}
테스트로 수신한 내역 확인 하였습니다.