Skip to Content
avatar image
Former Member

Excel Attachment Send to Mail

HI,

I have a requirement , I have a report which is scheduled in background.

I need the report out put to be transferred as excel attachment to the list of Mail Ids

Request you to guide me.

Thank You,

Srinivas Chowdhary

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

3 Answers

  • avatar image
    Former Member
    Jun 15, 2007 at 09:28 AM

    Hi,

    Check this.

    REPORT ZV_SEND_MAIL .
    TABLES: EKKO.
    
    PARAMETERS: P_EMAIL   TYPE SOMLRECI1-RECEIVER
                                      DEFAULT 'test@sapdev.co.uk'.
    
    TYPES: BEGIN OF T_EKPO,
      EBELN TYPE EKPO-EBELN,
      EBELP TYPE EKPO-EBELP,
      AEDAT TYPE EKPO-AEDAT,
      MATNR TYPE EKPO-MATNR,
     END OF T_EKPO.
    DATA: IT_EKPO TYPE STANDARD TABLE OF T_EKPO INITIAL SIZE 0,
          WA_EKPO TYPE T_EKPO.
    
    TYPES: BEGIN OF T_CHAREKPO,
      EBELN(10) TYPE C,
      EBELP(5)  TYPE C,
      AEDAT(8)  TYPE C,
      MATNR(18) TYPE C,
     END OF T_CHAREKPO.
    DATA: WA_CHAREKPO TYPE T_CHAREKPO.
    
    DATA:   IT_MESSAGE TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0
                    WITH HEADER LINE.
    DATA:   IT_ATTACH TYPE STANDARD TABLE OF SOLISTI1 INITIAL SIZE 0
                    WITH HEADER LINE.
    
    DATA:   T_PACKING_LIST LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
            T_CONTENTS LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
            T_RECEIVERS LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,
            T_ATTACHMENT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
            T_OBJECT_HEADER LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
            W_CNT TYPE I,
            W_SENT_ALL(1) TYPE C,
            W_DOC_DATA LIKE SODOCCHGI1,
            GD_ERROR    TYPE SY-SUBRC,
            GD_RECIEVER TYPE SY-SUBRC.
    
    
    ************************************************************************
    *START_OF_SELECTION
    START-OF-SELECTION.
    *   Retrieve sample data from table ekpo
      PERFORM DATA_RETRIEVAL.
    
    *   Populate table with detaisl to be entered into .xls file
      PERFORM BUILD_XLS_DATA_TABLE.
    
    
    ************************************************************************
    *END-OF-SELECTION
    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 IT_MESSAGE
                                          IT_ATTACH
                                    USING P_EMAIL
                                          'Example .xls documnet attachment'
                                          'XLS'
                                          'filename'
                                          ' '
                                          ' '
                                          ' '
                                 CHANGING GD_ERROR
                                          GD_RECIEVER.
    
    *   Instructs mail send program for SAPCONNECT to send email(rsconn01)
      PERFORM INITIATE_MAIL_EXECUTE_PROGRAM.
    
    
    *&---------------------------------------------------------------------*
    *&      Form  DATA_RETRIEVAL
    *&---------------------------------------------------------------------*
    *       Retrieve data form EKPO table and populate itab it_ekko
    *----------------------------------------------------------------------*
    FORM DATA_RETRIEVAL.
      SELECT EBELN EBELP AEDAT MATNR
       UP TO 10 ROWS
        FROM EKPO
        INTO TABLE IT_EKPO.
    ENDFORM.                    " DATA_RETRIEVAL
    
    
    *&---------------------------------------------------------------------*
    *&      Form  BUILD_XLS_DATA_TABLE
    *&---------------------------------------------------------------------*
    *       Build data table for .xls document
    *----------------------------------------------------------------------*
    FORM BUILD_XLS_DATA_TABLE.
      CONSTANTS: CON_CRET TYPE X VALUE '0D',  "OK for non Unicode
                 CON_TAB TYPE X VALUE '09'.   "OK for non Unicode
    
    *If you have Unicode check active in program attributes thnen you will
    *need to declare constants as follows
    *class cl_abap_char_utilities definition load.
    *constants:
    *    con_tab  type c value cl_abap_char_utilities=>HORIZONTAL_TAB,
    *    con_cret type c value cl_abap_char_utilities=>CR_LF.
    
    
      CONCATENATE 'EBELN' 'EBELP' 'AEDAT' 'MATNR'
             INTO IT_ATTACH SEPARATED BY CON_TAB.
      CONCATENATE CON_CRET IT_ATTACH  INTO IT_ATTACH.
      APPEND  IT_ATTACH.
    
      LOOP AT IT_EKPO INTO WA_CHAREKPO.
        CONCATENATE WA_CHAREKPO-EBELN WA_CHAREKPO-EBELP
                    WA_CHAREKPO-AEDAT WA_CHAREKPO-MATNR
               INTO IT_ATTACH SEPARATED BY CON_TAB.
        CONCATENATE CON_CRET IT_ATTACH  INTO IT_ATTACH.
        APPEND  IT_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.
      W_DOC_DATA-DOC_SIZE = 1.
    
    * Populate the subject/generic message attributes
      W_DOC_DATA-OBJ_LANGU = SY-LANGU.
      W_DOC_DATA-OBJ_NAME  = 'SAPRPT'.
      W_DOC_DATA-OBJ_DESCR = LD_MTITLE .
      W_DOC_DATA-SENSITIVTY = 'F'.
    
    * Fill the document data and get size of attachment
      CLEAR W_DOC_DATA.
      READ TABLE IT_ATTACH INDEX W_CNT.
      W_DOC_DATA-DOC_SIZE =
         ( W_CNT - 1 ) * 255 + STRLEN( IT_ATTACH ).
      W_DOC_DATA-OBJ_LANGU  = SY-LANGU.
      W_DOC_DATA-OBJ_NAME   = 'SAPRPT'.
      W_DOC_DATA-OBJ_DESCR  = LD_MTITLE.
      W_DOC_DATA-SENSITIVTY = 'F'.
      CLEAR T_ATTACHMENT.
      REFRESH T_ATTACHMENT.
      T_ATTACHMENT[] = PIT_ATTACH[].
    
    * Describe the body of the message
      CLEAR T_PACKING_LIST.
      REFRESH T_PACKING_LIST.
      T_PACKING_LIST-TRANSF_BIN = SPACE.
      T_PACKING_LIST-HEAD_START = 1.
      T_PACKING_LIST-HEAD_NUM = 0.
      T_PACKING_LIST-BODY_START = 1.
      DESCRIBE TABLE IT_MESSAGE LINES T_PACKING_LIST-BODY_NUM.
      T_PACKING_LIST-DOC_TYPE = 'RAW'.
      APPEND T_PACKING_LIST.
    
    * Create attachment notification
      T_PACKING_LIST-TRANSF_BIN = 'X'.
      T_PACKING_LIST-HEAD_START = 1.
      T_PACKING_LIST-HEAD_NUM   = 1.
      T_PACKING_LIST-BODY_START = 1.
    
      DESCRIBE TABLE T_ATTACHMENT LINES T_PACKING_LIST-BODY_NUM.
      T_PACKING_LIST-DOC_TYPE   =  LD_FORMAT.
      T_PACKING_LIST-OBJ_DESCR  =  LD_ATTDESCRIPTION.
      T_PACKING_LIST-OBJ_NAME   =  LD_ATTFILENAME.
      T_PACKING_LIST-DOC_SIZE   =  T_PACKING_LIST-BODY_NUM * 255.
      APPEND T_PACKING_LIST.
    
    * Add the recipients email address
      CLEAR T_RECEIVERS.
      REFRESH T_RECEIVERS.
      T_RECEIVERS-RECEIVER = LD_EMAIL.
      T_RECEIVERS-REC_TYPE = 'U'.
      T_RECEIVERS-COM_TYPE = 'INT'.
      T_RECEIVERS-NOTIF_DEL = 'X'.
      T_RECEIVERS-NOTIF_NDEL = 'X'.
      APPEND T_RECEIVERS.
    
      CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
           EXPORTING
                DOCUMENT_DATA              = W_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                = W_SENT_ALL
           TABLES
                PACKING_LIST               = T_PACKING_LIST
                CONTENTS_BIN               = T_ATTACHMENT
                CONTENTS_TXT               = IT_MESSAGE
                RECEIVERS                  = T_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 T_RECEIVERS.
        LD_RECEIVER = T_RECEIVERS-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 IT_MESSAGE.
      IT_MESSAGE = 'Please find attached a list test ekpo records'.
      APPEND IT_MESSAGE.
    ENDFORM.                    " POPULATE_EMAIL_MESSAGE_BODY
    

    Vasanth

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jun 15, 2007 at 09:32 AM

    Hi,

    Check the link below for how it works......

    /people/thomas.jung3/blog/2004/09/07/sending-e-mail-from-abap--version-46d-and-lower--api-interface

    Check this link.

    http://www.sapdevelopment.co.uk/reporting/email/attach_xls.htm

    Also check the Code below

    REPORT test.

    DATA: att_size TYPE i, " att Size

    att_itab_size TYPE i, " Attachment size

    mailtxt_size TYPE i. " Text in mail size

    DATA:

    it_mailpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE, " Dist details

    it_mailhead LIKE solisti1 OCCURS 1 WITH HEADER LINE," Header data

    it_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE, " Rec List

    it_mailtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE, " Mail Text

    it_att_data LIKE solisti1 OCCURS 0 WITH HEADER LINE, " Attachment data

    it_doc_att LIKE sodocchgi1. " Attri of new doc

    • Text in the mail.

    it_mailtxt-line = ' This is a test mail, Line Number--1'.

    APPEND it_mailtxt.

    it_mailtxt-line = ' This is a test mail, Line Number--2' &

    ' This is a test mail, Line Number--2'.

    APPEND it_mailtxt.

    it_mailtxt-line = ' This is a test mail, Line Number--3' &

    ' This is a test mail, Line Number--3' &

    ' This is a test mail, Line Number--3'.

    APPEND it_mailtxt.

    DESCRIBE TABLE it_mailtxt LINES mailtxt_size.

    • Create the att File

    concatenate 'Attachment Line Number 1' space into it_att_data-line.

    APPEND it_att_data.

    concatenate 'Attachment Line Number 2' space into it_att_data-line.

    APPEND it_att_data.

    concatenate 'Attachment Line Number 3' space into it_att_data-line.

    APPEND it_att_data.

    DESCRIBE TABLE it_att_data LINES att_itab_size.

    • Attributes of new doc

    CONCATENATE 'Attach' space 'mail'

    INTO it_doc_att-obj_descr SEPARATED BY space.

    it_doc_att-sensitivty = 'F'.

    it_doc_att-doc_size = mailtxt_size * 255.

    • Create Pack to text in mail body.

    it_mailpack-transf_bin = space.

    it_mailpack-head_start = 1.

    it_mailpack-head_num = 0.

    it_mailpack-body_start = 1.

    it_mailpack-body_num = mailtxt_size.

    it_mailpack-doc_type = 'RAW'.

    APPEND it_mailpack.

    • Create Pack for Attach.

    it_mailpack-transf_bin = 'X'.

    it_mailpack-head_start = 1.

    it_mailpack-head_num = 1.

    it_mailpack-body_start = 1.

    it_mailpack-body_num = att_itab_size.

    it_mailpack-doc_type = 'XLS'.

    CONCATENATE 'My' space 'Attachment' INTO it_mailpack-obj_descr.

    it_mailpack-doc_size = att_itab_size * 255.

    APPEND it_mailpack.

    it_reclist-receiver = 'yourname@domain.com'.

    it_reclist-express = 'X'.

    it_reclist-rec_type = 'U'.

    it_reclist-notif_del = 'X'. " request delivery notification

    it_reclist-notif_ndel = 'X'. " request not delivered notification

    APPEND it_reclist.

    • Call FM to send email

    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

    EXPORTING

    document_data = it_doc_att

    put_in_outbox = 'X'

    TABLES

    packing_list = it_mailpack

    object_header = it_mailhead

    contents_txt = it_mailtxt

    contents_bin = it_att_data

    receivers = it_reclist

    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.

    IF sy-subrc <> 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    ENDIF.

    <b>Reward points</b>

    Regards

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Jun 15, 2007 at 01:13 PM

    To which mail ids ? r they business users or sap users?If you want to sent for sap usr mail id then u can go through usr21 and usr02 tables . usr02= is for the usres and usr21= is for mail id's . comman fields to both tables is addrnumber and personal number.

    and also to sent email u use SO_OBJECT_SEND function module which is the best solution for you and you menstion in object _type as 'xls'.

    and also see link for further details

    http://www.thespot4sap.com/Articles/SAP_Mail_Understanding_SO_Object_Send.asp

    Thanku

    Aparna

    Add comment
    10|10000 characters needed characters exceeded