MAIL로 첨부파일 JPG를 보내는 과정에서의 문제들
먼저, 로직을 설명하고자 한다
상품 구매 (MEMBER) -> 구매완료 상태로 변경, 검증 (PRODUCT) -> 검증 이후, MEMBER에서 MEMBER의 정보 변경-> 그 이후! 카카오로 로그인 한 대상이 아닌 경우 Mail을 전송한다.
이 'MAIL로 판매자가 GCP에 등록했던 URL의 파일을 첨부파일로 구매자에게 보내는 과정'에서 배운 점들을 정리하고자 한다.
가장 문제가 많이 생긴 부분 .
MULTIFILEEXCPETION이 가장 큰 문제가 되었다.
이를 해결위해 CTRL+ENTER(내가 가장 주로 사용하는 방법이다), 그리고 웹을 열심히 활용했다.
URL url = new URL(productRepository.findImageRealByProductId(paymentsReqList.get(i).getProduct_id()));
->이를 InputStreamResource로 변경하여 attachment에 추가하는 형태
와 같이 구현하였고, 문제가 계속해서 발생하였다.
해결한 방법
가장 먼저, URL을 통해 해당 PRODUCT 내부에 있는 정보의 URL을 받아온다.
해당 URL의 정보를 BYTE배열로 변경한다.
그 이후 해당 BYTEARRAYRESOURCE를 dataSource라는 객체에 넣는다.
이 datasource객체의 정보를, mimemessagehelper라는 객체를 통해 메일의 첨부파일에 넣는다!
배운 것
URL: 해당 정보는 String과 같이 표현되지만, url이라는 것을 명확하게 전달하는 객체이다.
byte[] -> toByteArray :
URLCONNECITON을 통해 URL을 열고, 해당 정보를 바이트 배열로 변환하여준다.
이전, MYSQL에 직접 IMAGE를 BLOB으로 넣는 테스트를 했었는데, 이때도 이미지 파일을 이와 같은 형태로 변경하여 저장하였다.
Datasource:
DataSource dataSource = new ByteArrayDataSource(imageData, "image/jpeg");
인터페이스이다. 인터페이스는 모델 간의 추상층을 분리한 역할을 한다는 개념을 기억하자.
addAttachment
mimeMessageHelper.addAttachment("darakbang.jpg", dataSource);
바로 이곳에서, datasource interface가 인스턴스화 된 객체를 활용한다.