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 mail without attachment file

Former Member
0 Kudos

Hi Sapfans:

I would like to send mail without attachment file, just a notice,

needing multiple receiver, can change the mail title,

Which function shoud I use?

I just found out sending mail with attachment file there,

Thanks a lot!

1 ACCEPTED SOLUTION

former_member194669
Active Contributor
0 Kudos

Hi,

Check this


Report ztest.
data: maildata type sodocchgi1.
data: mailtxt type table of solisti1 with header line.
data: mailrec type table of somlrec90 with header line.

start-of-selection.

clear: maildata, mailtxt, mailrec.
refresh: mailtxt, mailrec.

maildata-obj_name = 'TEST'.
maildata-obj_descr = 'Test'.
maildata-obj_langu = sy-langu.

mailtxt-line = 'This is a test'.
append mailtxt.

mailrec-receiver = 'you@yourcompany.com'.
mailrec-rec_type = 'U'.
append mailrec.

call function 'SO_NEW_DOCUMENT_SEND_API1'
exporting
document_data = maildata
document_type = 'RAW'
put_in_outbox = 'X'
tables
object_header = mailtxt
object_content = mailtxt
receivers = mailrec
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.

* Start the send process with this code or go to transaction SCOT
* submit rsconn01 with mode = 'INT' and return.

aRs

5 REPLIES 5

former_member194669
Active Contributor
0 Kudos

Hi,

Check this


Report ztest.
data: maildata type sodocchgi1.
data: mailtxt type table of solisti1 with header line.
data: mailrec type table of somlrec90 with header line.

start-of-selection.

clear: maildata, mailtxt, mailrec.
refresh: mailtxt, mailrec.

maildata-obj_name = 'TEST'.
maildata-obj_descr = 'Test'.
maildata-obj_langu = sy-langu.

mailtxt-line = 'This is a test'.
append mailtxt.

mailrec-receiver = 'you@yourcompany.com'.
mailrec-rec_type = 'U'.
append mailrec.

call function 'SO_NEW_DOCUMENT_SEND_API1'
exporting
document_data = maildata
document_type = 'RAW'
put_in_outbox = 'X'
tables
object_header = mailtxt
object_content = mailtxt
receivers = mailrec
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.

* Start the send process with this code or go to transaction SCOT
* submit rsconn01 with mode = 'INT' and return.

aRs

0 Kudos

Hi aRs:

I try to use you code but sending mail still contain a attachment file(PDF).

Could you tell me how to tune it?

Thanks...

0 Kudos

Hi,

Try to send a mail from your SAP inbox to external id without any attachment. This is for testing whether mail from your inbox , how SCOT is handling ?

and try to copy the same code as in my previous thread any try.

aRs

0 Kudos

I add code as below at end of my program...

submit rsconn01 with mode = 'INT'

with output = 'X'

and return.

I trigger SCOT like that.

as your previous thread, two line of them :

  • mailtxt-line = 'This is a test'.

  • append mailtxt.

after I copy your code, I mark it too,

but program still sending a attached which can not open.

I dont know how could I tune it

(i miss some parameters???)

aris_hidalgo
Contributor
0 Kudos

Hi Alchie,

Please take a look at my example below. It sens e-mail to multiple recipients without attachments.


FUNCTION-POOL zts0001                    MESSAGE-ID sv.

INCLUDE lsvimdat                                . "general data decl.
INCLUDE lzts0001t00                             . "view rel. data dcl.

*/ Author: Aris Hidalgo
*/ Created on: September 7, 2006
*/ Purpose of program: This will send out e-mails to specified users in
*/ custom table ZSHIPTO_EMAIL whenever records have been deleted or
*/ modified via the maintenance view of ZTS0001. The changes will also
*/ be reflected in custom table ZTS_STPGEOLOC.

TABLES: zts_stpgeoloc,
        zshipto_email,
        kna1.

FIELD-SYMBOLS: <fs_old_total> TYPE ANY.

