PI_SUBJECT | TYPE SO_OBJ_DES | 邮件主题 |
PI_SENDER | TYPE AD_SMTPADR OPTIONAL | 发件人邮箱地址 |
PT_ACCEPT | TYPE BCSY_SMTPA | 收件人邮箱 |
PT_CCACCEPT | TYPE BCSY_SMTPA OPTIONAL | 抄送人邮箱 |
PT_CONTENT | TYPE SOLI_TAB | 邮件内容 |
PT_ATTACHMENT | TYPE TFPATTACHMENTS OPTIONAL | 附件清单(只用filename:文件名,mimetype:BIN,data:xstring数据) |
PS_RETURN | TYPE BAPIRET2 | 返回参数 |
*&------Send Email Parameter
DATA: lt_contents_txt TYPE soli_tab,
ls_contents_txt TYPE soli,
lt_attach_header TYPE soli_tab,
ls_attach_header TYPE soli,
lt_att_content_hex TYPE solix_tab,
lv_outlength TYPE i,
lv_attch_size TYPE so_obj_len,
lv_content_size TYPE so_obj_len,
lv_send_return TYPE os_boolean.
DATA: lr_send TYPE REF TO cl_bcs,
lr_document TYPE REF TO cl_document_bcs,
lr_sender TYPE REF TO cl_cam_address_bcs,
lr_accept TYPE REF TO cl_cam_address_bcs,
lr_ccaccept TYPE REF TO cl_cam_address_bcs,
lr_sap_user TYPE REF TO cl_sapuser_bcs,
lr_bcs TYPE REF TO cx_bcs.
DATA:lr_cx_send_req_bcs TYPE REF TO cx_send_req_bcs,
lr_cx_address_bcs TYPE REF TO cx_address_bcs.
DATA: lv_accept TYPE ad_smtpadr,
lv_message TYPE bapiret2-message.
DATA: ls_attachment TYPE sfpattachments,
lv_doctype TYPE so_obj_tp,
lv_attsubject TYPE so_obj_des.
DEFINE mcr_fill_return.
ps_return-id = sy-msgid.
ps_return-number = sy-msgno.
ps_return-type = sy-msgty.
ps_return-message_v1 = sy-msgv1.
ps_return-message_v2 = sy-msgv2.
ps_return-message_v3 = sy-msgv3.
ps_return-message_v4 = sy-msgv4.
ps_return-message = &1.
RETURN.
END-OF-DEFINITION.
" Content format
lt_contents_txt = pt_content.
*&------Create Send Request
TRY.
CALL METHOD cl_bcs=>create_persistent
RECEIVING
result = lr_send.
CATCH cx_send_req_bcs INTO lr_cx_send_req_bcs.
ENDTRY.
IF lr_cx_send_req_bcs IS NOT INITIAL.
lv_message = lr_cx_send_req_bcs->get_text( ).
mcr_fill_return lv_message.
ENDIF.
*&------Get The Sender Email Adress
IF pi_sender IS NOT INITIAL.
TRY.
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = pi_sender
i_address_name = 'System Notification'
* i_incl_sapuser =
RECEIVING
result = lr_sender.
*&---------Set Sender
CALL METHOD lr_send->set_sender
EXPORTING
i_sender = lr_sender.
CATCH cx_address_bcs INTO lr_cx_address_bcs.
CATCH cx_send_req_bcs INTO lr_cx_send_req_bcs.
ENDTRY.
ELSE.
TRY.
CALL METHOD cl_sapuser_bcs=>create
EXPORTING
i_user = sy-uname
RECEIVING
result = lr_sap_user.
CALL METHOD lr_send->set_sender
EXPORTING
i_sender = lr_sap_user.
CATCH cx_send_req_bcs INTO lr_cx_send_req_bcs.
CATCH cx_address_bcs INTO lr_cx_address_bcs.
ENDTRY.
ENDIF.
" Error Deal
IF lr_cx_address_bcs IS NOT INITIAL.
lv_message = lr_cx_address_bcs->get_text( ).
mcr_fill_return lv_message.
ENDIF.
IF lr_cx_send_req_bcs IS NOT INITIAL.
lv_message = lr_cx_send_req_bcs->get_text( ).
mcr_fill_return lv_message.
ENDIF.
*&------Create Send Document Content
TRY.
IF lr_sender IS NOT INITIAL.
CALL METHOD cl_document_bcs=>create_document
EXPORTING
i_type = 'RAW' "'HTM'"'RAW'
i_subject = pi_subject
i_length = lv_content_size
i_language = sy-langu
* i_importance = '1'
i_sensitivity = 'O'
i_text = lt_contents_txt
* i_hex =
* i_header =
i_sender = lr_sender
* iv_vsi_profile =
RECEIVING
result = lr_document.
ELSE.
CALL METHOD cl_document_bcs=>create_document
EXPORTING
i_type = 'RAW'
i_subject = pi_subject
i_length = lv_content_size
i_language = sy-langu
* i_importance = '1'
i_sensitivity = 'O'
i_text = lt_contents_txt
* i_hex =
* i_header =
* i_sender =
* iv_vsi_profile =
RECEIVING
result = lr_document.
ENDIF.
CATCH cx_document_bcs INTO lr_bcs.
ENDTRY.
IF lr_bcs IS NOT INITIAL.
lv_message = lr_bcs->get_text( ).
mcr_fill_return lv_message.
ENDIF.
*&------Add Attachment To Send Document
TRY.
LOOP AT pt_attachment INTO ls_attachment.
CLEAR: lt_attach_header,ls_attach_header,lv_attch_size,lt_att_content_hex.
ls_attach_header = ls_attachment-filename.
APPEND ls_attach_header TO lt_attach_header.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = ls_attachment-data
IMPORTING
output_length = lv_outlength
TABLES
binary_tab = lt_att_content_hex.
lv_attch_size = lv_attch_size.
lv_doctype = ls_attachment-mimetype.
lv_attsubject = ls_attachment-filename.
SHIFT lv_attch_size LEFT DELETING LEADING ' '.
CALL METHOD lr_document->add_attachment
EXPORTING
i_attachment_type = lv_doctype
i_attachment_subject = lv_attsubject
i_attachment_size = lv_attch_size
i_attachment_language = sy-langu
* i_att_content_text =
i_att_content_hex = lt_att_content_hex
* i_attachment_header = lt_attach_header
* iv_vsi_profile =
.
CLEAR ls_attachment.
ENDLOOP.
CATCH cx_document_bcs INTO lr_bcs.
ENDTRY.
IF lr_bcs IS NOT INITIAL.
lv_message = lr_bcs->get_text( ).
mcr_fill_return lv_message.
ENDIF.
*&------Set Send Document For Send Request
TRY.
CALL METHOD lr_send->set_document
EXPORTING
i_document = lr_document.
CATCH cx_send_req_bcs INTO lr_bcs.
ENDTRY.
IF lr_bcs IS NOT INITIAL.
lv_message = lr_bcs->get_text( ).
mcr_fill_return lv_message.
ENDIF.
*&------Add Accept For Email
TRY.
LOOP AT pt_accept INTO lv_accept.
CLEAR lr_accept.
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = lv_accept
* i_address_name =
* i_incl_sapuser =
RECEIVING
result = lr_accept.
CALL METHOD lr_send->add_recipient
EXPORTING
i_recipient = lr_accept
i_express = 'X'
i_copy = ''
i_blind_copy = ''
i_no_forward = ''.
ENDLOOP.
" 抄送人
LOOP AT pt_ccaccept INTO lv_accept.
CLEAR lr_accept.
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = lv_accept
* i_address_name =
* i_incl_sapuser =
RECEIVING
result = lr_accept.
CALL METHOD lr_send->add_recipient
EXPORTING
i_recipient = lr_accept
i_express = 'X'
i_copy = 'X'
i_blind_copy = ''
i_no_forward = ''.
ENDLOOP.
CATCH cx_send_req_bcs INTO lr_bcs.
lv_message = lr_bcs->get_text( ).
mcr_fill_return lv_message.
CATCH cx_address_bcs INTO lr_bcs.
lv_message = lr_bcs->get_text( ).
mcr_fill_return lv_message.
ENDTRY.
TRY.
CALL METHOD lr_send->set_send_immediately
EXPORTING
i_send_immediately = 'X'.
CATCH cx_send_req_bcs INTO lr_bcs.
lv_message = lr_bcs->get_text( ).
mcr_fill_return lv_message.
ENDTRY.
*&------Send Email
TRY.
CALL METHOD lr_send->send
EXPORTING
i_with_error_screen = space
RECEIVING
result = lv_send_return.
CATCH cx_send_req_bcs INTO lr_bcs.
lv_message = lr_bcs->get_text( ).
mcr_fill_return lv_message.
ENDTRY.
COMMIT WORK AND WAIT.
* SUBMIT rsconn01 WITH mode = '*'"INT'
* WITH output = ''
* AND RETURN.
1. 邮件内容为HTML格式时,create_document方法中类型需要传'HTM'
2. 如果需要立即发送,则要调用邮件发送程序,会比较慢
3. 可以为邮件设置重要等级
4. 发件邮箱显示名字 System Notification 可修改
5. ...