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

Need to attach mulitple document while sending mail

Former Member
0 Likes
1,821

Dear Expert,

I need to attach multiple document while sending mail .

I m using the FM to send mail with attachment is SO_NEW_DOCUMENT_ATT_SEND_API1 .

One document attachment is working fine.

I dont know how to send multiple attachment in one mail .please help me

5 REPLIES 5
Read only

MarcinPciak
Active Contributor
0 Likes
1,742

In packing list parameter table FM SO_NEW_DOCUMENT_ATT_SEND_API1 you determine how many attachemnets are in the email. First line of this table desribes message, further lines are dedicated for attachments (one line per attachment). Simply append information about next attachemnts to this table. I.e. two lines -> one attachement (1st line for message, 2nd line for attachments), three lines -> two attachments... and so on.

Regards

Marcin

Read only

Former Member
0 Likes
1,742

refer to this link..

hope it helps.

Read only

Peter_Lintner
Participant
0 Likes
1,742

Hi!

please refer to my sample coding:

Fill the table objpack.

Count the added lines and fill the corresponding body_start and body_end-column.

The description is the displayed description of the attachment.

loop at lt_doks.

  • --> add your attachment to the table objbin

  • Fill the objpack-Table

objpack-transf_bin = 'X'.

objpack-head_start = 2.

objpack-head_num = 0.

objpack-body_start = tab_lines + 1.

objpack-body_num = tab_lines_new.

objpack-doc_type = toadv-doc_type.

objpack-obj_name = 'Attachment'.

objpack-obj_descr = lt_doks-objecttext.

objpack-doc_size = tab_lines_new * 255.

append objpack.

tab_lines = tab_lines + tab_lines_new.

clear tab_lines_new.

endloop.

call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'

exporting

document_data = document_data

put_in_outbox = ' '

commit_work = 'X'

tables

packing_list = objpack

contents_txt = daten

contents_bin = objbin

receivers = 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.

I hope, this sample help's you - the documentation of the FM also provides samples!

Kind regards

Peter

Read only

Former Member
0 Likes
1,742

Hi,

Please look into below code.

DATA: SEND_REQUEST TYPE REF TO CL_BCS.

DATA: SUBJECT TYPE SO_OBJ_DES.

DATA: ATT_TYPE TYPE SOODK-OBJTP.

DATA: IT_TEXT TYPE BCSY_TEXT.

DATA: WA_TEXT LIKE SOLI.

DATA: IT_BIN TYPE SOLIX_TAB.

DATA: WA_BIN TYPE SOLIX.

DATA: DOCUMENT TYPE REF TO CL_DOCUMENT_BCS.

DATA: SENDER TYPE REF TO CL_SAPUSER_BCS.

DATA: RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.

DATA: BCS_EXCEPTION TYPE REF TO CX_BCS.

DATA: SENT_TO_ALL TYPE OS_BOOLEAN.

Bytes der Datei

DATA: IT_LENGHT TYPE SO_OBJ_LEN.

DATA: N10(10) TYPE N.

*

CONSTANTS: CON_NEWL TYPE ABAP_CHAR1

VALUE CL_ABAP_CHAR_UTILITIES=>NEWLINE,

CON_TAB TYPE ABAP_CHAR1

VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

*

START-OF-SELECTION.

PERFORM MAIN.

PERFORM RSCONN01_EXECUTE.

END-OF-SELECTION.

************************************************************************

FORM MAIN.

TRY.

*

SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).

*

PERFORM HEAD_CONT.

PERFORM XLS_ATT.

PERFORM XLS_ATT1.

PERFORM XLS_ATT2.

*

Dokument (mit Anhang) setzen

CALL METHOD SEND_REQUEST->SET_DOCUMENT( DOCUMENT ).

*

Absender setzen

*

SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ).

CALL METHOD SEND_REQUEST->SET_SENDER

EXPORTING

I_SENDER = SENDER.

*

Empfänger setzen

email-Empfänger

*

RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS(

'yourmailaddress' ).