*---------------------------------------------------------------------*
*       CLASS lcl_main DEFINITION ABSTRACT
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_main DEFINITION ABSTRACT.

  PUBLIC SECTION.
    TYPES: BEGIN OF t_zts0001_old,
            kunnr    TYPE zts0001-kunnr,
            cdseq    TYPE zts0001-cdseq,
            zaddress TYPE zts0001-zaddress,
            zcperson TYPE zts0001-zcperson,
            zcnumber TYPE zts0001-zcnumber,
           END OF t_zts0001_old.

    TYPES: BEGIN OF t_zts0001_new,
            kunnr    TYPE zts0001-kunnr,
            cdseq    TYPE zts0001-cdseq,
            zaddress TYPE zts0001-zaddress,
            zcperson TYPE zts0001-zcperson,
            zcnumber TYPE zts0001-zcnumber,
           END OF t_zts0001_new.

    TYPES: BEGIN OF t_zts_stpgeoloc,
            kunnr    TYPE zts_stpgeoloc-kunnr,
            cdseq    TYPE zts_stpgeoloc-cdseq,
            zaddress TYPE zts_stpgeoloc-zaddress,
            zcperson TYPE zts_stpgeoloc-zcperson,
            zcnumber TYPE zts_stpgeoloc-zcnumber,
           END OF t_zts_stpgeoloc.

    TYPES: BEGIN OF t_del_entries,
            kunnr    TYPE zts0001-kunnr,
            cdseq    TYPE zts0001-cdseq,
            zaddress TYPE zts0001-zaddress,
            zcperson TYPE zts0001-zcperson,
            zcnumber TYPE zts0001-zcnumber,
            name1    TYPE kna1-name1,
           END OF t_del_entries.

    TYPES: BEGIN OF t_modified_entries,
            kunnr       TYPE zts0001-kunnr,
            cdseq       TYPE zts0001-cdseq,
            old_address TYPE zts0001-zaddress,
            new_address TYPE zts0001-zaddress,
            old_person  TYPE zts0001-zcperson,
            new_person  TYPE zts0001-zcperson,
            old_number  TYPE zts0001-zcnumber,
            new_number  TYPE zts0001-zcnumber,
            name1       TYPE kna1-name1,
           END OF t_modified_entries.

    DATA: gt_zts0001_old      TYPE STANDARD TABLE OF t_zts0001_old,
          gt_zts0001_new      TYPE HASHED   TABLE OF t_zts0001_new
                                       WITH UNIQUE KEY kunnr cdseq,
          gt_zts_stpgeoloc    TYPE STANDARD TABLE OF t_zts_stpgeoloc,
          gt_del_entries      TYPE STANDARD TABLE OF t_del_entries,
          gt_modified_entries TYPE STANDARD TABLE OF t_modified_entries,
          gt_zshipto_email    TYPE STANDARD TABLE OF zshipto_email,
          t_maildata          TYPE sodocchgi1,
          gt_mailtxt          TYPE STANDARD TABLE OF solisti1,
          gt_mailrec          TYPE STANDARD TABLE OF somlreci1.

    DATA: v_old_total     TYPE i,
          v_new_total     TYPE i,
          v_flag(1)       TYPE c,
          v_counter(1)    TYPE c,
          v_contents(255) TYPE c.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_get_old_recs DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_get_old_recs DEFINITION INHERITING FROM lcl_main.
  PUBLIC SECTION.
    METHODS: export_old_recs.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_get_old_recs IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_get_old_recs IMPLEMENTATION.
  METHOD export_old_recs.
    SELECT kunnr cdseq zaddress zcperson zcnumber
    FROM zts0001
    INTO TABLE gt_zts0001_old.

    v_old_total = sy-dbcnt.
    ASSIGN v_old_total TO <fs_old_total>.

    EXPORT gt_zts0001_old = gt_zts0001_old TO MEMORY ID 'AVH'.
    CLEAR gt_zts0001_old. REFRESH gt_zts0001_old.
  ENDMETHOD.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_old_and_new DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_old_and_new DEFINITION INHERITING FROM lcl_main.
  PUBLIC SECTION.
    METHODS: compare_old_and_new.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_old_and_new IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_old_and_new IMPLEMENTATION.
  METHOD compare_old_and_new.
    DATA: wa_del_entries    LIKE LINE OF gt_del_entries.

    FIELD-SYMBOLS: <fs_old> LIKE LINE OF gt_zts0001_old,
                   <fs_new> LIKE LINE OF gt_zts0001_new.

    SELECT kunnr cdseq zaddress zcperson zcnumber
    FROM zts0001
    INTO TABLE gt_zts0001_new.
    v_new_total = sy-dbcnt.

    IF v_new_total <> <fs_old_total>.
      IMPORT gt_zts0001_old = gt_zts0001_old FROM MEMORY ID 'AVH'.
      LOOP AT gt_zts0001_old ASSIGNING <fs_old>.
        READ TABLE gt_zts0001_new WITH TABLE KEY kunnr = <fs_old>-kunnr
                                                 cdseq = <fs_old>-cdseq
                                                 ASSIGNING <fs_new>.

        IF sy-subrc <> 0.
          MOVE-CORRESPONDING <fs_old> TO wa_del_entries.
          APPEND wa_del_entries TO gt_del_entries.
          CLEAR wa_del_entries.

          DELETE FROM zts_stpgeoloc
          WHERE kunnr = <fs_old>-kunnr
            AND cdseq = <fs_old>-cdseq.
        ENDIF.
      ENDLOOP.

      IF NOT gt_del_entries[] IS INITIAL.
        EXPORT gt_del_entries = gt_del_entries TO MEMORY ID 'DEL'.
      ENDIF.
      REFRESH gt_zts0001_old.
    ENDIF.
  ENDMETHOD.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_check_changes DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_check_changes DEFINITION INHERITING FROM lcl_main.
  PUBLIC SECTION.
    METHODS: check_for_changes.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_check_changes IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_check_changes IMPLEMENTATION.
  METHOD check_for_changes.
    TYPES: BEGIN OF t_zts_stpgeoloc,
            mandt    TYPE zts_stpgeoloc-mandt,
            kunnr    TYPE zts_stpgeoloc-kunnr,
            cdseq    TYPE zts_stpgeoloc-cdseq,
            zcgeoloc TYPE zts_stpgeoloc-zcgeoloc,
            zaddress TYPE zts_stpgeoloc-zaddress,
            zcperson TYPE zts_stpgeoloc-zcperson,
            zcnumber TYPE zts_stpgeoloc-zcnumber,
           END OF t_zts_stpgeoloc.

    DATA: wa_modified_entries LIKE LINE OF gt_modified_entries,
          lt_zts_stpgeoloc    TYPE HASHED TABLE OF t_zts_stpgeoloc
                                   WITH UNIQUE KEY kunnr cdseq,
          wa_zts_stpgeoloc    LIKE LINE OF lt_zts_stpgeoloc.


    FIELD-SYMBOLS: <fs_zts0001_old> LIKE LINE OF gt_zts0001_old,
                   <fs_zts0001_new> LIKE LINE OF gt_zts0001_new.

    IMPORT gt_zts0001_old = gt_zts0001_old FROM MEMORY ID 'AVH'.

    SELECT kunnr cdseq zcgeoloc zaddress zcperson zcnumber
    FROM zts_stpgeoloc
    INTO CORRESPONDING FIELDS OF TABLE lt_zts_stpgeoloc.

    SELECT kunnr cdseq zaddress zcperson zcnumber
    FROM zts0001
    INTO TABLE gt_zts0001_new.

    LOOP AT gt_zts0001_old ASSIGNING <fs_zts0001_old>.
      READ TABLE gt_zts0001_new WITH TABLE KEY
                                     kunnr = <fs_zts0001_old>-kunnr
                                     cdseq = <fs_zts0001_old>-cdseq
                                     ASSIGNING <fs_zts0001_new>.
      IF sy-subrc = 0.
        READ TABLE lt_zts_stpgeoloc WITH TABLE KEY
                                        kunnr = <fs_zts0001_new>-kunnr
                                        cdseq = <fs_zts0001_new>-cdseq
                                        INTO wa_zts_stpgeoloc.
        IF sy-subrc = 0.
          wa_zts_stpgeoloc-mandt    = sy-mandt.
          wa_zts_stpgeoloc-kunnr    = <fs_zts0001_new>-kunnr.
          wa_zts_stpgeoloc-cdseq    = <fs_zts0001_new>-cdseq.
          wa_zts_stpgeoloc-zcgeoloc = space.
          wa_zts_stpgeoloc-zaddress = <fs_zts0001_new>-zaddress.
          wa_zts_stpgeoloc-zcperson = <fs_zts0001_new>-zcperson.
          wa_zts_stpgeoloc-zcnumber = <fs_zts0001_new>-zcnumber.
          MODIFY zts_stpgeoloc FROM wa_zts_stpgeoloc.
          COMMIT WORK AND WAIT.
        ENDIF.
