top of page

SAP ABAP - Send e-mail with excel file ( Simple )

Updated: Aug 29, 2022


PARAMETERS: p_email   TYPE somlreci1-receiver
DEFAULT 'test@test.com.tr'.

TYPES: BEGIN OF ty_mara,
         matnr TYPE mara-matnr,
         maktx TYPE makt-maktx,
         meins TYPE mara-meins,
         mtart TYPE mara-mtart,

END OF ty_mara.
DATA: gt_mara TYPE TABLE OF ty_mara.



DATA:   gt_message TYPE TABLE OF solisti1.
DATA:   gt_attach TYPE TABLE OF solisti1.

DATA: gt_packing_list  TYPE TABLE OF sopcklsti1,
      gt_contents      TYPE TABLE OF solisti1,
      gt_receivers     TYPE TABLE OF somlreci1,
      gt_attachment    TYPE TABLE OF solisti1,
      gt_object_header TYPE TABLE OF solisti1,
      gv_cnt           TYPE i,
      gv_sent_all(1)   TYPE c,
      gs_doc_data      LIKE sodocchgi1,
      gv_error         TYPE sy-subrc,
      gv_reciever      TYPE sy-subrc.


START-OF-SELECTION.

PERFORM data_retrieval.

PERFORM build_xls_data_table.



END-OF-SELECTION.
* Populate message body text
PERFORM populate_email_message_body.

* Send file by email as .xls speadsheet
PERFORM send_file_as_email_attachment
TABLES gt_message
                                      gt_attach
USING p_email
'Example .xls doc attachment'
'XLS'
'EXCEL FILENAME'
' '
' '
' '
CHANGING gv_error
                                      gv_reciever.


PERFORM initiate_mail_execute_program.


*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVAL
*&---------------------------------------------------------------------*
*       Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
FORM data_retrieval.
SELECT mara~matnr,
         makt~maktx,
         mara~meins,
         mara~mtart
FROM mara
  INNER JOIN makt
ON mara~matnr = makt~matnr
AND makt~spras = @sy-langu
INTO TABLE @gt_mara.
ENDFORM.                    " DATA_RETRIEVAL


*&---------------------------------------------------------------------*
*&      Form  BUILD_XLS_DATA_TABLE
*&---------------------------------------------------------------------*
*       Build data table for .xls document
*----------------------------------------------------------------------*
FORM build_xls_data_table.

APPEND INITIAL LINE TO gt_attach REFERENCE INTO DATA(lr_attach).
CONCATENATE 'MATNR' 'MAKTX' 'MEINS' 'MTART'
INTO lr_attach->* SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
CONCATENATE cl_abap_char_utilities=>cr_lf lr_attach->*  INTO lr_attach->*.


LOOP AT gt_mara REFERENCE INTO DATA(lr_mara).
APPEND INITIAL LINE TO gt_attach REFERENCE INTO lr_attach.
CONCATENATE lr_mara->matnr
                lr_mara->maktx
                lr_mara->meins
                lr_mara->mtart
INTO lr_attach->* SEPARATED BY cl_abap_char_utilities=>horizontal_tab.
CONCATENATE cl_abap_char_utilities=>cr_lf lr_attach->* INTO lr_attach->*.

ENDLOOP.
ENDFORM.                    " BUILD_XLS_DATA_TABLE


*&---------------------------------------------------------------------*
*&      Form  SEND_FILE_AS_EMAIL_ATTACHMENT
*&---------------------------------------------------------------------*
*       Send email
*----------------------------------------------------------------------*
FORM send_file_as_email_attachment TABLES pit_message
                                          pit_attach
USING p_email
                                          p_mtitle
                                          p_format
                                          p_filename
                                          p_attdescription
                                          p_sender_address
                                          p_sender_addres_type
CHANGING p_error
                                          p_reciever.


DATA: ld_error               TYPE sy-subrc,
        ld_reciever            TYPE sy-subrc,
        ld_mtitle              LIKE sodocchgi1-obj_descr,
        ld_email               LIKE  somlreci1-receiver,
        ld_format              TYPE  so_obj_tp,
        ld_attdescription      TYPE  so_obj_nam,
        ld_attfilename         TYPE  so_obj_des,
        ld_sender_address      LIKE  soextreci1-receiver,
        ld_sender_address_type LIKE  soextreci1-adr_typ,
        ld_receiver            LIKE  sy-subrc.

  ld_email   = p_email.
  ld_mtitle = p_mtitle.
  ld_format              = p_format.
  ld_attdescription      = p_attdescription.
  ld_attfilename         = p_filename.
  ld_sender_address      = p_sender_address.
  ld_sender_address_type = p_sender_addres_type.


