PROGRAM TO SEND MAIL FROM SAP|PROGRAM TO SEND MAIL FROM SAP WITH ATTACHMENT|4 FUNCTION MODULE USED FOR SEND MAIL FROM SAP

PROGRAM TO SEND MAIL FORM SAP| Program to send mail from SAP WITH ATTACHMENT|FUNCTION MODULE USED FOR SEND MAIL FROM SAP

Here we have a requirement to send attachment of invoice whenever is Purchase Order released, So we had create a method using badi (ZCL_IM_ME_PROCESS_PO_CUST IF_EX_ME_PROCESS_PO_CUST~POST) and place the below example code in our method to send mail from sap with attachment.

PROGRAM TO SEND MAIL FROM SAP

PROGRAM TO SEND MAIL FROM SAP

***************PROGRAM TO SEND MAIL FROM SAP*********
********PROGRAM TO SEND MAIL FROM SAP WITH ATTACHMENT********
********FUNCTION MODULE USED FOR SEND MAIL FROM SAP*************

DATA : ls_mepoheader TYPE mepoheader.

    DATA : ls_nast           TYPE nast,
           ls_doc            TYPE meein_purchase_doc_print,
           ls_ex_nast        TYPE  nast,
           ls_addr_key       TYPE addr_key,
           l_background      TYPE char30,
           ls_control_param  TYPE ssfctrlop,
           ls_composer_param TYPE ssfcompop,
           ls_recipient      TYPE  swotobjid,
           ls_sender         TYPE  swotobjid,
           lf_retcode        TYPE sy-subrc,
           lf_device         TYPE tddevice,
           ls_itcpo          TYPE itcpo,
           lf_fm_name        TYPE rs38l_fnam,
           lv_druvo          TYPE t166k-druvo,
           lv_xfz            TYPE char1,
           lv_gst_v          TYPE stcd3,
           lt_xkomk          TYPE   TABLE OF komk,
           it_item_gst       TYPE zpo_item_gst,
           ls_job_info       TYPE ssfcrescl,
           lt_otf            TYPE   tsfotf,
           lt_content_txt    TYPE soli_tab,
           lt_content_hex    TYPE solix_tab,
           ls_transfer_bin   TYPE sx_boolean,
           ls_objhead        TYPE soli_tab,
           lv_len_in         TYPE so_obj_len,
           g_mail_subject    TYPE so_obj_des,
           lv_att_name       TYPE sood-objdes,
           it_mail_id        TYPE TABLE OF zibs_mail,
           it_body           TYPE soli_tab,
           lv_message        TYPE string,
           ls_toa_dara       TYPE toa_dara,
           ls_arc_params     TYPE arc_params,
           lt_pgr            TYPE zpo_cc_mail.

    ls_mepoheader = im_header->get_data( ).

    if ls_mepoheader-frgke eq 'R'.

      SELECT SINGLE * FROM ekko INTO @DATA(ls_ekko) WHERE ebeln = @im_ebeln.
    IF sy-subrc EQ 0.
      ls_nast-mandt = sy-mandt.
      ls_nast-kappl = 'EF'.
      ls_nast-objky = im_ebeln.
      ls_nast-spras = sy-langu.
      ls_nast-parnr = ls_ekko-lifnr.
      ls_nast-parvw = 'LF'.
      ls_nast-erdat = ls_ekko-aedat.
      ls_nast-nacha = '1'.
      ls_nast-vsztp = '3'.
      ls_nast-usnam = sy-uname.
      ls_nast-ldest = 'LP01'.
      ls_nast-objtype = 'BUS2012'.
    ENDIF .

    CALL FUNCTION 'ME_READ_PO_FOR_PRINTING'
      EXPORTING
        ix_nast   = ls_nast
        ix_screen = 'X'
      IMPORTING
        doc       = ls_doc
        ex_nast   = ls_ex_nast
      CHANGING
        cx_druvo  = lv_druvo