*       address
        IF <fs_zts0001_old>-zaddress <> <fs_zts0001_new>-zaddress.
          MOVE: <fs_zts0001_new>-kunnr  TO wa_modified_entries-kunnr,
                <fs_zts0001_new>-cdseq  TO wa_modified_entries-cdseq,
          <fs_zts0001_old>-zaddress TO wa_modified_entries-old_address,
          <fs_zts0001_new>-zaddress TO wa_modified_entries-new_address.
          v_flag = 1.
        ENDIF.
*       person
        IF <fs_zts0001_old>-zcperson <> <fs_zts0001_new>-zcperson.
          MOVE: <fs_zts0001_new>-kunnr  TO wa_modified_entries-kunnr,
                <fs_zts0001_new>-cdseq  TO wa_modified_entries-cdseq,
          <fs_zts0001_old>-zcperson TO wa_modified_entries-old_person,
          <fs_zts0001_new>-zcperson TO wa_modified_entries-new_person.
          v_flag = 1.
        ENDIF.
*       number
        IF <fs_zts0001_old>-zcnumber <> <fs_zts0001_new>-zcnumber.
          MOVE: <fs_zts0001_new>-kunnr  TO wa_modified_entries-kunnr,
                <fs_zts0001_new>-cdseq  TO wa_modified_entries-cdseq,
          <fs_zts0001_old>-zcnumber TO wa_modified_entries-old_number,
          <fs_zts0001_new>-zcnumber TO wa_modified_entries-new_number.
          v_flag = 1.
        ENDIF.
      ENDIF.

      IF v_flag = 1.
        APPEND wa_modified_entries TO gt_modified_entries.
        CLEAR wa_modified_entries.
      ENDIF.