CALL METHOD SEND_REQUEST->ADD_RECIPIENT

EXPORTING

I_RECIPIENT = RECIPIENT

I_EXPRESS = 'X'.

*

Dokument senden

*

CALL METHOD SEND_REQUEST->SEND(

EXPORTING

I_WITH_ERROR_SCREEN = 'X'

RECEIVING

RESULT = SENT_TO_ALL ).

*

COMMIT WORK.

*

Sende-Error abfangen

CATCH CX_BCS INTO BCS_EXCEPTION.

WRITE: 'Fehler aufgetreten.'(001).

WRITE: 'Fehlertyp:'(002), BCS_EXCEPTION->ERROR_TYPE.

EXIT.

ENDTRY.

ENDFORM. "main

************************************************************************

FORM HEAD_CONT.

*

CLEAR: IT_TEXT[], WA_TEXT, SUBJECT.

*

ATT_TYPE = 'RAW'.

*

CONCATENATE 'Betreffzeile am' SY-DATUM 'um' SY-UZEIT

INTO SUBJECT SEPARATED BY SPACE.

*

WA_TEXT = 'Hello!'.

APPEND WA_TEXT TO IT_TEXT.

*

DESCRIBE TABLE IT_TEXT LINES N10.

N10 = ( N10 - 1 ) * 255 + STRLEN( WA_TEXT ).

IT_LENGHT = N10.

*

DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(

I_TYPE = ATT_TYPE

I_TEXT = IT_TEXT

I_LENGTH = IT_LENGHT

I_SUBJECT = SUBJECT ).

*

ENDFORM. "HEAD_CONT

************************************************************************

FORM XLS_ATT.

*

DATA: BEGIN OF ITAB OCCURS 0,

MATNR LIKE MARA-MATNR,

MTART LIKE MARA-MTART,

MATKL LIKE MARA-MATKL,

BRGEW LIKE MARA-BRGEW,

END OF ITAB.

*

DATA: BRGEW(18).

*

CLEAR: IT_BIN[], WA_BIN, SUBJECT.

*

SELECT MATNR MTART MATKL BRGEW INTO TABLE ITAB

FROM MARA UP TO 10 ROWS.

*

CONCATENATE 'Material' CON_TAB

'Materialart' CON_TAB

'Warengruppe' CON_TAB

'Bruttogewicht' CON_NEWL

INTO WA_BIN.

APPEND WA_BIN TO IT_BIN.

*

LOOP AT ITAB.

WRITE ITAB-BRGEW TO BRGEW.

CONCATENATE ITAB-MATNR CON_TAB

ITAB-MTART CON_TAB

ITAB-MATKL CON_TAB

BRGEW CON_NEWL

INTO WA_BIN.

APPEND WA_BIN TO IT_BIN.

ENDLOOP.

*

ATT_TYPE = 'XLS'.

*

SUBJECT = 'My XLS attachment'.

*

DESCRIBE TABLE IT_BIN LINES N10.

N10 = ( N10 - 1 ) * 255 + STRLEN( WA_BIN ).

IT_LENGHT = N10.

*

CALL METHOD DOCUMENT->ADD_ATTACHMENT

EXPORTING

I_ATTACHMENT_TYPE = ATT_TYPE

I_ATT_CONTENT_HEX = IT_BIN

I_ATTACHMENT_SIZE = IT_LENGHT

I_ATTACHMENT_SUBJECT = SUBJECT.

*

ENDFORM. "XLS_ATT

************************************************************************

FORM XLS_ATT1.

*

DATA: BEGIN OF ITAB OCCURS 0,

KUNNR LIKE KNA1-KUNNR,

END OF ITAB.

*

CLEAR: IT_BIN[], WA_BIN, SUBJECT.

*

SELECT KUNNR INTO TABLE ITAB

FROM KNA1 UP TO 10 ROWS.

*

CONCATENATE 'Kunde' CON_NEWL INTO WA_BIN.

APPEND WA_BIN TO IT_BIN.

