Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Sending email with txt file attachment with more than 1100 character line

Former Member
0 Kudos

Hi All,

I would like to send  Internal table  in text file without any separator. and maintaining position of each field. Total length of line is 1103 character.

I had tried below method to achieve the same but file is appearing as attached in message.I like to attache this file to mail. i am using cl_bcs for sending mail.

constants: c_cr  TYPE c           VALUE  cl_abap_char_utilities=>cr_lf.

data: lv_line TYPE string.

    

       LOOP AT it_output INTO wa_output.

         lv_line = wa_output.                   " wa_output length is 1103 character

         if l_line is INITIAL.

           l_line = lv_line.

         else.

         CONCATENATE l_line lv_line  INTO l_line  SEPARATED BY c_cr.        

         endif.

         CLEAR: wa_output,lv_line.

       ENDLOOP.

 

TRY.

           cl_bcs_convert=>string_to_solix(

           EXPORTING

           iv_string = l_line

           iv_codepage = '4103' "suitable for MS Excel, leave empty

           iv_add_bom = 'X' "for other doc types

           IMPORTING

           et_solix = gt_binary_content

           ev_size = gv_size ).

*

**

*

         CATCH cx_bcs.

           MESSAGE e445(so).

       ENDTRY.

l_attcdoctype = 'BIN'.".c_ext.

       l_atttitle = 'Test_file'.

       DESCRIBE TABLE gt_binary_content LINES l_num_rows.

       gv_size = l_num_rows * 255.

* Create Document

       CALL METHOD l_document->add_attachment(

         i_attachment_type = l_attcdoctype

         i_attachment_subject = l_atttitle

         i_attachment_size = gv_size

         i_att_content_hex = gt_binary_content ).

Please let me know if i am missing anything.

Regards,

Hardik

4 REPLIES 4

Former Member
0 Kudos

Check the below program for your reference which sends multiple documents using ABAP objects.

PARAMETERS: p_mail TYPE ad_smtpadr OBLIGATORY.

DATA: i_mara TYPE STANDARD TABLE OF mara, " MARA Entries

      i_marc TYPE STANDARD TABLE OF marc.  " MARC Entries

DATA: l_text TYPE char255.  " Text

DATA: l_lines TYPE i,

l_size TYPE           sood-objlen.

" Size of Attachment

* Mail related

DATA: i_content         TYPE soli_tab, " Mail content

i_attach          TYPE soli_tab, " Attachment

i_attach1         TYPE soli_tab. " Attachment

DATA: l_send_request    TYPE REF TO    cl_bcs,

" E-Mail Send Request

l_document        TYPE REF TO    cl_document_bcs,

" E-Mail Attachment

l_recipient       TYPE REF TO if_recipient_bcs,

" Distribution List

l_sender          TYPE REF TO    if_sender_bcs,

" Address of Sender

l_uname TYPE           salrtdrcpt,

" Sender Name(SY-UNAME)

l_bcs_exception   TYPE REF TO    cx_document_bcs,

" BCS Exception

l_addr_exception  TYPE REF TO    cx_address_bcs,

" Address Exception

l_send_exception  TYPE REF TO    cx_send_req_bcs.

" E-Mail sending Exception

*Constants------------------------------------------------------------*

CONSTANTS: c_tab(1) TYPE c VALUE

cl_abap_char_utilities=>horizontal_tab,

" Tab Character

c_cr(1)  TYPE c VALUE cl_abap_char_utilities=>cr_lf,

" Line Feed for End-Of_line

c_ext    TYPE soodk-objtp VALUE 'XLS'. " XLS Extension

START-OF-SELECTION.

  SELECT * FROM mara INTO TABLE i_mara UP TO 20 ROWS.

  SELECT * FROM marc INTO TABLE i_marc UP TO 20 ROWS.

* Preparing body of the Mail

  MOVE 'Mail Body' TO l_text.

  APPEND l_text TO i_content.

* Creates persistent send request

  TRY.

      l_send_request = cl_bcs=>create_persistent( ).

* Creating Document

      l_document = cl_document_bcs=>create_document(

i_type  = 'RAW'

i_text  = i_content[]

i_subject = 'Material Details' ).

* Preparing contents of attachment with Change Log

      PERFORM prepare_attachment.

      DESCRIBE TABLE i_mara LINES l_lines.

* Size to multiplied by 2 for UNICODE enabled systems

      l_size = l_lines * 2 * 255.

* Adding Attachment

      CALL METHOD l_document->add_attachment

EXPORTING

i_attachment_type    = c_ext

i_attachment_size    = l_size

