PS:可以先通过在线工具,将邮件内容直接转换成HTML的格式
原代码如下:
FORM send_mail USING iv_send_attachment TYPE boolean.
DATA lo_send_request TYPE REF TO cl_bcs.
DATA lo_sender TYPE REF TO if_sender_bcs.
DATA lo_recipient TYPE REF TO if_recipient_bcs.
DATA lo_ex_bcs TYPE REF TO cx_bcs.
DATA lv_subject TYPE string.
DATA lv_subject_short TYPE so_obj_des.
DATA lo_document TYPE REF TO cl_document_bcs.
DATA lv_content TYPE string.
DATA lv_xstr TYPE xstring.
DATA lt_hex TYPE solix_tab.
DATA lv_result TYPE os_boolean.
DATA lv_new_line TYPE string VALUE '<p><span> </span></p>'.
DATA lv_endof_line TYPE string VALUE ' </span></p>'.
DATA ls_receiver TYPE ty_receiver.
TRY.
lv_subject_short = lv_subject = 'Reminder: Certified Statement Submission'.
IF iv_send_attachment = abap_true.
lv_subject_short = lv_subject = 'Summary: Certified Statement Submission'.
ENDIF.
lo_send_request = cl_bcs=>create_persistent( ).
CALL METHOD lo_send_request->set_message_subject
EXPORTING
ip_subject = lv_subject.
"Sender
CALL METHOD cl_cam_address_bcs=>create_internet_address
EXPORTING
i_address_string = zcl_constants_util=>gc_mail_no_reply
i_address_name = 'NO-REPLY'
RECEIVING
result = lo_sender.
CALL METHOD lo_send_request->set_sender
EXPORTING
i_sender = lo_sender.
**********************************************************************
"Receiver
IF iv_send_attachment = abap_true.
CLEAR gt_receiver.
LOOP AT s_email[] ASSIGNING FIELD-SYMBOL(<email>).
ls_receiver-smtp_addr = <email>-low.
APPEND ls_receiver TO gt_receiver.
CLEAR ls_receiver.
ENDLOOP.
ELSE.
"Add CC receiver
LOOP AT s_email[] ASSIGNING <email>.
CLEAR ls_receiver.
ls_receiver-smtp_addr = <email>-low.
lo_recipient = cl_cam_address_bcs=>create_internet_address( ls_receiver-smtp_addr ).
CALL METHOD lo_send_request->add_recipient(
i_recipient = lo_recipient
i_copy = 'X' ).
ENDLOOP.
ENDIF.
CLEAR lo_recipient.
LOOP AT gt_receiver ASSIGNING FIELD-SYMBOL(<receiver>).
lo_recipient = cl_cam_address_bcs=>create_internet_address( <receiver>-smtp_addr ).
CALL METHOD lo_send_request->add_recipient
EXPORTING
i_recipient = lo_recipient
i_express = 'X'.
ENDLOOP.
**********************************************************************
CONCATENATE '<html>'
'<p><span>Dear Sirs,</span></p>'
lv_new_line
'<p><span>Please be reminded that pursuant to the terms of the Tenancy Agreement, '
'you are required to submit a statement as to the actual amount of Gross Receipts '
'of your business for the preceding calendar year, '
'which statement shall be certified by the Approved Auditors/External Accountants '
'(the "Certified Statement") at your sole cost. '
'The Certified Statement should be submitted on or before 30 June of each year.' lv_endof_line
lv_new_line
'<p><span>Please submit your Certified Statement to our designated email address: '
'<a href=xxx"">xxx</a>.' lv_endof_line
lv_new_line
'<p><span>If you have any questions or need further clarification about this requirement, '
'please do not hesitate to contact our Ms. Vivian Fok at 2629 7931.' lv_endof_line
lv_new_line
'<p><span>We appreciate your immediate attention to this matter. Thank you for your understanding and cooperation.' lv_endof_line
lv_new_line
'<p><span>Regards,</span></p>'
'<p><span>Commercial Letting Team</span></p>'
'</html>'
INTO lv_content RESPECTING BLANKS.
**********************************************************************
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING
text = lv_content
IMPORTING
buffer = lv_xstr
EXCEPTIONS
failed = 1
OTHERS = 2.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = lv_xstr
TABLES
binary_tab = lt_hex.
CALL METHOD cl_document_bcs=>create_document
EXPORTING
i_type = 'HTM'
i_hex = lt_hex
i_subject = lv_subject_short
RECEIVING
result = lo_document.
**********************************************************************
"add attachment
IF iv_send_attachment = abap_true.
TRY.
PERFORM get_binary_table.
CALL METHOD lo_document->add_attachment(
i_attachment_type = 'EXT'
i_attachment_subject = lv_subject_short && '.xlsx'
i_attachment_size = gv_size
i_att_content_hex = gt_binary_table ).
CATCH cx_salv_msg.
ENDTRY.
ENDIF.
**********************************************************************
CALL METHOD lo_send_request->set_document( lo_document ).
CALL METHOD lo_send_request->send(
EXPORTING
i_with_error_screen = 'X'
RECEIVING
result = lv_result ).
IF lv_result = 'X'.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.
CATCH cx_bcs INTO lo_ex_bcs.
ENDTRY.
ENDFORM.
FORM get_binary_table.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = gt_contract ).
gv_xstring = gr_table->to_xml( if_salv_bs_xml=>c_type_xlsx ).
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = gv_xstring
IMPORTING
output_length = gv_xlen
TABLES
binary_tab = gt_binary_table.
gv_size = gv_xlen.
CATCH cx_salv_msg.
ENDTRY.
ENDFORM.