*     update ZTS_STPGEOLOC based from the modified records in ZTS0001
      IF v_flag = 1.
        CLEAR v_flag.
        UPDATE zts_stpgeoloc SET zaddress  = <fs_zts0001_new>-zaddress
                                  zcperson = <fs_zts0001_new>-zcperson
                                  zcnumber = <fs_zts0001_new>-zcnumber
                               WHERE kunnr = <fs_zts0001_new>-kunnr
                                 AND cdseq = <fs_zts0001_new>-cdseq.
      ENDIF.
    ENDLOOP.
    IF NOT gt_modified_entries[] IS INITIAL.
    EXPORT gt_modified_entries = gt_modified_entries TO MEMORY ID 'MOD'
                                .
    ENDIF.
  ENDMETHOD.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_messages DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_messages DEFINITION INHERITING FROM lcl_main.
  PUBLIC SECTION.
    METHODS: create_message.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_messages IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_messages IMPLEMENTATION.
  METHOD create_message.
    FIELD-SYMBOLS: <fs_email> LIKE LINE OF gt_zshipto_email,
                   <fs_del>   LIKE LINE OF gt_del_entries,
                   <fs_mod>   LIKE LINE OF gt_modified_entries.

    DATA: wa_mailtxt LIKE LINE OF gt_mailtxt,
          wa_mailrec LIKE LINE OF gt_mailrec.

    IMPORT gt_modified_entries = gt_modified_entries
                                 FROM MEMORY ID 'MOD'.
    IMPORT gt_del_entries = gt_del_entries FROM MEMORY ID 'DEL'.

    SELECT * FROM zshipto_email INTO TABLE gt_zshipto_email
     WHERE zevent = '2'.

    IF sy-dbcnt > 0.
*/    routine for records that were deleted
      IF NOT gt_del_entries[] IS INITIAL.
        t_maildata-obj_name  = 'Record Deleted in table ZTS0001'.
        t_maildata-obj_descr = 'Record Deleted in table ZTS0001'.
        t_maildata-obj_langu = sy-langu.

        CLEAR: v_flag, v_counter.
        LOOP AT gt_zshipto_email ASSIGNING <fs_email>.
          LOOP AT gt_del_entries ASSIGNING <fs_del>.
