ABAP 发送邮件(正文部分需要表格&图片)

文章正文
发布时间:2025-01-03 05:26

上面截图是最后开发托付截图,右上角是公司LOGO,正文局部是表格。

如今初步开发邮件发送局部

1.上传图片

选择MIME知识库,选中SAP-PUBLIC 导入MIME对象

选择图片上传便可

2.写步调(步调局部只要发送邮件要害内容局部)

DATA:ls_data TYPE ty_data,
       lt_data TYPE TABLE OF ty_data.
  DATA:lt_body TYPE bcsy_teVt,
       ls_body TYPE soli.
  DATA:lZZZ_subject TYPE sood-objdes,
       lZZZ_title   TYPE sood-objdes.
  DATA lt_teVt       TYPE bcsy_teVt.
  DATA sent_to_all   TYPE os_boolean.
  DATA send_request  TYPE REF TO cl_bcs.
  DATA recipient     TYPE REF TO if_recipient_bcs.
  DATA: lo_sender           TYPE REF TO if_sender_bcs.
  DATA document      TYPE REF TO cl_document_bcs.
  DATA:lZZZ_zcsr TYPE ad_smtpadr.
  DATA bcs_eVception TYPE REF TO cV_bcs.
*&---------------------------------------------------------------------*
*& GET LOGO DATA DEFINE
*&---------------------------------------------------------------------*
  DATA : lt_pick_data      TYPE TABLE OF w3mime,
         lt_query          TYPE TABLE OF w3query,
         ls_query          TYPE w3query,
         lt_html           TYPE TABLE OF w3html,
         lZZZ_return_code    TYPE  w3param-ret_code,
         lZZZ_content_type   TYPE  w3param-cont_type,
         lZZZ_content_length TYPE  w3param-cont_len,
         lZZZ_url(255)       TYPE c,
         lZZZ_pic_size       TYPE i,
         lZZZ_teVt_img       TYPE so_teVt255.
  DATA: o_mr_api         TYPE REF TO if_mr_api.

  DATA is_folder TYPE boole_d.
  DATA lZZZ_content TYPE Vstring.
  DATA lZZZ_loio TYPE skwf_io.
  DATA : lo_mime_helper    TYPE REF TO cl_gbt_multirelated_serZZZice.
  DATA:l_obj_len         TYPE i,
       lZZZ_graphic_length TYPE i,
       l_offset          TYPE i,
       l_length          TYPE i,
       l_diff            TYPE i.
  DATA:lr_Vstr  TYPE string,
       ls_soliV TYPE soliV,
       lt_soliV TYPE soliV_tab.

DATA b64data TYPE string.
*&---------------------------------------------------------------------*
*& mail Content
*&---------------------------------------------------------------------*

*-----  Email Subject  -----------*
  lZZZ_title = '<b>采购量质分比方格通知:</b>'.
*-----  Email Company LOGO  -----------*
  IF o_mr_api IS INITIAL.
    o_mr_api = cl_mime_repository_api=>if_mr_api~get_api).
  ENDIF.
*----add logo picture-------*
  CALL METHOD o_mr_api->get
    EXPORTING
      i_url              '/SAP/PUBLIC/logo.bmp'
    IMPORTING
      e_is_folder        = is_folder
      e_content          = lZZZ_content
      e_loio             = lZZZ_loio
    EXCEPTIONS
      parameter_missing  1
      error_occured      2
      not_found          3
      permission_failure 4
      OTHERS             5.

  CALL FUNCTION 'SSFC_BASE64_ENCODE'
    EXPORTING
      bindata = lZZZ_content
    IMPORTING
      b64data = b64data.
  IF sy-subrc <> 0.

  ENDIF.
  l_obj_len strlen( b64data ).
  lZZZ_graphic_length strlen( b64data ).
  lr_Vstr = b64data.
  l_offset 0.
  l_length 255.

  CLEAR : ls_body.
  ls_body-line '<img src=""    align="left" />'.
  APPEND ls_body TO lt_body.

  CLEAR : ls_body.
  ls_body-line '</br>'.
  APPEND ls_body TO lt_body.

*-----  Email Attachment name  -----------*
*----Body of the email here--------*
  ls_body-line = '<b>采购量质分比方格通知:</b>'.
  APPEND ls_body TO lt_body.  "Body of the email
  CLEAR : ls_body.
  APPEND ls_body TO lt_body..
  CLEAR : ls_body.

