Application Development and Automation 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: 
Read only

Send email with attachment

Former Member
0 Likes
941

I would like to send an email with attachment in Ascii format including CR/LF. The mail must also be copied to someone else.

Can I make use of function SO_NEW_DOCUMENT_ATT_SEND_API1 or is there an other solution.

Kind regards, Simon Tol

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
845

Hi Simon,

here a short example:

REPORT ZGRO_EMAIL_ITAB_EINFACH.

*

  • --- Parameter für SO_DOCUMENT_SEND_API1

DATA: OBJ_PACK LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,

OBJ_HEAD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

OBJ_BIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

OBJ_TXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

REC_LIST LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,

DOC_DATA LIKE SODOCCHGI1.

*

DATA: BEGIN OF ITAB OCCURS 0,

TEXT(72),

END OF ITAB.

*

DATA: ITAB_LINE TYPE I.

*

START-OF-SELECTION.

*

PERFORM VERSORGEN_ITAB.

*

CHECK: ITAB_LINE > 1.

*

PERFORM EMAIL_ITAB_RAW.

*

PERFORM RSCONN01_EXECUTE.

*

END-OF-SELECTION.

*

FORM VERSORGEN_ITAB.

  • Fill itab as you like

READ REPORT SY-REPID INTO ITAB.

*

DESCRIBE TABLE ITAB LINES ITAB_LINE.

*

ENDFORM.

*

FORM EMAIL_ITAB_RAW.

*

CLEAR: DOC_DATA, OBJ_PACK, OBJ_HEAD, OBJ_BIN, OBJ_TXT, REC_LIST.

REFRESH: OBJ_PACK, OBJ_HEAD, OBJ_BIN, OBJ_TXT, REC_LIST.

  • email füllen

  • Betreff-Zeile

CLEAR: DOC_DATA.

DOC_DATA-OBJ_NAME = SY-REPID.

DOC_DATA-OBJ_DESCR = 'Send Abap via email RAW'.

  • Empfängerliste

  • email-User (U)

CLEAR REC_LIST.

REC_LIST-RECEIVER = '[email protected]'. "email address

REC_LIST-REC_TYPE = 'U'.

APPEND REC_LIST.

REC_LIST-RECEIVER = '[email protected]'. "email address

APPEND REC_LIST.

*

  • PACKING_LIST: 1. Zeile gilt immer für email-Inhalt

CLEAR OBJ_PACK.

OBJ_PACK-BODY_START = 01.

OBJ_PACK-BODY_NUM = 03.

OBJ_PACK-DOC_TYPE = 'RAW'.

APPEND OBJ_PACK.

*

  • PACKING_LIST: 2.

CLEAR OBJ_PACK.

OBJ_PACK-TRANSF_BIN = 'X'.

OBJ_PACK-BODY_START = 01.

OBJ_PACK-BODY_NUM = ITAB_LINE.

OBJ_PACK-DOC_TYPE = 'RAW'.

OBJ_PACK-OBJ_NAME = 'Anhang_RAW'.

OBJ_PACK-OBJ_DESCR = SY-REPID.

APPEND OBJ_PACK.

*

*emailinhalt

CLEAR: OBJ_TXT.

OBJ_TXT-LINE = 'Hallo,'.

APPEND OBJ_TXT.

CONCATENATE 'report:' SY-REPID 'als RAW' INTO OBJ_TXT-LINE

SEPARATED BY SPACE.

APPEND OBJ_TXT.

CONCATENATE 'Gruß' SY-UNAME INTO OBJ_TXT-LINE

SEPARATED BY SPACE.

APPEND OBJ_TXT.

*

CLEAR: OBJ_BIN.

LOOP AT ITAB.

OBJ_BIN = ITAB.

APPEND OBJ_BIN.

ENDLOOP.

*

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

DOCUMENT_DATA = DOC_DATA

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

TABLES

PACKING_LIST = OBJ_PACK

