ABAP 에서 사용자나 거래처에게 자동으로 이메일을 보내는 요구사항은 자주 등장합니다. 결재 알림, 정기 보고서, 거래처 안내, 견적서 첨부 송신 등이 대표적입니다. 예전에는 표준 Function Module(SO_NEW_DOCUMENT_ATT_SEND_API1) 을 주로 사용했지만, 현재 SAP 표준은 객체지향 기반의 BCS(Business Communication Services) 클래스 — CL_BCS 를 권장합니다.
CL_BCS 패턴은 요청 생성 → 문서 작성 → 발신자/수신자 지정 → 발송 의 4단계 흐름을 객체 메소드 체이닝으로 깔끔하게 표현합니다. 본문(RAW · HTML) · 로컬 PC 첨부파일 · SAP 비즈니스 객체에 붙어있는 GOS(Generic Object Services) 첨부파일 · BCC(숨은 참조) 까지 표준 클래스 메소드로 일관되게 처리됩니다.
이 글은 CL_BCS 의 기본 패턴, 핵심 클래스 4개, 본문 두 가지 형식(RAW/HTM), 첨부파일 두 가지 방식(로컬 PC / SAP GOS), 발송 결과 확인 트랜잭션(SOST·SCOT), 그리고 실무에서 자주 만나는 함정까지 한 번에 정리한 메모입니다.
핵심 — CL_BCS 4개 클래스 + 4단계 흐름
이메일 송신에 필요한 표준 클래스 4개와, 메소드 호출 순서를 먼저 정리합니다.
| 클래스 | 역할 |
|---|---|
CL_BCS |
송신 요청(Send Request) — 전체 흐름의 컨트롤러 |
CL_DOCUMENT_BCS |
문서(Document) — 제목·본문·첨부파일 |
CL_SAPUSER_BCS |
발신자(Sender) — SAP 사용자 기반 |
CL_CAM_ADDRESS_BCS |
수신자(Recipient) — 외부 이메일 주소 |
첨부파일을 다룰 때는 두 가지 보조 클래스/FM 이 추가로 사용됩니다.
| 클래스 / FM | 역할 |
|---|---|
CL_BCS_CONVERT |
SOLI(텍스트) ↔ SOLIX(바이너리) 변환 — 첨부파일 인코딩 |
CL_BINARY_RELATION |
SAP 비즈니스 객체에 붙은 GOS 첨부파일 링크 조회 |
SO_DOCUMENT_READ_API1 |
SAP 첨부 문서의 헤더·내용을 ABAP 으로 읽기 (FM) |
전체 흐름은 4단계입니다.
1. CL_BCS=>create_persistent( ) → 송신 요청 객체 생성
2. CL_DOCUMENT_BCS=>create_document( RAW / HTM ) → 본문 생성
+ lo_document->add_attachment( ) → 첨부파일 (선택)
3. send_request->set_sender( ) / add_recipient( ) → 발신자·수신자 지정
4. send_request->send( ) + COMMIT WORK → 발송 큐에 등록
1단계 — 송신 요청과 문서 생성 (RAW · HTM)
요청 객체와 문서 객체를 만드는 가장 기본 단계입니다. 본문 형식은 텍스트(RAW) 또는 HTML(HTM) 중 선택합니다.
RAW 본문 — 단순 텍스트
" 1) 송신 요청 — 컨트롤러
DATA(send_request) = cl_bcs=>create_persistent( ).
" 2) 메일 제목
DATA: lv_title TYPE so_obj_des.
lv_title = |[알림] 일일 처리 결과 ({ sy-datum })|.
" 3) RAW 본문 — 인터널 테이블 줄 단위
DATA: lt_main_text TYPE bcsy_text.
lt_main_text = VALUE #(
( line = '안녕하세요' )
( line = '' )
( line = '오늘 일일 처리 결과를 보내드립니다.' )
( line = '' )
( line = '감사합니다.' )
).
" 4) 문서 생성
DATA(lo_document) = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = lt_main_text
i_subject = lv_title
).
HTM 본문 — 스타일·표 포함
HTML 형식은 본문에 표·강조·줄바꿈을 자유롭게 표현할 수 있습니다. 줄바꿈은 </br> 또는 <p> 태그를 명시해야 합니다.
lt_main_text = VALUE bcsy_text(
( line = |안녕하십니까.| )
( line = |</br>| )
( line = |</br>| )
( line = |{ lv_subject } 관련하여 안내드립니다.| )
( line = |</br>| )
( line = |<pre> -아 래-</pre>| )
( line = |1. 제목 : { lv_subject }| )
( line = |</br>| )
( line = |2. 마감 : { lv_due_date } 까지| )
( line = |</br>| )
( line = |</br>| )
( line = |감사합니다.| )
).
lo_document = cl_document_bcs=>create_document(
i_type = 'HTM' " ★ HTM 타입
i_text = lt_main_text
i_subject = lv_title
).
| i_type | 특징 |
|---|---|
RAW |
일반 텍스트. 인터널 테이블 줄 단위로 자동 줄바꿈 |
HTM |
HTML. </br>·<pre>·<table> 등 태그 명시 필수 |
2단계 — 발신자 · 수신자 지정 (BCC 포함)
발신자는 SAP 사용자(SY-UNAME 또는 지정 사용자) 기반이고, 수신자는 외부 이메일 주소입니다. BCC(숨은 참조) 도 같은 메소드로 처리합니다.
" 1) 발신자 — 현재 로그인 사용자
DATA(lo_sender) = cl_sapuser_bcs=>create( sy-uname ).
send_request->set_sender( i_sender = lo_sender ).
" 2) 수신자 — 일반(To)
DATA: lv_mail TYPE sza5_d0700-smtp_addr.
lv_mail = 'user@example.com'.
DATA(lo_recipient) = cl_cam_address_bcs=>create_internet_address( lv_mail ).
send_request->add_recipient( i_recipient = lo_recipient ).
" 3) BCC(숨은 참조) — i_blind_copy = abap_true
lv_mail = 'manager@example.com'.
lo_recipient = cl_cam_address_bcs=>create_internet_address( lv_mail ).
send_request->add_recipient(
EXPORTING
i_recipient = lo_recipient
i_blind_copy = abap_true " ★ 숨은 참조
).
" 4) CC(참조) — i_copy = abap_true
" (BCC 와 동일 패턴으로 i_copy 지정)
" 5) 문서를 요청에 연결
send_request->set_document( lo_document ).
| 옵션 | 의미 |
|---|---|
| (기본) | To — 일반 수신자 |
i_copy = abap_true |
CC — 참조 (모든 수신자에게 주소 노출) |
i_blind_copy = abap_true |
BCC — 숨은 참조 (다른 수신자에게 주소 숨김) |
거래처 다중 발송 시 다른 거래처의 메일 주소가 노출되면 안 되므로 거의 항상 BCC 로 처리합니다.
3단계 — 로컬 PC 파일 첨부 (GUI_UPLOAD)
PDF · Excel 등 로컬 PC 파일을 첨부할 때는 GUI_UPLOAD 로 SOLIX(16진) 인터널 테이블에 담은 뒤 add_attachment 로 붙입니다.
DATA: lt_mail_hex TYPE solix_tab,
lv_filesize TYPE i.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = 'C:\temp\report.pdf'
filetype = 'BIN'
IMPORTING
filelength = lv_filesize
TABLES
data_tab = lt_mail_hex.
DATA: lv_attach_name TYPE sood-objdes.
lv_attach_name = |일일보고서_{ sy-datum }|.
lo_document->add_attachment(
i_attachment_type = 'PDF' " PDF · XLS · DOC · TXT · ZIP 등
i_attachment_subject = lv_attach_name " 표시명
i_att_content_hex = lt_mail_hex
).
여러 파일을 첨부하려면 add_attachment 를 반복 호출합니다.
4단계 — SAP GOS 첨부파일 송신 (CL_BINARY_RELATION)
실무에서 가장 유용한 패턴. SAP 비즈니스 객체(구매오더·발주·결재문서 등) 에 사용자가 GOS 메뉴(상단 첨부 아이콘) 로 붙여둔 파일을 그대로 메일에 첨부할 수 있습니다.
흐름
1. CL_BINARY_RELATION=>READ_LINKS_OF_BINRELS → 객체에 붙은 첨부 링크 조회
2. SO_DOCUMENT_READ_API1 → 각 링크의 헤더·내용 읽기
3. CL_BCS_CONVERT=>SOLI_TO_SOLIX / TXT_TO_SOLIX → 텍스트를 바이너리로 변환
4. lo_document->add_attachment( ) → 메일 문서에 첨부
코드 예시
" 1) 비즈니스 객체 키 정보 (SIBFLPORB 구조)
DATA(lv_instid) = lv_doc_no && 'XXFILE'. " 객체 키
DATA(ls_object) = VALUE sibflporb(
instid = lv_instid
typeid = 'ZXXFILE' " 회사 BO 타입
catid = 'BO'
).
" 2) 첨부파일 필터 (ATTA = General attachment)
DATA(lt_option) = VALUE obl_t_relt(
( low = 'ATTA'
sign = 'I'
option = 'EQ' )
).
" 3) 객체에 연결된 첨부 링크 조회
CALL METHOD cl_binary_relation=>read_links_of_binrels
EXPORTING
is_object = ls_object
it_relation_options = lt_option
ip_role = 'GOSAPPLOBJ'
IMPORTING
et_links = DATA(lt_links).
" 4) 각 첨부파일의 헤더·내용 읽고 메일에 첨부
LOOP AT lt_links INTO DATA(ls_links).
DATA: lv_docid TYPE sofolenti1-doc_id,
ls_doc_data TYPE sofolenti1,
lt_header TYPE TABLE OF solisti1,
lt_cont TYPE TABLE OF solisti1,
lt_cont_solix TYPE TABLE OF solix.
lv_docid = ls_links-instid_b.
CALL FUNCTION 'SO_DOCUMENT_READ_API1'
EXPORTING
document_id = lv_docid
IMPORTING
document_data = ls_doc_data
TABLES
object_header = lt_header
object_content = lt_cont
contents_hex = lt_cont_solix.
IF sy-subrc = 0.
" 5) SOLI → SOLIX 변환 (포맷에 따라 분기)
DATA: lt_binary_content TYPE solix_tab.
IF ls_doc_data-obj_type = 'TXT'.
cl_bcs_convert=>txt_to_solix(
EXPORTING
it_soli = lt_cont
iv_codepage = '8500'
IMPORTING
et_solix = lt_binary_content
).
ELSE.
lt_binary_content = cl_bcs_convert=>soli_to_solix( it_soli = lt_cont ).
ENDIF.
" 6) 메일 문서에 첨부
lo_document->add_attachment(
i_attachment_type = ls_doc_data-obj_type " 형식 (PDF/XLSX/TXT...)
i_attachment_language = ls_doc_data-obj_langu
i_attachment_size = ls_doc_data-doc_size
i_attachment_subject = ls_doc_data-obj_descr " 표시명
i_att_content_hex = lt_binary_content
).
ENDIF.
ENDLOOP.
핵심 포인트:
- SOLI vs SOLIX — SAP 내부 첨부 데이터는 보통 SOLI(텍스트 라인) 로 저장되지만
add_attachment는 SOLIX(16진) 를 요구합니다.CL_BCS_CONVERT가 두 포맷 사이를 변환합니다. - TXT 파일은 별도 처리 — 코드페이지(
8500등) 를 명시해야 한글이 안 깨집니다. - ip_role = 'GOSAPPLOBJ' — 일반 GOS 첨부파일에는 항상 이 role 사용.
- lt_option 의 'ATTA' — Attachment 만 필터링. 다른 GOS 객체(노트·링크 등) 와 분리.
5단계 — 발송 + COMMIT WORK + 운영 트랜잭션
마지막에 send 호출 후 COMMIT WORK 가 반드시 필요 — 빠뜨리면 큐에 들어가지 않아 실제 발송이 안 됩니다.
DATA(lo_send_all) = send_request->send( i_with_error_screen = abap_true ).
IF lo_send_all IS INITIAL.
ROLLBACK WORK.
MESSAGE |메일 발송 실패| TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
COMMIT WORK.
MESSAGE |메일 발송 완료| TYPE 'S'.
ENDIF.
운영 트랜잭션
| T-Code | 용도 |
|---|---|
SOST |
개별 메일 송신 상태 모니터링 — 발송 큐·재발송·오류 메시지 확인 |
SCOT |
SMTP 노드·도메인 설정 (베이시스 영역) |
SBWP |
개인 SAP 인박스 (Business Workplace) — 사내 SAP 사용자 메일 수신함 |
SU01 |
사용자 마스터 — 발신자 이메일 주소 등록 (Address 탭) |

