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] SAP JCo(SAP Java Connector) (1) | 2025.04.13 |
---|---|
[SAP] SAP Calculation View (0) | 2025.04.12 |
[SAP] SAP ABAP 날짜 관련 함수(function) (0) | 2024.01.25 |
[SAP] SAP ABAP으로 Excel 열을 텍스트로 형식 지정 (0) | 2024.01.22 |
[SAP] SAP Session 메모리 관리 (0) | 2024.01.21 |