CONTENTS_TXT = OBJ_TXT

CONTENTS_BIN = OBJ_BIN

RECEIVERS = REC_LIST

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.

WRITE: / SY-SUBRC.

ENDIF.

*

ENDFORM.

*

FORM RSCONN01_EXECUTE.

  • Besser 2 Sekunden warten, damit alles versendet ist

WAIT UP TO 2 SECONDS.

*

SUBMIT RSCONN01 WITH MODE = 'INT'

WITH OUTPUT = ' '

AND RETURN.

*

ENDFORM.

Regards, Dieter

I would like to send an email with attachment in Ascii format including CR/LF. The mail must also be copied to someone else.

Can I make use of function SO_NEW_DOCUMENT_ATT_SEND_API1 or is there an other solution.

Kind regards, Simon Tol

7 REPLIES 7
Read only

Former Member
0 Likes
845

this program is used to send mails to the users internet mail addresses.

if you want to place CR or LF, what you can do is use CL_ABAP_CHAR_UTILITIES class, get the values into the variables.

then while attaching the lines to the PACKLIST,just concatenate those values.

example

<b>CLASS CL_ABAP_CHAR_UTILITIES DEFINITION LOAD.

CONSTANTS: L_TAB TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.</b>

this L_TAB i used below,where i am attching my lines to the attachment internal table.

like that you also can do LF or CF etc..

REPORT ZSRIM_PRG_MAIL1 .


 DATA : L_TABLE_LINES LIKE SY-TABIX,                   " table index
         L_TAB TYPE X VALUE '09',                       " TAB value
         L_MANDT TYPE SY-MANDT.                         " Client

  DATA: X_DOC_CHNG LIKE SODOCCHGI1,              " document attributes
        IT_OBJPACK LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,
                                                 " attachment table
        IT_OBJHEAD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
                                                 " object header table
        IT_OBJBIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
                                                 " binary table
        IT_OBJTXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,
        IT_RECLIST LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE.

  CLEAR IT_RECLIST.
  REFRESH IT_RECLIST.

*-popualate email ids
      IT_RECLIST-RECEIVER = '[email protected]'.
      IT_RECLIST-REC_TYPE = 'U'.
*-append receiver table
      APPEND IT_RECLIST.
      CLEAR  IT_RECLIST.

*-populate document attributes
    CLEAR: X_DOC_CHNG.
    X_DOC_CHNG-OBJ_NAME = 'HEADING'.
    X_DOC_CHNG-OBJ_DESCR = 'SOME DESCRIPTION'.

*-populate body text
    IT_OBJTXT = 'ARCOS Reporting Extraction Error file is attached'.
    APPEND IT_OBJTXT.


*-document size
    CLEAR : L_TABLE_LINES.
    DESCRIBE TABLE IT_OBJTXT LINES L_TABLE_LINES.
    READ TABLE IT_OBJTXT INDEX L_TABLE_LINES.
    X_DOC_CHNG-DOC_SIZE =
                 ( L_TABLE_LINES - 1 ) * 255 + STRLEN( IT_OBJTXT ).

*-populate packing list for body text
    CLEAR IT_OBJPACK-TRANSF_BIN.
    IT_OBJPACK-HEAD_START = 1.
    IT_OBJPACK-HEAD_NUM = 0.
    IT_OBJPACK-BODY_START = 1.
    IT_OBJPACK-BODY_NUM = L_TABLE_LINES.
    <b>IT_OBJPACK-DOC_TYPE = 'RAW'.</b> "this makes your attachment a raw format.

    APPEND IT_OBJPACK.
    CLEAR IT_OBJPACK.


*-populate object header
    IT_OBJHEAD = 'Arcos Error Report'(057).

    APPEND IT_OBJHEAD.
    CLEAR  IT_OBJHEAD.


*--for attachment ---start
*-populate object bin table for attachment
*-column header
<b>    CONCATENATE 'Document No.'
                'Year'
