SAP ABAP Function Module to send email

 Custom Functional Module to send email, either with plain body or HTML body as input


FUNCTION ZEMAIL.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IP_SENDER) TYPE  ADR6-SMTP_ADDR OPTIONAL
*"     VALUE(IP_SUBJECT) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     VALUE(EP_MSG) TYPE  CHAR200
*"  TABLES
*"      IT_TO STRUCTURE  ZEMAIL_ID OPTIONAL
*"      IT_CC STRUCTURE  ZEMAIL_ID OPTIONAL
*"      IT_BCC STRUCTURE  ZEMAIL_ID OPTIONAL
*"      IT_BODY STRUCTURE  SOLISTI1 OPTIONAL
*"      IT_HTML_BODY STRUCTURE  SOLISTI1 OPTIONAL
*"----------------------------------------------------------------------

DATA IT_CONTENTS TYPE STANDARD TABLE OF SOLISTI1,
       WA_CONTENTS TYPE SOLISTI1,
       W_DOCUMENT  TYPE REF TO CL_DOCUMENT_BCS.

  DATA:  "li_otf            type table of itcoo,
    "li_pdf_tab        type table of tline,
    "li_content_txt    type soli_tab,
*       li_content_hex    type solix_tab,
    LI_OBJHEAD   TYPE SOLI_TAB,
    GI_MAIN_TEXT TYPE STANDARD TABLE OF SOLISTI1,        "type bcsy_text.
    WA_MAIN_TEXT TYPE SOLISTI1.

  DATA "IT_CONTENTS TYPE STANDARD TABLE OF solisti1,
    "wa_contents TYPE solisti1,
    TEXT     TYPE CHAR100,
    TEXT3    TYPE CHAR100,
    TEXT1    TYPE STRING,
    TEXT2    TYPE STRING,
    LV_AMT1  TYPE CHAR15,
    LV_AMT2  TYPE CHAR15,
    LV_AMT3  TYPE CHAR15,
    LV_AMT4  TYPE CHAR15,
    LV_DMBTR TYPE DMBTR,
    LV_CNT TYPE I.
*/.. Work Area Declarations

  DATALW_CONTROL_PARAMETERS TYPE SSFCTRLOP,
        LW_OUTPUT_OPTIONS     TYPE SSFCOMPOP,
        LW_SSFCRESCL          TYPE SSFCRESCL,
        LW_CONTENT            TYPE SOLI,
        LW_OTF                TYPE ITCOO.

*/..Variables Decalrations

  DATAGV_FNAME        TYPE RS38L_FNAM,       "Fucntion Module
        GV_SUBJECT      TYPE SO_OBJ_DES,
        GV_TITLE        TYPE SO_OBJ_DES,
        LV_BIN_FILESIZE TYPE I,
        LV_TRANSFER_BIN TYPE SX_BOOLEAN,
        LV_LEN          TYPE SO_OBJ_LEN,
        LV_EMAIL        TYPE AD_SMTPADR,
        LV_SENT_TO_ALL  TYPE OS_BOOLEAN,
        LV_ATT_NAME     TYPE CHAR50,
        LV_SUB          TYPE STRING.         "so_obj_des.

*/.. Class Declarations

  DATAGO_SEND_REQUEST  TYPE REF TO  CL_BCS,
        GO_DOCUMENT      TYPE REF TO  CL_DOCUMENT_BCS,
        LO_RECIPIENT     TYPE REF TO  IF_RECIPIENT_BCS,
        LO_BCS_EXCEPTION TYPE REF TO  CX_BCS.