발송 직후 메일이 안 도착했다면 먼저 SOST 에서 상태를 확인합니다. 큐에 "Waiting" 으로 멈춰 있다면 SCOT 의 Send Job 이 비활성화돼 있을 가능성이 큽니다.
흔히 빠뜨리는 함정
COMMIT WORK 누락 → 메일이 큐에 안 들어감
가장 흔한 실수. send( ) 메소드를 호출해도 COMMIT WORK 가 없으면 SAP 가 발송 큐에 등록하지 않습니다. 호출 직후 반드시 COMMIT WORK(또는 COMMIT WORK AND WAIT).
SMTP 노드 미설정
SCOT 의 Send Job 이 활성화되어 있지 않으면 메일이 큐에 쌓인 채 안 나갑니다. 신규 시스템 오픈 시 베이시스가 SMTP 노드와 정기 Send Job 을 설정해 두었는지 사전 확인이 필수입니다.
SAP 사용자 이메일 미등록
발신자(SY-UNAME) 의 SAP 사용자 마스터(SU01) 에 이메일 주소가 비어있으면 발신자 정보가 깨진 채 발송됩니다. SU01 → Address 탭에 E-Mail 항목 등록 필요.
GOS 첨부에서 SOLI → SOLIX 변환 누락
SO_DOCUMENT_READ_API1 이 반환하는 object_content(SOLI) 를 그대로 add_attachment 에 넣으면 첨부파일이 깨집니다. 반드시 cl_bcs_convert=>soli_to_solix( ) 변환을 거칩니다. TXT 는 txt_to_solix 로 코드페이지 명시.
첨부파일 한글 파일명 깨짐
i_attachment_subject 에 한글이 들어가면 깨질 수 있습니다. 시스템 코드페이지에 따라 다르므로 한글 파일명이 중요하면 영문/숫자 위주로 명명하거나 별도 코드페이지 처리.
첨부파일이 본문으로 들어가는 케이스
create_document 의 i_type = 'PDF' 로 만들면 PDF 가 본문 형태로 인식되는 경우가 있습니다. 본문은 RAW 또는 HTM 로 만들고, PDF 는 add_attachment 로 추가합니다.
HTML 본문에 줄바꿈 누락
i_type = 'HTM' 사용 시 인터널 테이블 줄별로 </br> 또는 <p> 태그를 명시적으로 추가해야 줄바꿈이 표시됩니다. RAW 와 다름.
BCC 누락으로 거래처 이메일 노출
여러 거래처에게 같은 메일을 보낼 때 To 또는 CC 로 추가하면 모든 거래처가 다른 거래처의 이메일을 볼 수 있습니다. 거의 항상 i_blind_copy = abap_true 로 BCC 처리합니다.
외부 이메일 주소 형식 검증 누락
수신자 주소에 공백이나 잘못된 문자가 섞이면 CX_ADDRESS_BCS 예외가 발생합니다. 송신 전에 정규식 또는 CONTAINS_ONLY 로 사전 검증.
대량 발송 시 send_request 재사용
LOOP 안에서 N건을 보낸다면 매번 cl_bcs=>create_persistent( ) 로 새 인스턴스를 만드는 것이 안전합니다. 같은 객체에 수신자만 추가해서 N번 send 호출하면 이전 메일의 수신자가 누적될 수 있습니다.
TRY/CATCH 누락
CL_BCS 메소드들은 다양한 예외(CX_DOCUMENT_BCS · CX_BCS · CX_SEND_REQ_BCS · CX_ADDRESS_BCS) 를 발생시킵니다. 운영용 코드에서는 TRY ... CATCH cx_bcs INTO DATA(lx) 로 감싸 로그를 남깁니다.
전체 코드 — 복사용 통합본
기본 송신 + HTML 본문 + 로컬 PDF 첨부 + GOS 첨부 + BCC + 예외 처리까지 모두 포함한 표준 패턴입니다. SE38 에 그대로 붙여 실행 가능합니다.
REPORT z_cl_bcs_full_demo.
PARAMETERS:
p_to TYPE sza5_d0700-smtp_addr DEFAULT 'user@example.com',
p_bcc TYPE sza5_d0700-smtp_addr DEFAULT 'manager@example.com',
p_html AS CHECKBOX, " HTML 본문 사용
p_local AS CHECKBOX, " 로컬 PC 파일 첨부
p_lfile TYPE string LOWER CASE DEFAULT 'C:\temp\report.pdf',
p_gos AS CHECKBOX, " GOS 첨부 사용
p_objid TYPE string LOWER CASE DEFAULT 'TEST_OBJ_001'.
START-OF-SELECTION.
TRY.
" ★ 1) 송신 요청 생성
DATA(send_request) = cl_bcs=>create_persistent( ).
" ★ 2) 본문 작성 (RAW or HTM)
DATA: lv_title TYPE so_obj_des.
lv_title = |[알림] CL_BCS 통합 발송 테스트 ({ sy-datum })|.
DATA lt_text TYPE bcsy_text.
DATA lv_type TYPE so_obj_tp.
IF p_html = abap_true.
lv_type = 'HTM'.
lt_text = VALUE bcsy_text(
( line = |안녕하세요.| )
( line = |</br>| )
( line = |</br>| )
( line = |<pre> -아 래-</pre>| )
( line = |1. 일자 : { sy-datum }| )
( line = |</br>| )
( line = |2. 본문 : 첨부파일을 확인해 주세요.| )
( line = |</br>| )
( line = |</br>| )
( line = |감사합니다.| )
).
ELSE.
lv_type = 'RAW'.
lt_text = VALUE bcsy_text(
( line = '안녕하세요.' )
( line = '' )
( line = '첨부파일을 확인해 주세요.' )
( line = '' )
( line = '감사합니다.' )
).
ENDIF.
DATA(lo_document) = cl_document_bcs=>create_document(
i_type = lv_type
i_text = lt_text
i_subject = lv_title
).
" ★ 3) 로컬 PC 파일 첨부 (옵션)
IF p_local = abap_true.
DATA: lt_hex TYPE solix_tab,
lv_filesize TYPE i.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = CONV string( p_lfile )
filetype = 'BIN'
IMPORTING
filelength = lv_filesize
TABLES
data_tab = lt_hex.
IF sy-subrc = 0 AND lv_filesize > 0.
lo_document->add_attachment(
i_attachment_type = 'PDF'
i_attachment_subject = |Report_{ sy-datum }|
i_att_content_hex = lt_hex
).
ENDIF.
ENDIF.
" ★ 4) SAP GOS 첨부 (옵션)
IF p_gos = abap_true.
DATA(ls_object) = VALUE sibflporb(
instid = p_objid
typeid = 'ZXXFILE' " 회사 BO 타입
catid = 'BO'
).
DATA(lt_option) = VALUE obl_t_relt(
( low = 'ATTA' sign = 'I' option = 'EQ' )
).
CALL METHOD cl_binary_relation=>read_links_of_binrels
EXPORTING
is_object = ls_object
it_relation_options = lt_option
ip_role = 'GOSAPPLOBJ'
IMPORTING
et_links = DATA(lt_links).
LOOP AT lt_links INTO DATA(ls_link).
DATA: lv_docid TYPE sofolenti1-doc_id,
ls_doc_data TYPE sofolenti1,
lt_obj_header TYPE TABLE OF solisti1,
lt_obj_content TYPE TABLE OF solisti1,
lt_obj_hex TYPE TABLE OF solix,
lt_bin_content TYPE solix_tab.
lv_docid = ls_link-instid_b.
CALL FUNCTION 'SO_DOCUMENT_READ_API1'
EXPORTING
document_id = lv_docid
IMPORTING
document_data = ls_doc_data
TABLES
object_header = lt_obj_header
object_content = lt_obj_content
contents_hex = lt_obj_hex.
IF sy-subrc = 0.
IF ls_doc_data-obj_type = 'TXT'.
cl_bcs_convert=>txt_to_solix(
EXPORTING
it_soli = lt_obj_content
iv_codepage = '8500'
IMPORTING
et_solix = lt_bin_content
).
ELSE.
lt_bin_content = cl_bcs_convert=>soli_to_solix(
it_soli = lt_obj_content
).
ENDIF.
lo_document->add_attachment(
i_attachment_type = ls_doc_data-obj_type
i_attachment_language = ls_doc_data-obj_langu
i_attachment_size = ls_doc_data-doc_size
i_attachment_subject = ls_doc_data-obj_descr
i_att_content_hex = lt_bin_content
).
ENDIF.
CLEAR: lt_obj_header, lt_obj_content, lt_obj_hex, lt_bin_content.
ENDLOOP.
ENDIF.
" ★ 5) 문서 연결 + 발신자
send_request->set_document( lo_document ).
DATA(lo_sender) = cl_sapuser_bcs=>create( sy-uname ).
send_request->set_sender( i_sender = lo_sender ).
" ★ 6) 수신자 (To) + BCC
DATA(lo_recipient) = cl_cam_address_bcs=>create_internet_address( p_to ).
send_request->add_recipient( i_recipient = lo_recipient ).
IF p_bcc IS NOT INITIAL.
DATA(lo_bcc) = cl_cam_address_bcs=>create_internet_address( p_bcc ).
send_request->add_recipient(
EXPORTING
i_recipient = lo_bcc
i_blind_copy = abap_true
).
ENDIF.
" ★ 7) 발송 + COMMIT
DATA(lo_send_all) = send_request->send( i_with_error_screen = abap_true ).
IF lo_send_all IS INITIAL.
ROLLBACK WORK.
MESSAGE |메일 발송 실패. SOST 에서 큐 상태 확인| TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
COMMIT WORK.
MESSAGE |메일 발송 완료. SOST 에서 처리 상태 확인 가능| TYPE 'S'.
ENDIF.
CATCH cx_document_bcs INTO DATA(lx_doc).
MESSAGE |문서 생성 실패: { lx_doc->get_text( ) }| TYPE 'E'.
CATCH cx_send_req_bcs INTO DATA(lx_send).
MESSAGE |송신 요청 실패: { lx_send->get_text( ) }| TYPE 'E'.
CATCH cx_address_bcs INTO DATA(lx_addr).
MESSAGE |수신자 주소 오류: { lx_addr->get_text( ) }| TYPE 'E'.
CATCH cx_bcs INTO DATA(lx_bcs).
MESSAGE |BCS 오류: { lx_bcs->get_text( ) }| TYPE 'E'.
ENDTRY.
요약
| 단계 | 메소드 | 역할 |
|---|---|---|
| 1 | cl_bcs=>create_persistent( ) |
송신 요청 객체 생성 |
| 2 | cl_document_bcs=>create_document( RAW / HTM ) |
본문 작성 — RAW(텍스트) · HTM(HTML) |
| 3a | GUI_UPLOAD + add_attachment( ) |
로컬 PC 파일 첨부 |
| 3b | CL_BINARY_RELATION + CL_BCS_CONVERT |
SAP GOS 첨부파일 송신 |
| 4 | set_sender( ) · add_recipient( i_blind_copy = abap_true ) |
발신자 · 수신자 (To · CC · BCC) 지정 |
| 5 | send( ) + COMMIT WORK |
발송 큐 등록 (COMMIT 필수!) |
| 6 | 운영 T-Code | SOST(큐 상태) · SCOT(SMTP 설정) · SBWP(인박스) · SU01(사용자 메일) |
CL_BCS 패턴은 ABAP 에서 표준 SAP 가 권장하는 객체지향 기반 메일 송신 방식입니다. 4개 클래스의 4단계 흐름(요청 → 문서 → 발신/수신 → 발송) 만 익히면 RAW/HTML 본문, 로컬 파일 첨부, SAP GOS 첨부, BCC 등 어떤 변형도 같은 패턴으로 처리할 수 있습니다. GOS 첨부 시 CL_BINARY_RELATION 으로 링크 조회 → SO_DOCUMENT_READ_API1 로 데이터 읽기 → CL_BCS_CONVERT 로 SOLIX 변환 → add_attachment 의 4단계 보조 흐름만 추가하면 됩니다. send( ) 후 COMMIT WORK 호출과 SOST 큐 모니터링 두 가지만 빠뜨리지 않으면 안정적으로 운영됩니다.
Disclaimer — 이 포스트는 실무 정리 노트를 바탕으로 AI 보조로 정리되었습니다.
CL_BCS · CL_DOCUMENT_BCS · CL_SAPUSER_BCS · CL_CAM_ADDRESS_BCS · CL_BCS_CONVERT · CL_BINARY_RELATION 클래스와 SO_DOCUMENT_READ_API1 함수, SOST · SCOT · SBWP · SU01 트랜잭션은 SAP NetWeaver 표준 기능으로 시스템 버전 의존 없이 동작합니다. 메일 발송이 실제로 외부로 나가려면 베이시스가 SCOT 의 SMTP 노드와 정기 Send Job 을 활성화해 두어야 하므로, 신규 시스템 또는 첫 메일 발송 코드 작성 시 인프라 설정을 사전에 확인하시기 바랍니다. GOS 첨부의 BO Type(TYPEID) 은 회사별 커스텀 객체에 따라 달라지며,
본 글의 예시 ZXXFILE 은 일반화된 표기이므로 실 시스템의 BO Type 으로 교체하여 사용하시기 바랍니다. COMMIT WORK 호출은 SAP 가 메일을 발송 큐에 등록하는 트리거이므로 반드시 send( ) 호출 후 명시적으로 호출해야 하며, 한글 첨부파일명은 시스템 코드페이지에 따라 깨질 수 있어 영문/숫자 위주의 파일명 사용을 권장합니다.