REPORT ZSAPN_SEND_EMAIL.
*Prepare Mail Object
DATA: LO_SEND_REQUEST TYPE REF TO CL_BCS VALUE IS INITIAL.
CLASS CL_BCS DEFINITION LOAD.
DATA: LO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS VALUE IS INITIAL. "document object
DATA : I_TEXT TYPE BCSY_TEXT. "Table for body
DATA : W_TEXT LIKE LINE OF I_TEXT. "work area for message body
DATA: LO_SENDER TYPE REF TO IF_SENDER_BCS VALUE IS INITIAL. "sender
DATA: LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS VALUE IS INITIAL. "recipient
**Selection screen
PARAMETERS P_MTART TYPE MARA-MTART. "material type input
PARAMETERS : P_EMAIL TYPE ADR6-SMTP_ADDR. "Email input
PARAMETERS: P_SUB TYPE CHAR50. "email subject
PARAMETERS : P_SEND AS CHECKBOX. "send immediately flag
***Attachment data
DATA : IT_MARA TYPE TABLE OF MARA,
WA_MARA TYPE MARA.
DATA : LV_STRING TYPE STRING,
LV_DATA_STRING TYPE STRING,
LV_XSTRING TYPE XSTRING.
DATA: LIT_BINARY_CONTENT TYPE SOLIX_TAB,
L_ATTSUBJECT TYPE SOOD-OBJDES.
START-OF-SELECTION.
LO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
* Message body and subject
*Set body
W_TEXT-LINE = 'This is the first tutorial of sending email using SAP ABAP programming by SAPNuts.com'.
APPEND W_TEXT TO I_TEXT.
CLEAR W_TEXT.
W_TEXT-LINE = 'SAPNuts.com is the best SAP ABAP learning portal'.
APPEND W_TEXT TO I_TEXT.
CLEAR W_TEXT.
LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT( "create document
I_TYPE = 'TXT' "Type of document HTM, TXT etc
I_TEXT = I_TEXT "email body internal table
I_SUBJECT = P_SUB ). "email subject here p_sub input parameter
* Pass the document to send request
LO_SEND_REQUEST->SET_DOCUMENT( LO_DOCUMENT ).
***Set attachment
SELECT * FROM MARA INTO TABLE IT_MARA UP TO 50 ROWS
WHERE MTART = P_MTART.
LOOP AT IT_MARA INTO WA_MARA.
CONCATENATE WA_MARA-MATNR WA_MARA-MTART WA_MARA-MEINS WA_MARA-MBRSH WA_MARA-MATKL INTO LV_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
CONCATENATE LV_DATA_STRING LV_STRING INTO LV_DATA_STRING SEPARATED BY CL_ABAP_CHAR_UTILITIES=>NEWLINE.
ENDLOOP.
**Convert string to xstring
CALL FUNCTION 'HR_KR_STRING_TO_XSTRING'
EXPORTING
* codepage_to = '8300'
UNICODE_STRING = LV_DATA_STRING
* OUT_LEN =
IMPORTING
XSTRING_STREAM = LV_XSTRING
EXCEPTIONS
INVALID_CODEPAGE = 1
INVALID_STRING = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
IF SY-SUBRC = 1 .
ELSEIF SY-SUBRC = 2 .
WRITE:/ 'invalid string ' .
ENDIF.
ENDIF.
***Xstring to binary
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
BUFFER = LV_XSTRING
TABLES
BINARY_TAB = LIT_BINARY_CONTENT.
**add attachment
CLEAR L_ATTSUBJECT .
CONCATENATE 'Material Master Report' SY-DATUM INTO L_ATTSUBJECT.
* Create Attachment
TRY.
LO_DOCUMENT->ADD_ATTACHMENT( EXPORTING
I_ATTACHMENT_TYPE = 'XLS'
I_ATTACHMENT_SUBJECT = L_ATTSUBJECT
I_ATT_CONTENT_HEX = LIT_BINARY_CONTENT ).
* CATCH cx_document_bcs INTO lx_document_bcs.
ENDTRY.
TRY.
LO_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ). "sender is the logged in user
* Set sender to send request
LO_SEND_REQUEST->SET_SENDER(
EXPORTING
I_SENDER = LO_SENDER ).
* CATCH CX_ADDRESS_BCS.
****Catch exception here
ENDTRY.
**Set recipient
LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( P_EMAIL ). "Here Recipient is email input p_email
TRY.
LO_SEND_REQUEST->ADD_RECIPIENT(
EXPORTING
I_RECIPIENT = LO_RECIPIENT
I_EXPRESS = 'X' ).
* CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
ENDTRY.
TRY.
CALL METHOD LO_SEND_REQUEST->SET_SEND_IMMEDIATELY
EXPORTING
I_SEND_IMMEDIATELY = P_SEND. "here selection screen input p_send
* CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
**Catch exception here
ENDTRY.
TRY.
** Send email
LO_SEND_REQUEST->SEND(
EXPORTING
I_WITH_ERROR_SCREEN = 'X' ).
COMMIT WORK.
IF SY-SUBRC = 0. "mail sent successfully
WRITE :/ 'Mail sent successfully'.
ENDIF.
* CATCH CX_SEND_REQ_BCS INTO BCS_EXCEPTION .
*catch exception here
ENDTRY.
Serkan AKKAVAK
Computer Engineer
ABAP Developer & SAP MM SD Consultant
Contact : serkurumsal@yandex.com
Social Plugin