*           get name of dealer
            SELECT SINGLE name1 FROM kna1
            INTO <fs_del>-name1
            WHERE kunnr = <fs_del>-kunnr.

            IF v_counter IS INITIAL.
             CONCATENATE: 'FYI: The ff record/s were deleted in tables'
                           'ZTS0001 and ZTS_STPGEOLOC by user' sy-uname
                                                      INTO v_contents
                                                     SEPARATED BY space.
              wa_mailtxt-line =  v_contents.
              APPEND wa_mailtxt TO gt_mailtxt.
              CLEAR: wa_mailtxt, v_contents.
            ENDIF.

            APPEND wa_mailtxt TO gt_mailtxt. "Extra space for message
            CONCATENATE: 'Dealer :' <fs_del>-kunnr '-'
                         <fs_del>-name1
                         INTO v_contents
                         SEPARATED BY space.
            wa_mailtxt-line = v_contents.
            APPEND wa_mailtxt TO gt_mailtxt.
            CLEAR: wa_mailtxt, v_contents.

            CONCATENATE: 'Ship-To:' <fs_del>-cdseq
                         INTO v_contents
                         SEPARATED BY space.
            wa_mailtxt-line = v_contents.
            APPEND wa_mailtxt TO gt_mailtxt.
            CLEAR: wa_mailtxt, v_contents.

            CONCATENATE: 'Address:' <fs_del>-zaddress
                         INTO v_contents
                         SEPARATED BY space.
            wa_mailtxt-line = v_contents.
            APPEND wa_mailtxt TO gt_mailtxt.
            CLEAR: wa_mailtxt, v_contents.

            CONCATENATE: 'Contact person:' <fs_del>-zcperson
                         INTO v_contents
                         SEPARATED BY space.
            wa_mailtxt-line = v_contents.
            APPEND wa_mailtxt TO gt_mailtxt.
            CLEAR: wa_mailtxt, v_contents.

            CONCATENATE: 'Contact number:' <fs_del>-zcnumber
                         INTO v_contents
                         SEPARATED BY space.
            wa_mailtxt-line = v_contents.
            APPEND wa_mailtxt TO gt_mailtxt.
            CLEAR: wa_mailtxt, v_contents.
            v_counter = 1.
          ENDLOOP.
          wa_mailrec-receiver = <fs_email>-zemail.
          wa_mailrec-rec_type  = 'U'.
          APPEND wa_mailrec TO gt_mailrec.

          CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
               EXPORTING
                    document_data              = t_maildata
                    document_type              = 'RAW'
                    put_in_outbox              = 'X'
*                  commit_work                = 'X'
               TABLES
*                  object_header              = mailtxt
                    object_content             = gt_mailtxt
                    receivers                  = gt_mailrec
               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.

          CLEAR:    wa_mailtxt, wa_mailrec.
          REFRESH:  gt_mailtxt, gt_mailrec.
        ENDLOOP.
      ENDIF.
      CLEAR wa_mailtxt.
      REFRESH gt_mailtxt.

*/    routine for records that were modified
      IF NOT gt_modified_entries[] IS INITIAL.
        CLEAR t_maildata.
        t_maildata-obj_name  = 'Record changed in table ZTS0001'.
        t_maildata-obj_descr = 'Record changed in table ZTS0001'.
        t_maildata-obj_langu = sy-langu.

        CLEAR v_counter.
        LOOP AT gt_zshipto_email ASSIGNING <fs_email>.
          CONCATENATE: 'FYI: The ff records were changed in tables'
                       'ZTS0001 and ZTS_STPGEOLOC by user' sy-uname
                       INTO v_contents
                       SEPARATED BY space.
          wa_mailtxt-line =  v_contents.
          APPEND wa_mailtxt TO gt_mailtxt.
          CLEAR: wa_mailtxt, v_contents.

          LOOP AT gt_modified_entries ASSIGNING <fs_mod>.
*          get name of dealer
            SELECT SINGLE name1 FROM kna1
            INTO <fs_mod>-name1
            WHERE kunnr = <fs_mod>-kunnr.

            APPEND wa_mailtxt TO gt_mailtxt.
            CONCATENATE: 'Dealer :' <fs_mod>-kunnr '-'
                         <fs_mod>-name1
                         INTO v_contents
                         SEPARATED BY space.
            wa_mailtxt-line = v_contents.
            APPEND wa_mailtxt TO gt_mailtxt.
            CLEAR: wa_mailtxt, v_contents.

            CONCATENATE: 'Ship-To:' <fs_mod>-cdseq
                         INTO v_contents
                         SEPARATED BY space.
            wa_mailtxt-line = v_contents.
            APPEND wa_mailtxt TO gt_mailtxt.
            CLEAR: wa_mailtxt, v_contents.