*

LOOP AT ITAB.

CLEAR WA_BIN.

CONCATENATE ITAB-KUNNR CON_NEWL INTO WA_BIN.

APPEND WA_BIN TO IT_BIN.

ENDLOOP.

*

ATT_TYPE = 'XLS'.

*

SUBJECT = 'My XLS attachment1'.

*

DESCRIBE TABLE IT_BIN LINES N10.

N10 = ( N10 - 1 ) * 255 + STRLEN( WA_BIN ).

IT_LENGHT = N10.

*

CALL METHOD DOCUMENT->ADD_ATTACHMENT

EXPORTING

I_ATTACHMENT_TYPE = ATT_TYPE

I_ATT_CONTENT_HEX = IT_BIN

I_ATTACHMENT_SIZE = IT_LENGHT

I_ATTACHMENT_SUBJECT = SUBJECT.

*

ENDFORM. "XLS_ATT1

************************************************************************

FORM XLS_ATT2.

*

DATA: BEGIN OF ITAB OCCURS 0,

LIFNR LIKE LFA1-LIFNR,

END OF ITAB.

*

CLEAR: IT_BIN[], WA_BIN, SUBJECT.

*

SELECT LIFNR INTO TABLE ITAB

FROM LFA1 UP TO 10 ROWS.

*

CONCATENATE 'Lieferant' CON_NEWL INTO WA_BIN.

APPEND WA_BIN TO IT_BIN.

*

LOOP AT ITAB.

CLEAR WA_BIN.

CONCATENATE ITAB-LIFNR CON_NEWL INTO WA_BIN.

APPEND WA_BIN TO IT_BIN.

ENDLOOP.

*

ATT_TYPE = 'XLS'.

*

SUBJECT = 'My XLS attachment2'.

*

DESCRIBE TABLE IT_BIN LINES N10.

N10 = ( N10 - 1 ) * 255 + STRLEN( WA_BIN ).

IT_LENGHT = N10.

*

CALL METHOD DOCUMENT->ADD_ATTACHMENT

EXPORTING

I_ATTACHMENT_TYPE = ATT_TYPE

I_ATT_CONTENT_HEX = IT_BIN

I_ATTACHMENT_SIZE = IT_LENGHT

I_ATTACHMENT_SUBJECT = SUBJECT.

*

ENDFORM. "XLS_ATT2

************************************************************************

FORM RSCONN01_EXECUTE.

*

WAIT UP TO 2 SECONDS.

*

SUBMIT RSCONN01 WITH MODE = 'INT'

WITH OUTPUT = ' '

AND RETURN.

*

ENDFORM. "RSCONN01_EXECUTE

Please let me know if you have any quries.

Regards,

Suresh.

Read only

Former Member
0 Likes
1,742

using the following program u can send the data of 2 internal table.

&----


*& Report ZBC_ITAB_TO_EXCEL_NEW *

*& *

&----


*& This dummy code helps in sending 2 internal tables data as two separate attachments

*& in a single mail id outside sap system

&----


REPORT ZBC_ITAB_TO_EXCEL_NEW .

CLASS: cl_abap_char_utilities DEFINITION LOAD.

DATA: docdata LIKE sodocchgi1,

objpack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,

objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE,

objbin1 LIKE solisti1 OCCURS 10 WITH HEADER LINE,

objbin2 LIKE solisti1 OCCURS 10 WITH HEADER LINE,

objbin_final LIKE solisti1 OCCURS 10 WITH HEADER LINE,

reclist LIKE somlreci1 OCCURS 1 WITH HEADER LINE,

tab_lines TYPE sy-tabix.

DATA: gd_sender_type LIKE soextreci1-adr_typ.

DATA: c_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,

c_ret TYPE c VALUE cl_abap_char_utilities=>cr_lf.

DATA: c_dev TYPE sy-sysid.

DATA: BEGIN OF i_data OCCURS 0,

a(20),

b(20),

END OF i_data.

DATA: BEGIN OF st,