DATASEND_REQUEST       TYPE REF TO CL_BCS.
*DATA: TEXT               TYPE BCSY_TEXT.
DATADOCUMENT           TYPE REF TO CL_DOCUMENT_BCS.
DATASENDER             TYPE REF TO CL_SAPUSER_BCS.
DATASENDER1            TYPE REF TO CL_CAM_ADDRESS_BCS.
DATARECIPIENT          TYPE REF TO IF_RECIPIENT_BCS.
DATABCS_EXCEPTION      TYPE REF TO CX_BCS.
DATASENT_TO_ALL        TYPE OS_BOOLEAN.
DATATL_CONTENTS        TYPE STANDARD TABLE OF SOLI.

CONSTANTS:
*-- Constants used in the body of the Email (HTML)
  C_HTM      TYPE CHAR3   VALUE 'HTM',
  C_SPACE(6TYPE C       VALUE ' ',
  C_NEW_LINE TYPE CHAR255 VALUE '<br>'.

DATA GV_FNAME1       TYPE RS38L_FNAM.

*/.. Internal Table Declaration

DATA:  LI_OTF          TYPE TABLE OF ITCOO,
       LI_OTF1         TYPE TABLE OF ITCOO,
       LI_PDF_TAB      TYPE TABLE OF TLINE,
       LI_CONTENT_TXT  TYPE SOLI_TAB,
       LI_CONTENT_HEX  TYPE SOLIX_TAB.

DATA:   BEGIN OF wa,
         data(255),
        END OF wa.
DATA:  itab LIKE STANDARD TABLE OF wa WITH HEADER LINE.

  REFRESH LI_CONTENT_HEX,
            LI_OBJHEAD.

  CLEAR   LV_TRANSFER_BINLV_TRANSFER_BIN,
            LV_LENIT_CONTENTS[].

     IF IP_SENDER IS INITIAL OR IT_TO[] IS INITIAL.
        EP_MSG 'Eneter sender and To Email ID'.
     ELSEIF IP_SUBJECT IS INITIAL.
        EP_MSG 'Enter Subject'.
     ELSE.

   if it_html_body[] is INITIAL.

    "email body
    WA_CONTENTS-LINE '<HTML> <BODY>'.
    APPEND WA_CONTENTS TO IT_CONTENTS.
    CLEAR WA_CONTENTS.

*    CONCATENATE '<p style="font-family:Calibri;font-size:15;">' 'Dear' C_SPACE  GS_LIST-NAME1 ',' INTO WA_CONTENTS-LINE.
    WA_CONTENTS-LINE '<p style="font-family:Calibri;font-size:15;">'.
    APPEND WA_CONTENTS TO IT_CONTENTS.
    CLEAR WA_CONTENTS.

    LOOP AT IT_BODY.
"new line
    WA_CONTENTS-LINE '<br>'.
    APPEND WA_CONTENTS TO IT_CONTENTS.
    CLEAR WA_CONTENTS.

    if it_body-line is NOT INITIAL.
*        REPLACE ALL OCCURRENCES OF space in it_body-line with C_SPACE.
*         REPLACE FIRST OCCURRENCE OF space in it_body-line with C_SPACE.
    clear ITAB[]lv_cnt.
    SPLIT it_body-line AT space INTO TABLE itab.

   loop at itab.
    lv_cnt lv_cnt + 1.
    if lv_cnt and itab-data is NOT INITIAL.
       WA_CONTENTS-LINE itab-data.
    else.
    concatenate WA_CONTENTS-LINE itab-data into WA_CONTENTS-LINE separated by C_SPACE.
    endif.
   endloop.

    APPEND WA_CONTENTS TO IT_CONTENTS.
    CLEAR WA_CONTENTS.

    endif.

    clear IT_BODY.
    ENDLOOP.

    WA_CONTENTS-LINE '<br>'.
    APPEND WA_CONTENTS TO IT_CONTENTS.
    CLEAR WA_CONTENTS.

    WA_CONTENTS-LINE '</BODY> </HTML>'.
    APPEND WA_CONTENTS TO IT_CONTENTS.
    CLEAR WA_CONTENTS.

   else.
      it_contents[] IT_HTML_BODY[].
   endif.


  TRY.
*     -------- create persistent send request ------------------------
      GO_SEND_REQUEST CL_BCS=>CREATE_PERSISTENT).

