ABAP-发送PDF附件邮件
DATA: fm_name TYPE rs38l_fnam. DATA: gwa_result TYPE ssfcrescl, gwa_output TYPE ssfcompop, gwa_control TYPE ssfctrlop. DATA: ls_head TYPE zmms010, "定义表头内表 lt_item TYPE TABLE OF zmms010 WITH HEADER LINE. "定义表值内表 DATA: gv_size TYPE i. DATA: gz_lines TYPE TABLE OF tline. DATA: gs_lines TYPE solix_tab . DATA:lv_xstring TYPE xstring. "pdf附件 DATA: lo_bcs TYPE REF TO cl_bcs, lo_doc_bcs TYPE REF TO cl_document_bcs, l_sender TYPE REF TO cl_sapuser_bcs, l_send_result TYPE os_boolean, l_subject TYPE so_obj_des. DATA: lo_recipient TYPE REF TO if_recipient_bcs. "收件人 DATA: l_to TYPE adr6-smtp_addr."收件人地址 DATA: l_file_size_char TYPE so_obj_len. DATA: lt_solisti1 TYPE soli_tab , "定义邮件内容 ls_solisti1 TYPE soli. DATA : lo_mime_helper TYPE REF TO cl_gbt_multirelated_service. CREATE OBJECT lo_doc_bcs. * 邮件标题 l_subject = '邮件标题'. * 邮件正文 ls_solisti1 = '<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xfa="http://www.xfa.org/schema/xfa-template/2.1/"> <head> <meta http-equiv = "Content-Type" content = "text/html; charset = utf-8"></head>'. APPEND ls_solisti1 TO lt_solisti1. ls_solisti1 = '<BODY>'. APPEND ls_solisti1 TO lt_solisti1. CLEAR ls_solisti1. ls_solisti1 = '<SPAN style="font-family:Calibri;font-size:小四;">'. APPEND ls_solisti1 TO lt_solisti1. CONCATENATE '备注:' '<BR><BR>' INTO ls_solisti1. APPEND ls_solisti1 TO lt_solisti1. CONCATENATE '重要提示:此邮件及附件具有保密性质,包含商业秘密,受法律保护不得泄露.' '<BR><BR>' INTO ls_solisti1. APPEND ls_solisti1 TO lt_solisti1. CLEAR ls_solisti1. ls_solisti1 ='</SPAN>'. APPEND ls_solisti1 TO lt_solisti1. *CREATE THE DOCUMENT WITH CONTENTS CREATE OBJECT lo_mime_helper. CALL METHOD lo_mime_helper->set_main_html EXPORTING content = lt_solisti1 description = 'Automatic payment'. "title lo_doc_bcs = cl_document_bcs=>create_from_multirelated( i_subject = l_subject i_multirel_service = lo_mime_helper i_language = sy-langu i_importance = '1' ). "附件PDF参数 gwa_control-no_dialog = 'X'. gwa_control-no_close = ' '. gwa_control-preview = ' '. gwa_control-getotf = 'X'. gwa_control-langu = sy-langu. gwa_output-tdnewid = 'X'. gwa_output-tdimmed = 'X'. gwa_output-tddelete = 'X'. gwa_output-tddest = 'LP01'. "调用smartforms CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = 'SMARTFORMS' * VARIANT = ' ' * DIRECT_CALL = ' ' IMPORTING fm_name = fm_name EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. "smartforms数据处理 LOOP AT gt_table INTO gw_table WHERE sel EQ abap_true GROUP BY ( ebeln = gw_table-ebeln )."按订单分组 LOOP AT gt_table INTO gi_table WHERE ebeln EQ gw_table-ebeln . MOVE-CORRESPONDING gi_table TO g_lt_item. APPEND g_lt_item TO g_lt_item. ENDLOOP. CALL FUNCTION fm_name EXPORTING control_parameters = gwa_control output_options = gwa_output user_settings = '' ls_head = ls_head IMPORTING job_output_info = gwa_result TABLES lt_item = lt_item ""传值进入smartforms EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. *Convert OTF to PDF CALL FUNCTION 'CONVERT_OTF' EXPORTING format = 'PDF' IMPORTING bin_filesize = gv_size bin_file = lv_xstring TABLES otf = gwa_result-otfdata lines = gz_lines EXCEPTIONS err_max_linewidth = 1 err_format = 2 err_conv_not_possible = 3 err_bad_otf = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. "转换二进制 CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_xstring TABLES binary_tab = gs_lines. * 附件长度 l_file_size_char = gv_size. * 添加附件,可以添加多个附件 CALL METHOD lo_doc_bcs->add_attachment EXPORTING i_attachment_type = 'BIN' i_attachment_subject = 'PO' && gw_zmmf010-ebeln && '.PDF' i_attachment_size = l_file_size_char i_att_content_hex = gs_lines. ENDLOOP. lo_bcs = cl_bcs=>create_persistent( ). l_sender = cl_sapuser_bcs=>create( sy-uname ). CALL METHOD lo_bcs->set_sender EXPORTING i_sender = l_sender. DATA:lf_error TYPE REF TO cx_address_bcs. "设置接收人\抄送人邮箱 IF gx_zmmf010-zzemail IS NOT INITIAL. TRY. l_to = '1234567@QQ.COM'."邮箱地址 lo_recipient = cl_cam_address_bcs=>create_internet_address( l_to ). lo_bcs->add_recipient( i_recipient = lo_recipient i_express = 'X' i_copy = ' '"设置是否抄送 i_blind_copy = ' ' i_no_forward = ' ' ). CATCH cx_address_bcs INTO lf_error . MESSAGE '邮件地址异常!' TYPE 'I'. RETURN. ENDTRY. ENDIF. "提交邮件发送申请 lo_bcs->set_document( i_document = lo_doc_bcs ). CALL METHOD lo_bcs->send( EXPORTING i_with_error_screen = 'X' RECEIVING result = l_send_result ). IF l_send_result = 'X'. COMMIT WORK AND WAIT. MESSAGE '邮件发送成功' TYPE 'S'. CLEAR ls_modify_email. ELSE. ROLLBACK WORK. MESSAGE '邮件发送失败' TYPE 'E'. ENDIF. WAIT UP TO 2 SECONDS. SUBMIT rsconn01 WITH mode = 'INT' WITH output = 'X' AND RETURN.