*                'Item'
*                'Material No.'
                'Error Text'
                INTO  IT_OBJBIN SEPARATED BY L_TAB.</b>
    APPEND IT_OBJBIN.
    CLEAR  IT_OBJBIN.

*-error details
      CONCATENATE '1'
                  '1st record'
                  '1st record in attachment'
           INTO   IT_OBJBIN SEPARATED BY L_TAB.

      APPEND IT_OBJBIN.
      CLEAR  IT_OBJBIN.

      CONCATENATE '2'
                  '2st record'
                  '2st record in attachment'
           INTO   IT_OBJBIN SEPARATED BY L_TAB.
      APPEND IT_OBJBIN.
      CLEAR  IT_OBJBIN.
*-get total no.of lines of Object table(attachment)
    CLEAR : L_TABLE_LINES.
    DESCRIBE TABLE IT_OBJBIN LINES L_TABLE_LINES.

*-populate object header
    IT_OBJHEAD = 'Report'.

    APPEND IT_OBJHEAD.
    CLEAR  IT_OBJHEAD.

*-packing list for attachment
    IT_OBJPACK-TRANSF_BIN = 'X'.
    IT_OBJPACK-HEAD_START = 1.
    IT_OBJPACK-HEAD_NUM = 1.
    IT_OBJPACK-BODY_START = 1.
    IT_OBJPACK-BODY_NUM = L_TABLE_LINES .
    IT_OBJPACK-DOC_TYPE = 'RAW' .
    IT_OBJPACK-OBJ_NAME = 'ABCD'.
    IT_OBJPACK-OBJ_DESCR = 'ERROR REPORT'.
    IT_OBJPACK-DOC_SIZE = L_TABLE_LINES * 255.
    APPEND IT_OBJPACK.
    CLEAR  IT_OBJPACK.
*--code for attachment -- end


*-Sending the document
    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
         EXPORTING
              DOCUMENT_DATA              = X_DOC_CHNG
             PUT_IN_OUTBOX              = 'X'
*    IMPORTING
*         SENT_TO_ALL                =
*         NEW_OBJECT_ID              =
         TABLES
              PACKING_LIST               = IT_OBJPACK
             OBJECT_HEADER              = IT_OBJHEAD
             CONTENTS_BIN               = IT_OBJBIN
             CONTENTS_TXT               = IT_OBJTXT
*         CONTENTS_HEX               =
*         OBJECT_PARA                =
*         OBJECT_PARB                =
              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.

regards

srikanth

Message was edited by: Srikanth Kidambi

Read only

Former Member
0 Likes
846

Hi Simon,

here a short example:

REPORT ZGRO_EMAIL_ITAB_EINFACH.

*

  • --- Parameter für SO_DOCUMENT_SEND_API1

DATA: OBJ_PACK LIKE SOPCKLSTI1 OCCURS 0 WITH HEADER LINE,

OBJ_HEAD LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

OBJ_BIN LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

OBJ_TXT LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE,

REC_LIST LIKE SOMLRECI1 OCCURS 0 WITH HEADER LINE,

DOC_DATA LIKE SODOCCHGI1.

*

DATA: BEGIN OF ITAB OCCURS 0,

TEXT(72),

END OF ITAB.

*

DATA: ITAB_LINE TYPE I.

*

START-OF-SELECTION.

*

PERFORM VERSORGEN_ITAB.

*

CHECK: ITAB_LINE > 1.

*

PERFORM EMAIL_ITAB_RAW.

*

PERFORM RSCONN01_EXECUTE.

*

END-OF-SELECTION.

*

FORM VERSORGEN_ITAB.

  • Fill itab as you like

READ REPORT SY-REPID INTO ITAB.

*

DESCRIBE TABLE ITAB LINES ITAB_LINE.

*

ENDFORM.

*

FORM EMAIL_ITAB_RAW.

*

