function zint_send_email.
*"----------------------------------------------------------------------
*"*"區域介面:
*" IMPORTING
*" VALUE(KTYPE) TYPE SO_OBJ_TP DEFAULT 'RAW'
*" VALUE(SUBJECT) TYPE SO_OBJ_DES
*" VALUE(TEXT) TYPE SOLI_TAB
*" VALUE(SENDER_ADDRESS) TYPE AD_SMTPADR
*" VALUE(SENDER_NAME) TYPE AD_SMTPADR OPTIONAL
*" VALUE(ATTACHMENTS) TYPE RMPS_T_POST_CONTENT OPTIONAL
*" VALUE(IMMEDIATELY) TYPE BOOLEAN OPTIONAL
*" EXPORTING
*" VALUE(E_RESULT) TYPE BOOLEAN
*" TABLES
*" T_RECIPIENT STRUCTURE UPS_YS_HR_CPERSON
*" RETURN STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
data:send_request type ref to cl_bcs,
document type ref to cl_document_bcs,
sender_id type ref to if_sender_bcs,
fail type ref to cx_bcs,
recipient type ref to if_recipient_bcs.
data:w_return like bapiret2,
w_rename type ad_smtpadr,
w_attachment like line of attachments,
w_attachment_subject type sood-objdes.
*BREAK CP900.
refresh return.
clear e_result.
e_result = 'X'.
if ktype is initial.
w_return-type = 'E'.
w_return-message = '未指定文件類別代碼'.
w_return-parameter = 'KTYPE'.
append w_return to return.
clear e_result.
endif.
if subject is initial.
w_return-type = 'E'.
w_return-message = '未指定郵件主題'.
w_return-parameter = 'SUBJECT'.
append w_return to return.
clear e_result.
endif.
if text[] is initial.
w_return-type = 'E'.
w_return-message = '未指定郵件內容'.
w_return-parameter = 'TEXT'.
append w_return to return.
clear e_result.
endif.
if sender_address is initial.
w_return-type = 'E'.
w_return-message = '未指定發送人郵件地址'.
w_return-parameter = 'SENDER_ADDRESS'.
append w_return to return.
clear e_result.
endif.
if t_recipient[] is initial.
w_return-type = 'E'.
w_return-message = '未指定接收人郵件地址'.
w_return-parameter = 'RECIPIENT'.
append w_return to return.
clear e_result.
endif.
clear w_return.
check e_result is not initial.
try.
* 第一步: 创建发送请求
send_request = cl_bcs=>create_persistent( ).
* 第二步: 创建整理发送内容
document = cl_document_bcs=>create_document(
i_type = ktype
i_text = text
i_subject = subject ).
* 增加附件內容
loop at attachments into w_attachment.
w_attachment_subject = w_attachment-subject.
document->add_attachment(
exporting
i_attachment_type = w_attachment-objtp
i_attachment_subject = w_attachment_subject
i_att_content_hex = w_attachment-cont_hex ).
endloop.
* 第三步: 添加邮件内容到发送请求
send_request->set_document( document ).
* 第四步:設置發送人出件地址
sender_id = cl_cam_address_bcs=>create_internet_address(
i_address_string = sender_address
i_address_name = sender_name ).
send_request->set_sender( sender_id ).
* 第五步: 接收者邮件地址转换
loop at t_recipient where cperson ne '99999999'.
w_rename = t_recipient-emnam.
recipient = cl_cam_address_bcs=>create_internet_address(
i_address_string = t_recipient-e_mail
i_address_name = w_rename ).
send_request->add_recipient( recipient ).
endloop.
loop at t_recipient where cperson eq '99999999'.
w_rename = t_recipient-emnam.
recipient = cl_cam_address_bcs=>create_internet_address(
i_address_string = t_recipient-e_mail
i_address_name = w_rename ).
* SEND_REQUEST->ADD_RECIPIENT( RECIPIENT ).
call method send_request->add_recipient
exporting
i_recipient = recipient
i_copy = 'X'.
endloop.
* 第六步,設置狀態屬性
send_request->set_status_attributes(
i_requested_status = 'E'
i_status_mail = 'E' ).
send_request->set_send_immediately( immediately ).
* 第七步: 正式发送并提交作业
send_request->send( i_with_error_screen = 'X' ).
commit work and wait.
catch cx_bcs into fail.
e_result = ''.
w_return-type = 'E'.
w_return-message = fail->get_text( ).
append w_return to return.
clear w_return.
endtry.
endfunction.