*----add form-------*
  ls_body-line = '<table cellspacing="0">'.
  APPEND ls_body TO lt_body.
  CLEAR : ls_body.
  ls_body-line = '<tr><td>通知单号</td><td>查验批次号</td><td>物料号</td><td>物料形容</td><td>入库批号</td><td>查验名目</td><td>查验结果</td><td>查验结论</td></tr>'.
  APPEND ls_body TO lt_body.
  LOOP AT lt_data INTO ls_data.
    CALL FUNCTION 'CONxERSION_EXIT_MATN1_OUTPUT'
      EXPORTING
        input  = ls_data-matnr
      IMPORTING
        output = ls_data-matnr.
    CLEAR : ls_body.
    ls_body-line '<tr><td>' && ls_data-qmnum && '</td>' &&
     '<td>' && ls_data-prueflos && '</td>' &&
      '<td>' && ls_data-matnr && '</td>' &&
       '<td>' && ls_data-maktV && '</td>' &&
        '<td>' && ls_data-charg && '</td>' &&
         '<td>' && ls_data-zqmVm && '</td>' &&
          '<td>' && ls_data-zqmjg && '</td>' &&
           '<td>' && ls_data-zqmjl && '</td></tr>'.

    APPEND ls_body TO lt_body.
  ENDLOOP.
  CLEAR : ls_body.
  ls_body-line '</table>'.
  APPEND ls_body TO lt_body.
  CLEAR ls_body.
  ls_body-line = '<b>备注:含质、外不雅观分比方格、请加速评审</b><br></br>'.
  APPEND ls_body TO lt_body.
  lt_teVt[] = lt_body.
*&---------------------------------------------------------------------*
*& Send mail
*&---------------------------------------------------------------------*
  TRY.

*     -------- create persistent send request ------------------------
      send_request = cl_bcs=>create_persistent).

*     -------- create and set document -------------------------------
*      pdf_content = cl_document_bcs=>Vstring_to_soliV( pdf_Vstring ).

*         " Send in RAW format
      document = cl_document_bcs=>create_document(
            i_type    'HTM' "'PDF'
            i_teVt    = lt_teVt
*            I_HEX     = PDF_CONTENT
*            I_LENGTH  = PDF_SIZE
            i_subject = lZZZ_title ).                         "#EC NOTEXT
      "add logo
*   ---------   add document object to send request
      send_request->set_document( document ).

*   --------- Set the e-mail address of the sender:--------------====
*      lZZZ_sender_email = lZZZ_smtp_addr.
*          IF NOT lZZZ_sender_email IS INITIAL.
      "指定发件人正在SBWP查察不到已发件
*            LO_SENDER = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(
*                      I_ADDRESS_STRING = Lx_SENDER_EMAIL ).
*          ENDIF.
      send_request->set_sender( lo_sender ).

*     --------- add recipient (e-mail address) -----------------------
      "获与接管人地址
      SELECT SINGLE zcsryV INTO lZZZ_zcsr
        FROM zqmt010
         WHERE werks = ls_data-werks
           AND qmart = ls_data-qmart
           AND bkgrp = ls_data-bkgrp.
      IF lZZZ_zcsr IS INITIAL.
        MESSAGE e000(zqmWITH TEXT-009.
      ENDIF.
*     create recipient object
      recipient = cl_cam_address_bcs=>create_internet_address( lZZZ_zcsr ).
*     add recipient object to send request
      send_request->add_recipient( recipient ).
*     ---------- send document ---------------------------------------
      send_request->send_request->set_link_to_outboV'X' ).

      sent_to_all = send_request->send( i_with_error_screen 'X' ).

      COMMIT WORK.

      IF sent_to_all IS INITIAL.
        MESSAGE e000(zqmWITH TEXT-008.
      ELSE.
        SUBMIT rsconn01 WITH mode 'INT'
        AND RETURN.
        MESSAGE s000(zqmWITH TEXT-007.
      ENDIF.
*   ------------ eVception handling ----------------------------------
*   replace this rudimentary eVception handling with your own one !!!
    CATCH cV_bcs INTO bcs_eVception.
      MESSAGE i865(soWITH bcs_eVception->error_type.
  ENDTRY.