i_attachment_subject = 'Material Details'

i_att_content_text   = i_attach[].

      DESCRIBE TABLE i_marc LINES l_lines.

* Size to multiplied by 2 for UNICODE enabled systems

      l_size = l_lines * 2 * 255.

* Adding Attachment

      CALL METHOD l_document->add_attachment

EXPORTING

i_attachment_type    = c_ext

i_attachment_size    = l_size

i_attachment_subject = 'Material Plant Details'

i_att_content_text   = i_attach1[].

* Add document to send request

      CALL METHOD l_send_request->set_document( l_document ).

* Get Sender Object

      l_uname = sy-uname.

data:lr_sender type ref to if_sender_bcs,

      lr_send type ref to cl_bcs.

* Preparing the sender object

      lr_sender = cl_cam_address_bcs=>create_internet_address( p_mail ).

*      l_sender = cl_sapuser_bcs=>create( l_uname ).

* Setting the sender

      CALL METHOD l_send_request->set_sender

EXPORTING

i_sender = lr_sender.

* E-Mail

      TRANSLATE p_mail TO LOWER CASE.

      l_recipient = cl_cam_address_bcs=>create_internet_address( p_mail )

  .

      CALL METHOD l_send_request->add_recipient

EXPORTING

i_recipient  = l_recipient

i_express    = 'U'

i_copy       = ' '

i_blind_copy = ' '

i_no_forward = ' '.

*Trigger E-Mail immediately

l_send_request->set_send_immediately( 'X' ).

      CALL METHOD l_send_request->send( ).

      COMMIT WORK.

    CATCH cx_document_bcs INTO l_bcs_exception.

    CATCH cx_send_req_bcs INTO l_send_exception.

    CATCH cx_address_bcs  INTO l_addr_exception.

  ENDTRY.

*&---------------------------------------------------------------------

*

*&      Form PREPARE_ATTACHMENT

*&---------------------------------------------------------------------

*

FORM prepare_attachment.

  FIELD-SYMBOLS: <lfs_table>,    " Internal table structure

<lfs_con>.      " Field Content

  DATA: l_text TYPE char1024.     " Text content for mail attachment

  DATA: l_con(50) TYPE c.        " Field Content in character format

* Columns to be tab delimeted

  LOOP AT i_mara ASSIGNING <lfs_table>.

    DO.

      ASSIGN COMPONENT sy-index OF STRUCTURE <lfs_table>

TO <lfs_con>.

      IF sy-subrc NE 0.

CONCATENATE c_cr l_text INTO l_text.

        APPEND l_text TO i_attach.

        EXIT.

      ELSE.

        CLEAR: l_con.

        MOVE <lfs_con> TO l_con.

        CONDENSE l_con.

        IF sy-index = 1.

CLEAR: l_text.

MOVE l_con TO l_text.

        ELSE.

CONCATENATE l_text l_con INTO l_text

SEPARATED BY c_tab.

        ENDIF.

      ENDIF.

    ENDDO.

  ENDLOOP.

  LOOP AT i_marc ASSIGNING <lfs_table>.

    DO.

      ASSIGN COMPONENT sy-index OF STRUCTURE <lfs_table>

TO <lfs_con>.

      IF sy-subrc NE 0.

CONCATENATE c_cr l_text INTO l_text.

        APPEND l_text TO i_attach1.

        EXIT.

      ELSE.

        CLEAR: l_con.

        MOVE <lfs_con> TO l_con.

        CONDENSE l_con.

        IF sy-index = 1.

CLEAR: l_text.

MOVE l_con TO l_text.

        ELSE.

CONCATENATE l_text l_con INTO l_text

SEPARATED BY c_tab.

        ENDIF.

      ENDIF.

    ENDDO.

  ENDLOOP.

  1. ENDFORM. " PREPARE_ATTACHMENT

Former Member
0 Kudos

i think you miss the create document.

* Creating Document

      l_document = cl_document_bcs=>create_document(

i_type  = 'RAW'

i_text  = i_content[]

i_subject = 'Material Details' ).

0 Kudos

Hi Kalyan,

It is XLS format. I want data in TXT file with single line.

when i run your program with changing XLS to txt and download the file. it is not appearing properly.

Please let me know if you  have any other solution.

Former Member
0 Kudos

Hi, 

Please use the below program it may be useful for you.

