HOW TO SEND EMAIL IN SAP ABAP OR OOPS ABAP
REPORT ZSEND_EMAIL.
*DATA: LV_VALUE
*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 : IT_TEXT TYPE BCSY_TEXT. "TABLE FOR BODY
DATA : WA_TEXT LIKE LINE OF IT_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.
"CREATE OBJECT FOR SENDING EMAIL
LO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
*****************************START OF
BOCY***************************************************
* MESSAGE BODY
*1ST STEP - SETTING UP THE BODY
* WA_TEXT-LINE = 'HI STUDENTS,'.
* APPEND WA_TEXT TO IT_TEXT.
* WA_TEXT-LINE = 'THIS IS THE INNER CIRCLE CALL AND TRY TO LEARN HOW WE CAN
SEND THE EMAIL WITH ATTACHMENT'.
* APPEND WA_TEXT TO IT_TEXT.
* CLEAR WA_TEXT.
* WA_TEXT-LINE = 'BEST REGARDS, PANKAJ KUMAR'.
* APPEND WA_TEXT TO IT_TEXT.
* CLEAR WA_TEXT.
"MESSAGE BODY
WA_TEXT-LINE = '<HTML><BODY>'.
APPEND WA_TEXT TO IT_TEXT.
WA_TEXT-LINE = 'DEAR RECEPIENT,'.
APPEND WA_TEXT TO IT_TEXT.
WA_TEXT-LINE = '<BR></BR>'.
APPEND WA_TEXT TO IT_TEXT.
WA_TEXT-LINE = 'PLEASE FIND THE FLIGHT DETAILS AS REQUESTED IN THE
ATTACHMENT.'.
APPEND WA_TEXT TO IT_TEXT.
WA_TEXT-LINE = '<BR></BR>'.
APPEND WA_TEXT TO IT_TEXT.
WA_TEXT-LINE = 'THANKS & REGARDS , SENDER'.
APPEND WA_TEXT TO IT_TEXT.
WA_TEXT-LINE = '</BODY></HTML>'.
APPEND WA_TEXT TO IT_TEXT.
CLEAR WA_TEXT.
*************************END OF
BODY*******************************************************
LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
EXPORTING "CREATE DOCUMENT
I_TYPE = 'HTM' "TYPE OF DOCUMENT HTM, TXT ETC
I_TEXT = IT_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 100 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 'INNERCIRCLE_EXCEL' 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 DATA(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.
"SCHEDUEL WHEN YOU WANT SEND THE EMAIL
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.