*       CX_FROM_MEMORY       = 'X'
      .
    IF ls_mepoheader-frgke = 'R'.
      l_background = 'APPROVED_TILTED_COPY1'.
    ELSE.
      l_background = 'BACKGROUND_NOTAPPROVED1'."'NOT_APPROVED_TILTED1'.
    ENDIF.

    READ TABLE ls_doc-xekpo WITH KEY loekz = space TRANSPORTING NO FIELDS.
    IF sy-subrc <> 0.
      MESSAGE 'No printout found' TYPE 'E'.
      EXIT.
    ENDIF.

    IF ls_nast-adrnr IS INITIAL.
      SELECT SINGLE lifnr ,adrnr,name1 INTO @DATA(ls_lfa1) FROM lfa1 WHERE lifnr = @ls_ekko-lifnr.
      IF sy-subrc EQ 0.
        ls_addr_key-addrnumber = ls_lfa1-adrnr.
      ENDIF .

      SELECT   lifnr ,name1,smtp_addr
     FROM lfa1 AS l
     INNER JOIN adr6 AS ad
     ON l~adrnr = ad~addrnumber
     AND ad~flgdefault = @abap_true
     INTO TABLE @DATA(lt_vndr_email)
       WHERE lifnr = @ls_ekko-lifnr.

    ENDIF .

    CALL FUNCTION 'WFMC_PREPARE_SMART_FORM'
      EXPORTING
        pi_nast       = ls_nast
        pi_addr_key   = ls_addr_key
        pi_repid      = sy-repid
      IMPORTING
        pe_returncode = lf_retcode
        pe_itcpo      = ls_itcpo
        pe_device     = lf_device
        pe_recipient  = ls_recipient
        pe_sender     = ls_sender.

    IF lf_retcode = 0.
      MOVE-CORRESPONDING ls_itcpo TO ls_composer_param.

      ls_control_param-device      = lf_device.
      ls_control_param-no_dialog   = 'X'.
      ls_control_param-preview     = abap_true.
      ls_control_param-langu       = ls_nast-spras.
      ls_control_param-getotf      = ls_itcpo-tdgetotf.

      ls_composer_param-tdnoprev = 'X'.
      ls_composer_param-tddest = 'LP01'.
      ls_composer_param-tdnoprint  = 'X'.
      ls_control_param-preview  = 'X'.
      ls_control_param-getotf = 'X'.
      ls_control_param-no_dialog = 'X'.
      ls_control_param-langu = sy-langu.
    ENDIF.

    IF ls_doc-xtkomv IS INITIAL.
      SELECT * INTO TABLE ls_doc-xtkomv FROM konv
                                       WHERE knumv = ls_doc-xekko-knumv.
    ENDIF.


    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname           = 'ZMM_PO_PRINT'
      IMPORTING
        fm_name            = lf_fm_name
      EXCEPTIONS
        no_form            = 1
        no_function_module = 2
        OTHERS             = 3.
    IF sy-subrc <> 0.
      "-----  error handling ------------
*      ent_retco = sy-subrc.
      IF sy-subrc = 1.
        MESSAGE e001(/smb40/ssfcomposer).
      ENDIF.
      IF sy-subrc = 2.
        MESSAGE e002(/smb40/ssfcomposer).
      ENDIF.