*     -------- create and set document -------------------------------
*     create document from internal table with text

      GO_DOCUMENT CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
                      I_TYPE    'HTM'
                      I_TEXT    IT_CONTENTS
*                      i_length  = '12'
                      I_SUBJECT '' ).             "'


      CALL METHOD GO_SEND_REQUEST->SET_MESSAGE_SUBJECT
        EXPORTING
          IP_SUBJECT IP_SUBJECT.


      IF NOT LI_CONTENT_HEX IS INITIAL.
        GO_DOCUMENT->ADD_ATTACHMENT(
             I_ATTACHMENT_TYPE      'PDF'
             I_ATTACHMENT_SUBJECT   'ATTACHMENT' "LV_ATT_NAME    "gv_title   "attachment subject
             I_ATTACHMENT_SIZE      LV_LEN
             I_ATT_CONTENT_HEX      LI_CONTENT_HEX ).
      ENDIF.

      CALL METHOD GO_SEND_REQUEST->SET_DOCUMENTGO_DOCUMENT ).

*** Send mail using Email_ID
      SENDER1 CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESSIP_SENDER ).
      CALL METHOD GO_SEND_REQUEST->SET_SENDER
        EXPORTING
          I_SENDER SENDER1.

"TO EMAIL IDS
      LOOP AT IT_TO WHERE email is NOT INITIAL.
        LO_RECIPIENT CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESSIT_TO-EMAIL ).
*     add recipient with its respective attributes to send request
        CALL METHOD GO_SEND_REQUEST->ADD_RECIPIENT
          EXPORTING
            I_RECIPIENT LO_RECIPIENT
            I_EXPRESS   'X'.
      ENDLOOP.

      "cc
      LOOP AT IT_CC WHERE EMAIL IS NOT INITIAL.
        LO_RECIPIENT CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESSIT_CC-EMAIL ).
*     add recipient with its respective attributes to send request
        CALL METHOD GO_SEND_REQUEST->ADD_RECIPIENT
          EXPORTING
            I_RECIPIENT LO_RECIPIENT
            I_COPY      'X'.
      ENDLOOP.

      "Bcc
      LOOP AT IT_BCC.
        LO_RECIPIENT CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESSIT_BCC-EMAIL ).
*     add recipient with its respective attributes to send request
        CALL METHOD GO_SEND_REQUEST->ADD_RECIPIENT
          EXPORTING
            I_RECIPIENT  LO_RECIPIENT
            I_BLIND_COPY 'X'.
      ENDLOOP.


* set outbox flag
*  try.
*      if outbox = 'X'.
      CALL METHOD GO_SEND_REQUEST->SEND_REQUEST->SET_LINK_TO_OUTBOX'X' ).
*      endif.
*    catch cx_bcs.
*  endtry.

*     ---------- send document ---------------------------------------
*    TRY.
      CALL METHOD GO_SEND_REQUEST->SET_SEND_IMMEDIATELY
        EXPORTING
          I_SEND_IMMEDIATELY 'X'.
*     CATCH cx_send_req_bcs .
*    ENDTRY.

      CALL METHOD GO_SEND_REQUEST->SEND(
        EXPORTING
          I_WITH_ERROR_SCREEN 'X'
        RECEIVING
          RESULT              LV_SENT_TO_ALL ).

      IF LV_SENT_TO_ALL 'X'.
         EP_MSG 'Email send successfully'.
      ELSEIF LV_SENT_TO_ALL IS INITIAL.
         EP_MSG 'Email not send'.
      ENDIF.

      COMMIT WORK.

    CATCH CX_BCS INTO LO_BCS_EXCEPTION.

  ENDTRY.

     endif.

ENDFUNCTION.















Post a Comment

0 Comments

Total Pageviews