IT스러운 공간

SAP E-mail (첨부파일 포함) 전송 로직 및 설정 본문

SAP

SAP E-mail (첨부파일 포함) 전송 로직 및 설정

nanaing 2024. 1. 19. 22:45
728x90

외부로 메일 전송할 수 있는 로직

 - FUNCTION보다는 CLASS로 사용하도록 SAP에서 권장

예제 샘플) BCS_EXAMPLE_7

 

1. 메일 설정 SMTP

- T-CODE : SCOT

- 방화벽 해제 및 발신하는 메일 서버의 SMTP 릴레이 설정 필요

 

2. E-Mail 전송 로직

FORM SEND_EXT_MAIL.
  " 1) 변수 선언
  DATA : BCS_EXCEPTION        TYPE REF TO CX_BCS,
         CL_SEND_REQUEST      TYPE REF TO CL_BCS,
         CL_DOCUMENT          TYPE REF TO CL_DOCUMENT_BCS,
         CL_RECIPIENT         TYPE REF TO IF_RECIPIENT_BCS,
         ATTACHMENT_SUBJECT   TYPE SOOD-OBJDE,        "첨부파일 헤더 구조
         SOOD_BYTECOUNT       TYPE SOOD-OBJLEN,
         SIZE                 TYPE SO_OBJ_LEN,
         MAIL_TITLE           TYPE SO_OBJ_DES,        "메일제목
         T_MAILTEXT           TYPE SOLI_TAB,            "메일본문
         WA_MAILTEXT          LIKE LINE OF T_MAILTEXT,
         SENDER               TYPE REF TO CL_SAPUSER_BCS,
         SEND_TO              TYPE ADR6-SMTP_ADDR,
         SENT                 TYPE ABAP_BOOL,            "전송유무
         BINARY_CONTENT       TYPE SOLIX_TAB,
         ERRORTEXT            TYPE STRING.            "에러메시지

  DATA : TEXT_CONTENT         TYPE STRING.            "첨부파일 내용
  DATA : LT_MAIL              LIKE ZSMAIL OUCCURS 0 WITH HEADER LINE.    "수신자 리스트

  CONSTANTS : CON_TAB         TYPE C VALUE CL_BCS_CONVERT=>GC_TAB,    "TAB 상수
              CON_CRLF        TYPE C VALUE CL_BCS_CONVERT=>GC_CRLF.    "엔터

  " 2) 메일 헤더 및 내용 구성, 첨부파일 헤더 및 내용 구성
  MAIL_TITLE = '메일 제목'.
  
  WA_MAILTEXT = '메일 본문 1'.
  APPEND WA_MAILTEXT TO MAILTEXT.
  CLEAR WA_MAILTEXT.

  WA_MAILTEXT = '메일 본문 2'.
  APPEND WA_MAILTEXT TO MAILTEXT.
  CLEAR WA_MAILTEXT.

  CONCATENATE '첨부파일 제목' INTO ATTACHMENT_SUBJECT.

  " 엑셀 HEADER 만들기
  CONCATENATE '헤더1' CON_TAB
              '헤더2' CON_TAB
              '헤더3' CON_CRLF
              INTO TEXT_CONTENT.

  " 엑셀 본문 만들기
  CONCATENATE TEXT_CONTET
              '본문1' CON_TAB
              '본문2' CON_TAB
              '본문3' CON_CRLF
              INTO TEXT_CONTENT.     

   " 3) 수신자 리스트(수신자 여러 명일 경우)
   " INTERNAL TABLE 및 수신자 리스트 로직
   LT_MAIL-NAME = '홍길동'.
   LT_MAIL-EMAIL = 이메일주소.

   APPEND LT_MAIL TO LT_MAIL[].

   " 4) 메일 전송 세팅
   TRY.
      CL_SEND_REQUEST = CL_BCS=>CREATE_PERSISITENT( ).

      "메일 제목 및 본문
      CL_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
                      I_TYPE        = 'RAW'
                      I_TEXT        = T_MAILTEXT
                      I_SUBJECT    = MAIL_TITLE ).

      "첨부파일 추가 로직
      TRY.
          CL_BCS_CONVERT=>STRING_TO_SOLIX(
              EXPORTING
                  IV_STRING   = TEXT_CONTENT
                  IV_CODEPAGE = '4103'    "MS
                  IV_ADD_BOM  = 'X'
              IMPORTING
                  ET_SOLIX = BINARY_CONTENT
                  EV_SIZE  = SOOD_BYTECOUNT ).
       CATCH CX_BCS.
          MESSAGE E445(S0).
       ENDTRY.

       CL_DOCUMENT->ADD_ATTACHMENT(
          I_ATTACHMENT_TYPE     = 'XLS'
          I_ATTACHMENT_SUBJECT = ATTACHMENT_SUBJECT
          I_ATTACHMENT_SIZE    = SOOD_BYTECOUNT
          I_ATTACHMENT_HEADER  = T_ATTCHMENT_HEADER ).

       CL_SEND_REQUEST->SET_DOCUMENT( CL_DOCUMENT ).

       "메일 발신자
       SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ).
       CL_SEND_REQUEST->SET_SENDER( I_SENDER = SENDER ).

       "메일 수신자(다 건 가능)
       LOOP AT LT_RECEIVER INTO DATA(LS_RECEIVER).
          CLEAER SEND_TO.

          SEND_TO = LS_RECEIVER-EMAIL.
          CL_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNAT_ADDRESS( SEND_TO ).

          CL_SEND_REQUEST->ADD_RECIPIENT(
              I_RECIPIENT = CL_RECIPIENT
              I_EXPRESS   = 'X' ).
       ENDLOOP.

       "메일 발송
       DATA: STATUS_MAIL TYPE BCS_STML.
       STATUS_MAIL = 'N'.

       CL_SEND_REQUEST->SET_STATUS_ATTRIBUTES(
          I_REQUESTED_STATUS = STATUS_MAIL
          I_STATUS_MAIL      = STATUS_MAIL ).

       "즉시발송 유무
       CL_SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ).

       SENT= CL_SEND_REQUEST->SEND(I_WITH__ERROR_SCREEN = 'X' ).

       IF SENT = 'X'.
          MESSAGE S001 WITH SEND_TO '로 발송되었습니다.'.
        ENDIF.

       COMMIT WORK.

   CATCH CX_BCS INTO BCS_EXCEPTION.
     ERRORTEXT = BCS_EXCEPTION->IF_MESSAGE~GET_TEXT( ).

     MESSAGE ERRORTEXT TYPE 'I'.

   ENDTRY.
 ENDFORM.
728x90

'SAP' 카테고리의 다른 글

SAP ABAP 날짜 관련 함수(function)  (0) 2024.01.25
SAP ABAP으로 Excel 열을 텍스트로 형식 지정  (0) 2024.01.22
SAP Session 메모리 관리  (0) 2024.01.21