FORM MAIL .

   DATA: GT_TEXT TYPE TABLE OF TLINE,

         WA_TEXT TYPE TLINE,

         LV_TITLE TYPE STRING,

         LV_HEAD TYPE STRING,

         LV_DATE TYPE STRING.

   " MAIL EVENT MAINTAINED IN ZSMT0452 TABLE

   SELECT REPID

          EVENT

          USER_ID

          REF_RECV

          FROM ZSMT0452 INTO TABLE GT_ZSMT04520 WHERE REPID = SY-REPID AND

                                                      EVENT = P_MAIL.

   APPEND LINES OF GT_ZSMT04520 TO GT_ZSMT04521.

   " CONDITION FOR MAIL ADDRESS IN TO

   DELETE GT_ZSMT04520 WHERE REF_RECV IS NOT INITIAL.

   IF GT_ZSMT04520[] IS NOT INITIAL.

     " SELECTING E MAIL ADDRESS MAINTAIN IN ZCCT1010 TABLE

     SELECT SMTP_ADDR AS LINE

            APPENDING CORRESPONDING FIELDS OF TABLE GT_RECEIVER

            FROM ZCCT1010

            FOR ALL ENTRIES IN GT_ZSMT04520

            WHERE USER_ID = GT_ZSMT04520-USER_ID

            AND   SMTP_ADDR <> ''.

   ENDIF.

   " CONDITION FOR MAIL ADDRESS IN CC

   DELETE GT_ZSMT04521 WHERE REF_RECV IS INITIAL.

   IF GT_ZSMT04521[] IS NOT INITIAL.

     " SELECTING E MAIL ADDRESS (CC) MAINTAIN IN ZCCT1010 TABLE

     SELECT SMTP_ADDR AS LINE

          APPENDING CORRESPONDING FIELDS OF TABLE GT_COPY_REC

          FROM ZCCT1010

          FOR ALL ENTRIES IN GT_ZSMT04521

          WHERE USER_ID = GT_ZSMT04521-USER_ID

          AND   SMTP_ADDR <> ''.

   ENDIF.

   IF GT_RECEIVER[] IS INITIAL AND GT_COPY_REC[] IS INITIAL.

     EXIT.

   ENDIF.

   " DELETING DUPLICATE MAIL ID

   SORT GT_RECEIVER BY LINE.

   DELETE ADJACENT DUPLICATES FROM GT_RECEIVER COMPARING ALL FIELDS.

   SORT GT_COPY_REC BY LINE.

   DELETE ADJACENT DUPLICATES FROM GT_COPY_REC COMPARING ALL FIELDS.

   " for mail header and mail content

   CALL FUNCTION 'Z_SM_BUILD_MAIL_TEXT'

    EXPORTING

      I_EVENT            = P_MAIL

*     I_HTML             =

    IMPORTING

      O_MAIL_TITLE       = LV_TITLE

    TABLES

*     T_HTML             =

      T_TEXT             = GT_TEXT

             .

   SPLIT LV_TITLE AT '_' INTO LV_HEAD LV_DATE.

   "Subject of the mail.

   WA_DOCUMENT_DATA-OBJ_NAME  = 'MAIL_TO_HEAD'.

   WA_DOCUMENT_DATA-OBJ_DESCR = LV_HEAD.

   "Body of the mail

   LOOP AT GT_TEXT INTO WA_TEXT.

     WA_BODY_MSG = WA_TEXT-TDLINE.

     APPEND WA_BODY_MSG TO GT_BODY_MSG.

     CLEAR  WA_BODY_MSG.

   ENDLOOP.

   "Write Packing List for Body

   DESCRIBE TABLE GT_BODY_MSG LINES GV_TAB_LINES.

   WA_PACKING_LIST-HEAD_START = 1.

   WA_PACKING_LIST-HEAD_NUM   = 0.

   WA_PACKING_LIST-BODY_START = 1.

   WA_PACKING_LIST-BODY_NUM   = GV_TAB_LINES.

   WA_PACKING_LIST-DOC_TYPE   = 'RAW'.

   APPEND WA_PACKING_LIST TO GT_PACKING_LIST.

   CLEAR  WA_PACKING_LIST.

   "Write Packing List for Attachment

   WA_PACKING_LIST-TRANSF_BIN = C_X.

   WA_PACKING_LIST-HEAD_START = 1.

   WA_PACKING_LIST-HEAD_NUM   = 1.

   WA_PACKING_LIST-BODY_START = 1.

   DESCRIBE TABLE GT_ATTACHMENT LINES WA_PACKING_LIST-BODY_NUM.

   WA_PACKING_LIST-DOC_TYPE   = 'PDF'.

   WA_PACKING_LIST-OBJ_DESCR  = 'New Price Report.PDF'.

   WA_PACKING_LIST-OBJ_NAME   = 'PDF_ATTACHMENT'.

   WA_PACKING_LIST-DOC_SIZE   = WA_PACKING_LIST-BODY_NUM * 255.

   APPEND WA_PACKING_LIST TO GT_PACKING_LIST.

   CLEAR  WA_PACKING_LIST.

   "Fill the document data and get size of attachment

   WA_DOCUMENT_DATA-OBJ_LANGU  = SY-LANGU.

   READ TABLE GT_ATTACHMENT INTO WA_ATTACHMENT INDEX GV_TAB_LINES.

   WA_DOCUMENT_DATA-DOC_SIZE = ( GV_TAB_LINES - 1 ) * 255 + STRLEN( WA_ATTACHMENT ).

   "Receivers List.

   " To list

   LOOP AT GT_RECEIVER.

     WA_RECEIVERS-REC_TYPE   = 'U'"Internet address

     WA_RECEIVERS-RECEIVER   GT_RECEIVER-LINE.

     WA_RECEIVERS-COM_TYPE   = 'INT'.

     WA_RECEIVERS-NOTIF_DEL  = C_X.

     WA_RECEIVERS-NOTIF_NDEL = C_X.

     APPEND WA_RECEIVERS TO GT_RECEIVERS .

     CLEAR:WA_RECEIVERS.

   ENDLOOP.

   " CC list

   LOOP AT GT_COPY_REC.

     WA_RECEIVERS-REC_TYPE = 'U'.

     WA_RECEIVERS-COPY     = C_X.

     WA_RECEIVERS-RECEIVER = GT_COPY_REC-LINE.

     APPEND WA_RECEIVERS TO GT_RECEIVERS .

     CLEAR:WA_RECEIVERS.

   ENDLOOP.