*           address
            IF NOT <fs_mod>-old_address IS INITIAL AND
               NOT <fs_mod>-new_address IS INITIAL.

              CONCATENATE: 'Address from:' <fs_mod>-old_address
                           INTO v_contents
                           SEPARATED BY space.
              wa_mailtxt-line = v_contents.
              APPEND wa_mailtxt TO gt_mailtxt.
              CLEAR: wa_mailtxt, v_contents.

              CONCATENATE: 'Address to  :' <fs_mod>-new_address
                           INTO v_contents
                           SEPARATED BY space.
              wa_mailtxt-line = v_contents.
              APPEND wa_mailtxt TO gt_mailtxt.
              CLEAR: wa_mailtxt, v_contents.
            ENDIF.
*           person
            IF NOT <fs_mod>-old_person IS INITIAL AND
                   NOT <fs_mod>-new_person IS INITIAL.

              CONCATENATE: 'Contact person from:'
                           <fs_mod>-old_person
                           INTO v_contents
                           SEPARATED BY space.
              wa_mailtxt-line = v_contents.
              APPEND wa_mailtxt TO gt_mailtxt.
              CLEAR: wa_mailtxt, v_contents.

              CONCATENATE: 'Contact person to  :'
                           <fs_mod>-new_person
                           INTO v_contents
                           SEPARATED BY space.
              wa_mailtxt-line = v_contents.
              APPEND wa_mailtxt TO gt_mailtxt.
              CLEAR: wa_mailtxt, v_contents.
            ENDIF.
*           number
            IF NOT <fs_mod>-old_number IS INITIAL AND
                   NOT <fs_mod>-new_number IS INITIAL.

              CONCATENATE: 'Contact number from:'
                           <fs_mod>-old_number
                           INTO v_contents
                           SEPARATED BY space.
              wa_mailtxt-line = v_contents.
              APPEND wa_mailtxt TO gt_mailtxt.
              CLEAR: wa_mailtxt, v_contents.

              CONCATENATE: 'Contact number to  :'
                           <fs_mod>-new_number
                           INTO v_contents
                           SEPARATED BY space.
              wa_mailtxt-line = v_contents.
              APPEND wa_mailtxt TO gt_mailtxt.
              CLEAR: wa_mailtxt, v_contents.
            ENDIF.
          ENDLOOP.
          wa_mailrec-receiver = <fs_email>-zemail.
          wa_mailrec-rec_type  = 'U'.
          APPEND wa_mailrec TO gt_mailrec.

          CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
               EXPORTING
                    document_data              = t_maildata
                    document_type              = 'RAW'
                    put_in_outbox              = 'X'
*                  commit_work                = 'X'
               TABLES
*                  object_header              = mailtxt
                    object_content             = gt_mailtxt
                    receivers                  = gt_mailrec
               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.

          CLEAR:    wa_mailtxt, wa_mailrec.
          REFRESH:  gt_mailtxt, gt_mailrec.
        ENDLOOP.
      ENDIF.
    ENDIF.
    FREE MEMORY ID 'AVH'.
    FREE MEMORY ID 'DEL'.
    FREE MEMORY ID 'MOD'.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

*---------------------------------------------------------------------*
*       FORM get_orig_contents_of_zts0001                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*/ before saving the data in the database
FORM get_orig_contents_of_zts0001.
  DATA: get_old_recs TYPE REF TO lcl_get_old_recs.
  CREATE OBJECT get_old_recs.

  CALL METHOD get_old_recs->export_old_recs.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM get_rev_contents_of_zts0001                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*/ after saving the data in the database
FORM get_rev_contents_of_zts0001.
  DATA: old_and_new   TYPE REF TO lcl_old_and_new,
        check_changes TYPE REF TO lcl_check_changes,
        messages      TYPE REF TO lcl_messages.

  CREATE OBJECT: old_and_new, check_changes, messages.

  CALL METHOD old_and_new->compare_old_and_new.
  CALL METHOD check_changes->check_for_changes.
  CALL METHOD messages->create_message.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM move_latest_date_and_user                                *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM move_latest_date_and_user.
  zts0001-zcreated_by   = sy-uname.
  zts0001-zchanged_date = sy-datum.
ENDFORM.

Hope it helps...

P.S. Please award points if it helps...