so_object_send를 이용한 mail 전송
so_object_send function을 이용하면 sender에 internet email을 지정하여 전송할 수 있다.
FUNCTION zcm_send_mail.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(IS_SENDER) TYPE ZQMS_038
*" VALUE(IV_TITLE) TYPE ZWF_TITLECO
*" VALUE(IV_RETURN) TYPE CHAR1 OPTIONAL
*" EXPORTING
*" VALUE(EV_RESULT) TYPE CHAR1
*" VALUE(EV_ERR_MSG) TYPE STRING
*" TABLES
*" T_RECEIVER TYPE ZQMY_0001
*" T_BODY STRUCTURE W3HTML
*" EXCEPTIONS
*" INVALID_USER_ERROR
*" NO_EMAILID
*" INVALID_EMPLOYEE_NUMBER
*" INVALID_MYSINGLEID
*" INVALID_ID_TYPE
*" INVALID_WF_OBJECT
*"----------------------------------------------------------------------
DATA lv_object_hd TYPE sood1.
DATA lv_object_type TYPE sood-objtp.
DATA : lv_originator TYPE soos1-recextnam,
lv_origin_type TYPE soos1-recesc.
DATA lt_objcont TYPE STANDARD TABLE OF soli WITH HEADER LINE.
DATA lt_receivers TYPE STANDARD TABLE OF soos1 WITH HEADER LINE.
DATA lt_packing_list TYPE STANDARD TABLE OF soxpl WITH HEADER LINE.
*
DATA: lv_lines TYPE i,
lo_ex_system TYPE REF TO cx_ai_system_fault,
lo_ex_app TYPE REF TO cx_ai_application_fault.
CLEAR : ev_result, ev_err_msg. ", ls_en_request.
*--------------------------------------------------------------------*
* 0. Check Input Value
*--------------------------------------------------------------------*
IF ( t_receiver[] IS INITIAL ).
ev_err_msg = 'Enter mail receiver (required field)'.
ev_result = 'E'.
EXIT.
ELSEIF ( t_body[] IS INITIAL ).
ev_err_msg = 'Enter mail body (required field)'.
ev_result = 'E'.
EXIT.
ENDIF.
* PERFORM check_mailuser USING is_sender iv_return
* CHANGING ev_err_msg.
* IF ev_err_msg IS NOT INITIAL.
* ev_result = c_e. EXIT.
* ENDIF.
*--------------------------------------------------------------------*
* 3. Set Mail Body
*--------------------------------------------------------------------*
CLEAR : lv_object_hd.
lv_object_hd-objla = sy-langu.
lv_object_hd-objdes = iv_title.
lv_object_hd-objnam = 'MESSAGE'.
lv_object_hd-objsns = 'O'.
lv_object_hd-file_ext = 'HTM'.
lv_object_hd-objpri = '1'.
lv_object_hd-objcp = 'X'.
lv_object_type = 'RAW'.
LOOP AT t_body.
lt_objcont-line = t_body.
APPEND lt_objcont. CLEAR lt_objcont.
ENDLOOP.
* READ TABLE t_body INDEX 1.
* SEARCH t_body FOR '<HTML>' IN CHARACTER MODE STARTING AT 1 ENDING AT 10.
* IF sy-subrc EQ 0.
* ls_en_request-header_helper_csvo-b_html_content_check = 'true'.
* ENDIF.
*--------------------------------------------------------------------*
* 4. Set Recipient Info
*--------------------------------------------------------------------*
* i_seq_id (필수값) - 일련번호 (0부터 순차적으로 증가)
* rec_type (필수값) - 수신형태 (t : 수신, c : 참조, b : 비밀참조)
* rec_addr (필수값) - 수신자메일주소
CLEAR: lt_receivers, lt_receivers[].
LOOP AT t_receiver.
* PERFORM check_mailuser USING t_receiver iv_return
* CHANGING ev_err_msg.
* IF ev_err_msg IS NOT INITIAL AND iv_return IS INITIAL.
* ev_result = 'E'.
* EXIT.
* ENDIF.
TRANSLATE t_receiver-emailid TO LOWER CASE.
lt_receivers-recextnam = t_receiver-emailid.
lt_receivers-sndart = 'INT'.
lt_receivers-sndpri = '1'.
lt_receivers-recesc = 'U'.
APPEND lt_receivers. CLEAR lt_receivers.
ENDLOOP.
lv_originator = is_sender-emailid.
lv_origin_type = 'U'.
CHECK ev_result NE 'E'.
*--------------------------------------------------------------------*
* 5. Set Resource Info
*--------------------------------------------------------------------*
* email (필수값) - 발신자메일주소
* locale (필수값) - 로케일정보 (ko_KR : 한국, 중국 : zh_CN, 일본 : ja_JP, 나머지 : en_US)
* encoding (필수값) - 메일인코딩정보 (euc-kr 또는 utf-8)
*--------------------------------------------------------------------*
* 6. Send Mail
*--------------------------------------------------------------------*
*************************&&메일을 전송하는 FUNCTION.....
TRY.
CALL FUNCTION 'SO_OBJECT_SEND'
EXPORTING
object_hd_change = lv_object_hd
object_type = lv_object_type
owner = sy-uname
originator = lv_originator
originator_type = lv_origin_type
TABLES
objcont = lt_objcont
receivers = lt_receivers
EXCEPTIONS
active_user_not_exist = 1
communication_failure = 2
component_not_available = 3
folder_not_exist = 4
folder_no_authorization = 5
forwarder_not_exist = 6
note_not_exist = 7
object_not_exist = 8
object_not_sent = 9
object_no_authorization = 10
object_type_not_exist = 11
operation_no_authorization = 12
owner_not_exist = 13
parameter_error = 14
substitute_not_active = 15
substitute_not_defined = 16
system_failure = 17
too_much_receivers = 18
user_not_exist = 19
originator_not_exist = 20
x_error = 21.
CATCH cx_ai_system_fault INTO lo_ex_system.
ev_result = 'E'.
ev_err_msg = lo_ex_system->if_message~get_text( ).
CATCH cx_ai_application_fault INTO lo_ex_app.
ev_result = 'E'.
ev_err_msg = lo_ex_app->if_message~get_text( ).
ENDTRY.
IF sy-subrc = 0.
"SO_OBJECT_SEND 사용시에는 commit work 해줘야 함.
COMMIT WORK.
ev_result = 'S'.
EXIT.
ELSE.
ev_result = sy-subrc.
EXIT.
ENDIF.
ENDFUNCTION.