* PGURRAM Change start GSDK9A5HIZ

   "Write Packing List for Attachment

   DATA LT_ATTACHMENT     TYPE STANDARD TABLE OF TY_ATTACHMENT .

   " Convert text to binary

   CALL FUNCTION 'SCMS_TEXT_TO_BINARY'

* EXPORTING

*   FIRST_LINE            = 0

*   LAST_LINE             = 0

*   APPEND_TO_TABLE       = ' '

*   MIMETYPE              = ' '

* IMPORTING

*   OUTPUT_LENGTH         =

     TABLES

       TEXT_TAB              = GT_ATTACHMENT1

       BINARY_TAB            = LT_ATTACHMENT

  EXCEPTIONS

    FAILED                = 1

    OTHERS                = 2

             .

   DESCRIBE TABLE GT_ATTACHMENT LINES WA_PACKING_LIST-BODY_NUM.

   WA_PACKING_LIST-TRANSF_BIN = C_X.

   WA_PACKING_LIST-HEAD_START 1."wa_packing_list-body_num + 1.

   WA_PACKING_LIST-HEAD_NUM   1 ."wa_packing_list-body_num + 1.

   WA_PACKING_LIST-BODY_START WA_PACKING_LIST-BODY_NUM + 1.

   DESCRIBE TABLE LT_ATTACHMENT LINES WA_PACKING_LIST-BODY_NUM.

   WA_PACKING_LIST-DOC_TYPE   = 'TXT'.

   WA_PACKING_LIST-OBJ_DESCR  = 'New Price Report.TXT'.

   WA_PACKING_LIST-OBJ_NAME   = 'TXT_ATTACHMENT'.

   WA_PACKING_LIST-DOC_SIZE   = WA_PACKING_LIST-BODY_NUM * 255.

   APPEND WA_PACKING_LIST TO GT_PACKING_LIST.

   CLEAR  WA_PACKING_LIST.

   LOOP AT LT_ATTACHMENT INTO WA_ATTACHMENT.

     APPEND WA_ATTACHMENT TO GT_ATTACHMENT.

   ENDLOOP.

   "PGURRAM End changes GSDK9A5HIZ

   "Function module to send mail to Recipients

   CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

     EXPORTING

       DOCUMENT_DATA              = WA_DOCUMENT_DATA

       PUT_IN_OUTBOX              = C_X

       COMMIT_WORK                = C_X

     IMPORTING

       SENT_TO_ALL                = GV_SENT_TO_ALL

     TABLES

       PACKING_LIST               = GT_PACKING_LIST

       CONTENTS_BIN               = GT_ATTACHMENT

       CONTENTS_TXT               = GT_BODY_MSG

       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.

   IF SY-SUBRC = 0 .

     MESSAGE I303(ME) WITH  TEXT-118. " 'Mail has been Successfully Sent.'.

   ENDIF.

ENDFORM.              " MAIL