* Fill the document data.
  gs_doc_data-doc_size = 1.



* Fill the document data and get size of attachment
CLEAR gs_doc_data.
  gv_cnt = lines( gt_attach ).
READ TABLE gt_attach REFERENCE INTO data(lr_attach) INDEX gv_cnt.
  gs_doc_data-doc_size =
( gv_cnt - 1 ) * 255 + strlen( lr_attach->* ).
  gs_doc_data-obj_langu  = sy-langu.
  gs_doc_data-obj_name   = 'SAPRPT'.
  gs_doc_data-obj_descr  = ld_mtitle.
  gs_doc_data-sensitivty = 'F'.
CLEAR gt_attachment[].
  gt_attachment[] = pit_attach[].

* Describe the body of the message
CLEAR gt_packing_list[].
APPEND INITIAL LINE TO gt_packing_list REFERENCE INTO data(lr_packing_list).
  lr_packing_list->transf_bin = space.
  lr_packing_list->head_start = 1.
  lr_packing_list->head_num = 0.
  lr_packing_list->body_start = 1.
DESCRIBE TABLE gt_message LINES lr_packing_list->body_num.
  lr_packing_list->doc_type = 'RAW'.


* Create attachment notification
APPEND INITIAL LINE TO gt_packing_list REFERENCE INTO lr_packing_list.
  lr_packing_list->transf_bin = 'X'.
  lr_packing_list->head_start = 1.
  lr_packing_list->head_num   = 1.
  lr_packing_list->body_start = 1.

DESCRIBE TABLE gt_attachment LINES lr_packing_list->body_num.
  lr_packing_list->doc_type   =  ld_format.
  lr_packing_list->obj_descr  =  ld_attdescription.
  lr_packing_list->obj_name   =  ld_attfilename.
  lr_packing_list->doc_size   =  lr_packing_list->body_num * 255.


* Add the recipients email address
CLEAR gt_receivers.
APPEND INITIAL LINE TO gt_receivers REFERENCE INTO data(lr_receivers).
  lr_receivers->receiver = ld_email.
  lr_receivers->rec_type = 'U'.
  lr_receivers->com_type = 'INT'.
  lr_receivers->notif_del = 'X'.
  lr_receivers->notif_ndel = 'X'.


CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
      document_data              = gs_doc_data
      put_in_outbox              = 'X'
      sender_address             = ld_sender_address
      sender_address_type        = ld_sender_address_type
      commit_work                = 'X'
IMPORTING
      sent_to_all                = gv_sent_all
TABLES
      packing_list               = gt_packing_list
      contents_bin               = gt_attachment
      contents_txt               = gt_message
      receivers                  = gt_receivers
EXCEPTIONS
      too_many_receivers         = 1
      document_not_sent          = 2
      document_type_not_exist    = 3
      operation_no_authorization = 4
      parameter_error            = 5
      x_error                    = 6
      enqueue_error              = 7
OTHERS                     = 8.

* Populate zerror return code
  ld_error = sy-subrc.

* Populate zreceiver return code
LOOP AT gt_receivers REFERENCE INTO data(lr_receiver).
    ld_receiver = lr_receiver->retrn_code.
ENDLOOP.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  INITIATE_MAIL_EXECUTE_PROGRAM
*&---------------------------------------------------------------------*
*       Instructs mail send program for SAPCONNECT to send email.
*----------------------------------------------------------------------*
FORM initiate_mail_execute_program.
WAIT UP TO 2 SECONDS.
SUBMIT rsconn01 WITH mode = 'INT'
WITH output = 'X'
AND RETURN.
ENDFORM.                    " INITIATE_MAIL_EXECUTE_PROGRAM


*&---------------------------------------------------------------------*
*&      Form  POPULATE_EMAIL_MESSAGE_BODY
*&---------------------------------------------------------------------*
*        Populate message body text
*----------------------------------------------------------------------*
FORM populate_email_message_body.
REFRESH gt_message.
append INITIAL LINE TO gt_message REFERENCE INTO data(lr_msg).
  lr_msg->* = 'Please find attached a list test mara records'.

ENDFORM.

17 views0 comments

Recent Posts

See All
Post: Blog2_Post
bottom of page