CLEAR: DOC_DATA, OBJ_PACK, OBJ_HEAD, OBJ_BIN, OBJ_TXT, REC_LIST.

REFRESH: OBJ_PACK, OBJ_HEAD, OBJ_BIN, OBJ_TXT, REC_LIST.

  • email füllen

  • Betreff-Zeile

CLEAR: DOC_DATA.

DOC_DATA-OBJ_NAME = SY-REPID.

DOC_DATA-OBJ_DESCR = 'Send Abap via email RAW'.

  • Empfängerliste

  • email-User (U)

CLEAR REC_LIST.

REC_LIST-RECEIVER = '[email protected]'. "email address

REC_LIST-REC_TYPE = 'U'.

APPEND REC_LIST.

REC_LIST-RECEIVER = '[email protected]'. "email address

APPEND REC_LIST.

*

  • PACKING_LIST: 1. Zeile gilt immer für email-Inhalt

CLEAR OBJ_PACK.

OBJ_PACK-BODY_START = 01.

OBJ_PACK-BODY_NUM = 03.

OBJ_PACK-DOC_TYPE = 'RAW'.

APPEND OBJ_PACK.

*

  • PACKING_LIST: 2.

CLEAR OBJ_PACK.

OBJ_PACK-TRANSF_BIN = 'X'.

OBJ_PACK-BODY_START = 01.

OBJ_PACK-BODY_NUM = ITAB_LINE.

OBJ_PACK-DOC_TYPE = 'RAW'.

OBJ_PACK-OBJ_NAME = 'Anhang_RAW'.

OBJ_PACK-OBJ_DESCR = SY-REPID.

APPEND OBJ_PACK.

*

*emailinhalt

CLEAR: OBJ_TXT.

OBJ_TXT-LINE = 'Hallo,'.

APPEND OBJ_TXT.

CONCATENATE 'report:' SY-REPID 'als RAW' INTO OBJ_TXT-LINE

SEPARATED BY SPACE.

APPEND OBJ_TXT.

CONCATENATE 'Gruß' SY-UNAME INTO OBJ_TXT-LINE

SEPARATED BY SPACE.

APPEND OBJ_TXT.

*

CLEAR: OBJ_BIN.

LOOP AT ITAB.

OBJ_BIN = ITAB.

APPEND OBJ_BIN.

ENDLOOP.

*

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

DOCUMENT_DATA = DOC_DATA

PUT_IN_OUTBOX = 'X'

COMMIT_WORK = 'X'

TABLES

PACKING_LIST = OBJ_PACK

CONTENTS_TXT = OBJ_TXT

CONTENTS_BIN = OBJ_BIN

RECEIVERS = REC_LIST

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.

WRITE: / SY-SUBRC.

ENDIF.

*

ENDFORM.

*

FORM RSCONN01_EXECUTE.

  • Besser 2 Sekunden warten, damit alles versendet ist

WAIT UP TO 2 SECONDS.

*

SUBMIT RSCONN01 WITH MODE = 'INT'

WITH OUTPUT = ' '

AND RETURN.

*

ENDFORM.

Regards, Dieter

Read only

Former Member
0 Likes
845

to place any other user names in CC or BCC fields,

while populating the RECEIVERS internal table, you just pass the values to the below fields

COPY Send : As copy

BLIND_COPY : Send as a blind copy

just you have to populate either of the above fields with 'X',so that in the mail, this receiver ID will be placed either in CC or BCC.

*-popualate email ids

<b>      IT_RECLIST-RECEIVER = '[email protected]'.
      IT_RECLIST-REC_TYPE = 'U'.
      IT_RECLIST-COPY = 'X' " to place in CC field     
*-append receiver table
      APPEND IT_RECLIST.
      CLEAR  IT_RECLIST.</b>

or

<b> IT_RECLIST-BLIND_COPY = 'X' "to place in BCC field </b>

Read only

Former Member
0 Likes
845

Hi,

