UTL_SMTP.WRITE_RAW_DATA 이용시 RAW타입의 용량문제 1 1 1,939

by zbra [PL/SQL] UTL_SMTP WRITE_RAW_DATA [2022.11.24 17:20:07]


커서를 이용하여 추출한 데이터에 HTML을 앞뒤로 붙여 메일로 발송하는 프로시져를 짜고있습니다.

HTML 태그가 일정 길이를 초과하면 PL/SQL: numeric or value error 가 발생됩니다.

내용을 찾아보니 RAW 타입의 최대값(32,767BYTE) 32KB가 넘어가면 발생되는 오류로 확인됩니다.

RAW타입의 최대값 단위로 끊어서 전송을 하거나 혹은 다른방법이 있을까요~?
 

    V_HTML   CLOB;

    C := UTL_SMTP.OPEN_CONNECTION(V_HOST, V_PORT);
    UTL_SMTP.HELO(C, V_HOST);
    UTL_SMTP.MAIL(C, V_FROM);
    UTL_SMTP.RCPT(C, V_EMAIL);
      
    UTL_SMTP.OPEN_DATA(C); -- 메일본문 작성 시작
    UTL_SMTP.WRITE_DATA(C,'MIME-Version: 1.0' || UTL_TCP.CRLF ); -- MIME 버전
    UTL_SMTP.WRITE_DATA(C,'Content-Type: text/html; charset="utf-8"' || UTL_TCP.CRLF);
    UTL_SMTP.WRITE_RAW_DATA(C, UTL_RAW.CAST_TO_RAW('Date:'|| TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') || UTL_TCP.CRLF));
    
    UTL_SMTP.WRITE_RAW_DATA(C, UTL_RAW.CAST_TO_RAW('From: "발신자 <"'||V_FROM||'>' || UTL_TCP.CRLF));  
    UTL_SMTP.WRITE_RAW_DATA(C, UTL_RAW.CAST_TO_RAW('To: "'||V_CUSTNAME||' <"'||V_EMAIL||'>' || UTL_TCP.CRLF));  
    UTL_SMTP.WRITE_RAW_DATA(C, UTL_RAW.CAST_TO_RAW('Subject: '||V_MONTH||'월 명세서' || UTL_TCP.CRLF)); 
    UTL_SMTP.WRITE_DATA(C, UTL_TCP.CRLF );

    UTL_SMTP.WRITE_RAW_DATA(C, UTL_RAW.CAST_TO_RAW(V_HTML || UTL_TCP.CRLF));  --메일 Contents

    UTL_SMTP.CLOSE_DATA(C); -- 메일 본문 작성 종료
    UTL_SMTP.QUIT(C);  -- 메일 세션 종료  

 

by zbra [2022.11.28 14:59:07]
PROCEDURE...
  TYPE TMailBody IS TABLE OF VARCHAR2(32767); 
  VMailBody TMailBody; 
BEGIN 
  FOR I IN 1..CURSORDATA 
  LOOP 
    VMAILBODY.EXTEND; 
    VMAILBODY(I) := 'html'; 
  END LOOP; 

... 

  FOR I IN 1..VMAILBODY.COUNT 
  LOOP 
    UTL_SMTP.WRITE_RAW_DATA(c, UTL_RAW.CAST_TO_RAW(VMAILBODY(I) || UTL_TCP.CRLF)); 
  END LOOP; 
END;

 

생각보다 단순하게 조치해서 처리하였습니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입