f1(2) TYPE c,

f2(2) TYPE n,

END OF st.

DATA: itab1 LIKE TABLE OF st WITH HEADER LINE,

itab2 LIKE TABLE OF st WITH HEADER LINE.

DATA: n TYPE i.

PARAMETER: p_email1 LIKE somlreci1-receiver,

p_sender LIKE somlreci1-receiver.

START-OF-SELECTION.

itab1-f1 = 'AA'. itab1-f2 = '01'. APPEND itab1.

itab1-f1 = 'BB'. itab1-f2 = '02'. APPEND itab1.

itab1-f1 = 'CC'. itab1-f2 = '03'. APPEND itab1.

itab2-f1 = 'ZZ'. itab2-f2 = '26'. APPEND itab2.

itab2-f1 = 'YY'. itab2-f2 = '25'. APPEND itab2.

LOOP AT itab1.

CONCATENATE itab1-f1 itab1-f2 INTO objbin1 separated BY c_tab.

CONCATENATE c_ret objbin1 INTO objbin1.

APPEND objbin1.

ENDLOOP.

LOOP AT itab2.

CONCATENATE itab2-f1 itab2-f2 INTO objbin2 separated BY c_tab.

CONCATENATE c_ret objbin2 INTO objbin2.

APPEND objbin2.

ENDLOOP.

LOOP AT objbin1.

MOVE objbin1-line TO objbin_final-line.

APPEND objbin_final.

ENDLOOP.

LOOP AT objbin2.

MOVE objbin2-line TO objbin_final-line.

APPEND objbin_final.

ENDLOOP.

PERFORM process_email.

c_dev = sy-sysid.

IF sy-sysid = c_dev.

wait up to 5 seconds.

SUBMIT rsconn01 WITH mode = 'INT'

WITH output = 'X'

AND RETURN.

ENDIF.

IF sy-subrc = 0.

WRITE: / 'Email succesfilly delivered'.

ELSE.

WRITE: / 'failure'.

ENDIF.

&----


*& Form process_email

&----


  • text

----


FORM process_email.

IF p_sender EQ space.

gd_sender_type = space.

ELSE.

gd_sender_type = 'INT'.

ENDIF.

*Body

docdata-obj_name = 'Mail_Excel_File'.

docdata-obj_descr = 'Excel file attachment'.

objtxt = 'Attached is the sample Excel file'.

APPEND objtxt.

DESCRIBE TABLE objtxt LINES tab_lines.

READ TABLE objtxt INDEX tab_lines.

docdata-doc_size = ( tab_lines - 1 ) * 255 + strlen( objtxt ).

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.

*Attachment 1

n = 1.

DESCRIBE TABLE objbin1 LINES tab_lines.

objpack-doc_size = tab_lines * 255.

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 1.

objpack-body_start = n.

objpack-body_num = tab_lines.

objpack-doc_type = 'XLS'.

docdata-obj_name = 'Excel_File_Attachment1'.

objpack-obj_descr = 'Excel File Attachment1'.

APPEND objpack.

*Attachment 1

n = n + tab_lines.

DESCRIBE TABLE objbin2 LINES tab_lines.

objpack-doc_size = tab_lines * 255.

objpack-transf_bin = 'X'.

objpack-head_start = 1.

objpack-head_num = 1.

objpack-body_start = n.

objpack-body_num = tab_lines.

objpack-doc_type = 'XLS'.

docdata-obj_name = 'Excel_File_Attachment2'.

objpack-obj_descr = 'Excel File Attachment2'.

APPEND objpack.

*Create the list of recipients

reclist-receiver = p_email1.

reclist-rec_type = 'U'.

reclist-express = 'X'.

APPEND reclist.

*Send the e-mail

CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

EXPORTING

document_data = docdata

put_in_outbox = 'X'

commit_work = 'X'

TABLES

packing_list = objpack

contents_bin = objbin_final

contents_txt = objtxt

receivers = 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.

COMMIT WORK.

ENDFORM. "process_email