*      PERFORM protocol_update_i.
    ENDIF.

    SELECT *
      FROM j_1imocomp
      INTO  TABLE @DATA(it_excise)
      FOR ALL ENTRIES IN @ls_doc-xekpo
      WHERE werks = @ls_doc-xekpo-werks.




    CALL FUNCTION lf_fm_name
      EXPORTING
        archive_index      = ls_toa_dara
        archive_parameters = ls_arc_params
        control_parameters = ls_control_param
        mail_recipient     = ls_recipient
        mail_sender        = ls_sender
        output_options     = ls_composer_param
        is_ekko            = ls_doc-xekko
        user_settings      = ' '  "Disable User Printer
        is_pekko           = ls_doc-xpekko
        is_nast            = ls_nast
        iv_from_mem        = abap_true
        iv_druvo           = lv_druvo
        iv_xfz             = lv_xfz
        iv_background      = l_background
        v_gstin_vendor     = lv_gst_v
      IMPORTING
        job_output_info    = ls_job_info
      TABLES
        it_ekpo            = ls_doc-xekpo[]
        it_ekpa            = ls_doc-xekpa[]
        it_pekpo           = ls_doc-xpekpo[]
        it_eket            = ls_doc-xeket[]
        it_tkomv           = ls_doc-xtkomv[]
        it_ekkn            = ls_doc-xekkn[]
        it_ekek            = ls_doc-xekek[]
        it_komk            = lt_xkomk[]
        it_item_gst        = it_item_gst
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.


    APPEND LINES OF ls_job_info-otfdata TO lt_otf.
    CLEAR ls_job_info-otfdata.

    LOOP AT lt_otf ASSIGNING FIELD-SYMBOL(<ls_otf>).
      APPEND VALUE #( line =  <ls_otf>-tdprintcom && <ls_otf>-tdprintpar )  TO lt_content_txt.
    ENDLOOP.

    CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'
      EXPORTING
        format_src      = 'OTF'
        format_dst      = 'PDF'
        devtype         = 'PRINTER'
      CHANGING
        transfer_bin    = ls_transfer_bin
        content_txt     = lt_content_txt
        content_bin     = lt_content_hex
        objhead         = ls_objhead
        len             = lv_len_in
      EXCEPTIONS
        err_conv_failed = 1
        OTHERS          = 2.

    g_mail_subject = 'PO#' && ` ` && im_ebeln && ` ` && 'Vendor Name' && ` ` && ls_lfa1-name1.

    SELECT smtp_addr
     FROM usr21 AS l
     INNER JOIN adr6 AS ad
     ON l~addrnumber = ad~addrnumber AND l~persnumber = ad~persnumber
     AND ad~flgdefault = @abap_true
     INTO TABLE @DATA(lt_usr_email)
       WHERE l~bname = @ls_ekko-ernam.



    TRY.
        APPEND VALUE #( action = 'R' email = lt_vndr_email[ 1 ]-smtp_addr ) TO it_mail_id .

      CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    TRY.
        APPEND VALUE #( action = 'R' email = lt_usr_email[ 1 ]-smtp_addr cc = 'X' ) TO it_mail_id .

        CATCH cx_sy_itab_line_not_found.
    ENDTRY.

    TRY.
          SELECT * FROM zpo_cc_mail INTO lt_PGR
          WHERE ekgrp = ls_ekko-ekgrp.

          APPEND VALUE #( action = 'R' email = lt_pgr-smtp_addr cc = 'X' ) TO it_mail_id .
        ENDSELECT.
      CATCH cx_sy_itab_line_not_found.
    ENDTRY.




    lv_message = 'Dear' && ` ` && ls_lfa1-name1.
    APPEND VALUE #( line = lv_message ) TO it_body.
    APPEND VALUE #( line = '<BR>' ) TO it_body.
    APPEND VALUE #( line = '<BR>' ) TO it_body.
    lv_message  = 'Please find the Purchase Order #' && ` ` && im_EBELN.
    APPEND VALUE #( line = lv_message ) TO it_body.
    APPEND VALUE #( line = '<BR>' ) TO it_body.
    APPEND VALUE #( line = '<BR>' ) TO it_body.

    lv_message  = 'Thanks & Reagrds'.
    APPEND VALUE #( line = lv_message ) TO it_body.
     APPEND VALUE #( line = '<BR>' ) TO it_body.
     APPEND VALUE #( line = '<BR>' ) TO it_body.
    lv_message  = 'ABP Procurment Team'.
    APPEND VALUE #( line = lv_message ) TO it_body.
    APPEND VALUE #( line = '<BR>' ) TO it_body.

    lv_att_name = 'Purchase Order'.

    CALL FUNCTION 'ZIBS_SEND_MAIL_WITH_ATTACHMENT'
      EXPORTING
        i_type            = 'HTM'
        i_message_body    = it_body
        i_subject         = g_mail_subject
        i_attachment_type = 'PDF'
        i_attachment_name = lv_att_name
        i_att_content_hex = lt_content_hex "it_solix
      TABLES
        i_email_id        = it_mail_id
      EXCEPTIONS
        ex_sender         = 1
        OTHERS            = 2.
    IF sy-subrc <> 0.
*Implement suitable error handling here
    ENDIF.

FUCNTION MODULE USED FOR SEND MAIL FROM SAP

  1. CALL FUNCTION ‘ME_READ_PO_FOR_PRINTING’.
  2. CALL FUNCTION ‘WFMC_PREPARE_SMART_FORM’.
  3. CALL FUNCTION ‘SSF_FUNCTION_MODULE_NAME’.
  4. CALL FUNCTION ‘SX_OBJECT_CONVERT_OTF_PDF’
  5. CALL FUNCTION ‘ZIBS_SEND_MAIL_WITH_ATTACHMENT’.
FUNCTION MODULE USED FOR SEND MAIL FROM SAP
FUNCTION MODULE USED FOR SEND MAIL FROM SAP

OUTPUT OF PROGRAM TO SEND MAIL FROM SAP

FUNCTION MODULE USED FOR SEND MAIL FROM SAP

You May Also Like:

For the next blog please connect with us and follow us on twitter.com/einfonett

Leave a Comment

%d bloggers like this: