본문 바로가기
카테고리 없음

[SpringBoot] JavaMailSender를 이용한 SMTP 발송 테스트 진행 2- addInline으로 img src 포함

by Hwoarang757 2023. 11. 1.

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";
    }

 

테스트로 수신한 내역 확인 하였습니다.