FM SO_NEW_DOCUMENT_ATT_SEND_API1 is used to send

mail as attachment.

call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'

exporting

document_data = doc_chng

put_in_outbox = 'X'

importing

sent_to_all = sent_to_all

tables

packing_list = objpack

object_header = objhead

contents_bin = objbin

contents_txt = objtxt

receivers = reclist

exceptions

too_many_receivers = 1

document_not_sent = 2

operation_no_authorization = 4

others = 99.

populate reclist with multiple

email address you want to copy.

Regards

Amole

Read only

Former Member
0 Likes
845

Hai Simon

DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.

DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.

DATA: OBJBIN LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.

DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.

DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.

DATA: DOC_CHNG LIKE SODOCCHGI1.

DOC_CHNG-OBJ_NAME = 'TEST'.

DOC_CHNG-OBJ_DESCR = 'Test-Dokument fur API1 Test'(001).

OBJTXT = 'Mindestgebot : $250000'.

APPEND OBJTXT.

OBJTXT = 'Eine Abbildung des zur Versteigerung stehenden Bildes'.

APPEND OBJTXT.

OBJTXT = 'wurde als Anlage beigefugt.'.

APPEND OBJTXT.

DESCRIBE TABLE OBJTXT LINES TAB_LINES.

READ TABLE OBJTXT INDEX TAB_LINES.

DOC_CHNG-DOC_SIZE = ( TAB_LINES - 1 ) * 255 + STRLEN( OBJTXT ).

  • * ERSTELLEN DES EINTRAGS ZUM KOMPRIMIERTEN DOKUMENT

CLEAR OBJPACK-TRANSF_BIN.

OBJPACK-HEAD_START = 1.

OBJPACK-HEAD_NUM = 0.

OBJPACK-BODY_START = 1.

OBJPACK-BODY_NUM = TAB_LINES.

OBJPACK-DOC_TYPE = 'RAW'.

APPEND OBJPACK.

  • * ERSTELLEN DER ANLAGE FUR DAS DOKUMENT

OBJBIN = '\O/ '. APPEND OBJBIN.

OBJBIN = ' '. APPEND OBJBIN.

OBJBIN = ' / \ '. APPEND OBJBIN.

DESCRIBE TABLE OBJBIN LINES TAB_LINES.

OBJHEAD = 'picasso.txt'. APPEND OBJHEAD.

  • * Erstellen des Eintrags zur komprimierten Anlage

OBJPACK-TRANSF_BIN = 'X'.

OBJPACK-HEAD_START = 1.

OBJPACK-HEAD_NUM = 1.

OBJPACK-BODY_START = 1.

OBJPACK-BODY_NUM = TAB_LINES.

OBJPACK-DOC_TYPE = 'TXT'.

OBJPACK-OBJ_NAME = 'ANLAGE'.

OBJPACK-OBJ_DESCR = 'Abbildung Objekt 138'.

OBJPACK-DOC_SIZE = TAB_LINES * 255.

APPEND OBJPACK.

  • * Fullen der Empfangerliste

RECLIST-RECEIVER = SY-UNAME.

RECLIST-REC_TYPE = 'B'.

APPEND RECLIST.

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

DOCUMENT_DATA = DOC_CHNG

PUT_IN_OUTBOX = 'X'

TABLES

PACKING_LIST = OBJPACK

OBJECT_HEADER = OBJHEAD

CONTENTS_BIN = OBJBIN

CONTENTS_TXT = OBJTXT

RECEIVERS = RECLIST

EXCEPTIONS

TOO_MANY_RECEIVERS = 1

DOCUMENT_NOT_SENT = 2

OPERATION_NO_AUTHORIZATION = 4

OTHERS = 99.

Regards

Sreeni

Read only

Former Member
0 Likes
845

Hi Simon,

problem solved?

Regars, Dieter

Read only

0 Likes
845

I am busy with some other urgent issues. Haven't had the time to try out. But thank you for your help.