abap - 发送邮件,邮件正文带表格和excel附件

abap - 发送邮件,邮件正文带表格和excel附件_第1张图片

发送内容 的数据获取:

  •  正文部分使用cl_document_bcs=>create_document静态方法实现
  •  传入参数为html内表结构 
      CLEAR lo_document .
      lo_document =  cl_document_bcs=>create_document(
                      i_type =    'HTM'
                      i_text =     lt_html
                      i_length =  conlengths
                      i_subject = lv_subject ).
  • 添加附件使用lo_document->add_attachment 
  • 传入参数为二进制数据(Excel的制作使用ZXLSX_WORKBENCH方式,百度搜ZXLSX_WORKBENCH就可以了)
      CALL METHOD lo_document->add_attachment
        EXPORTING
          i_attachment_type    = 'BIN'
          i_attachment_subject = lv_att_subject
          i_attachment_size    = lv_att_size
          i_att_content_hex    = lt_doc_table.

示例代码:

  DATA: lv_subject      TYPE so_obj_des,
        lo_send_request TYPE REF TO cl_bcs,
        lo_document     TYPE REF TO cl_document_bcs,
        conlengths      TYPE so_obj_len,
        bcs_exception   TYPE REF TO cx_bcs,
        bcs_message     TYPE string,
        lt_html         TYPE STANDARD TABLE OF w3html,  "存放HTML5代码的内表
        lw_html         TYPE w3html,                    "工作区
        lo_sender       TYPE REF TO cl_sapuser_bcs,     "发送人
        lv_to           TYPE adr6-smtp_addr,            "接收人
        lo_bcs_to       TYPE REF TO if_recipient_bcs,
        lv_cc           TYPE adr6-smtp_addr,            "抄送人
        lo_bcs_cc       TYPE REF TO if_recipient_bcs,
        lv_rawdata_01   TYPE mime_data,
        lv_doc_size     TYPE i,                                             "文件大小
        lt_doc_table    TYPE solix_tab,                                     "文件内容
        lv_att_size     TYPE so_obj_len,                                    "附件长度
        lv_att_subject  TYPE so_obj_des,                                    "附件名称
        lv_result       TYPE os_boolean,                "发送结果
        lo_fail         TYPE REF TO cx_bcs.             "异常信息

  DEFINE %%add_html.
    lw_html-line = &1.
    APPEND lw_html TO lt_html.
    CLEAR lw_html.
  END-OF-DEFINITION.

  SELECT * INTO TABLE @DATA(lt_emp) FROM ztlbmm_emp_email.

** 邮件主题
  lv_subject = '大仓多库位库存预警表'.
** 邮件正文
  %%add_html:'',
               '',
                 '',
                 '',
                 '',
               '',
               '',
                 '

为避免单个SKU存放多库位交货时,产品不能按批次先进先出原则,导致存在呆滞风险,', '烦请仓库重点关注对产品库位进行管控;单个SKU多库位存放的成品预警明细见附件:

', '', '', '', '', '', '', '', '', ''. LOOP AT lt_email INTO lw_email. "存放表格数据 %%add_html: '', '', '', '', '', '', '', ''. CLEAR:lw_email. ENDLOOP. %%add_html: '
装运点数据获取时间SKU总数多库位SKU总数多库位SKU占比增长率
', lw_email-name1, '', lw_email-zdate, '', lw_email-skun1, '', lw_email-skun2, '', lw_email-zcent, '', lw_email-zupsn, '
', '', ''. "开源项目ZXLSX_WORKBENCH使用方式 CALL FUNCTION 'ZXLWB_CALLFORM' EXPORTING iv_formname = 'ZMMR05B_TEMP' "Excel 模板 iv_context_ref = lt_excel[] "Excel 映射内表 会自动填充到模板 iv_viewer_suppress = 'X' IMPORTING ev_document_rawdata = lv_rawdata_01 "把EXCEL 转换为String类型的字符串 EXCEPTIONS OTHERS = 2. "附件部分 CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_rawdata_01 "传入ZXLSX_WORKBENCH处理的Excel字符串 IMPORTING output_length = lv_doc_size TABLES binary_tab = lt_doc_table. "传出二进制内容 "附件长度 lv_att_size = lv_doc_size. "附件名称 lv_att_subject = |{ sy-datum }_多库位预警报表.xlsx|. IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. RETURN. ENDIF. " 开始发送流程 TRY. "正文部分 CLEAR lo_document . lo_document = cl_document_bcs=>create_document( i_type = 'HTM' "正文选择HTML格式显示 i_text = lt_html "显示的内容 i_length = conlengths i_subject = lv_subject ). "邮件主题 "添加附件 CALL METHOD lo_document->add_attachment EXPORTING i_attachment_type = 'BIN' i_attachment_subject = lv_att_subject "附件主题 i_attachment_size = lv_att_size i_att_content_hex = lt_doc_table. "附件内容 "创建传输请求对象 CLEAR lo_send_request. lo_send_request = cl_bcs=>create_persistent( ). "将文件对象放进传输请求对象 CALL METHOD lo_send_request->set_document( lo_document ). " 发件人:前提是这个邮箱地址能发邮件,并且不需要密码 lo_sender = cl_sapuser_bcs=>create( sy-uname ). lo_send_request->set_sender( lo_sender ). " 收件人 lv_to = '这里填收件人邮箱' lo_bcs_to = cl_cam_address_bcs=>create_internet_address( lv_to ). CALL METHOD lo_send_request->add_recipient EXPORTING i_recipient = lo_bcs_to. " 抄送人 lv_cc = '这里填抄送人邮箱'. lo_bcs_cc = cl_cam_address_bcs=>create_internet_address( lv_cc ). CALL METHOD lo_send_request->add_recipient EXPORTING i_recipient = lo_bcs_cc i_copy = 'X'. "设置立即发送 lo_send_request->set_send_immediately( 'X' ). "与outbox关联 lo_send_request->send_request->set_link_to_outbox( 'X' ). "发送邮件 CALL METHOD lo_send_request->send( EXPORTING i_with_error_screen = 'X' RECEIVING result = lv_result ). CATCH cx_bcs INTO bcs_exception. bcs_message = bcs_exception->get_text( ). MESSAGE bcs_exception TYPE 'E'. EXIT. ENDTRY. IF lv_result EQ 'X'. COMMIT WORK AND WAIT. "提交事务 ELSE. ROLLBACK WORK. "事务回滚 ENDIF. IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. RETURN. ENDIF.

你可能感兴趣的:(ABAP,ABAP)