Custom Functional Module to send email, either with plain body or HTML body as input
FUNCTION ZEMAIL.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(IP_SENDER) TYPE ADR6-SMTP_ADDR OPTIONAL
*" VALUE(IP_SUBJECT) TYPE STRING OPTIONAL
*" EXPORTING
*" VALUE(EP_MSG) TYPE CHAR200
*" TABLES
*" IT_TO STRUCTURE ZEMAIL_ID OPTIONAL
*" IT_CC STRUCTURE ZEMAIL_ID OPTIONAL
*" IT_BCC STRUCTURE ZEMAIL_ID OPTIONAL
*" IT_BODY STRUCTURE SOLISTI1 OPTIONAL
*" IT_HTML_BODY STRUCTURE SOLISTI1 OPTIONAL
*"----------------------------------------------------------------------
DATA : IT_CONTENTS TYPE STANDARD TABLE OF SOLISTI1,
WA_CONTENTS TYPE SOLISTI1,
W_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS.
DATA: "li_otf type table of itcoo,
"li_pdf_tab type table of tline,
"li_content_txt type soli_tab,
* li_content_hex type solix_tab,
LI_OBJHEAD TYPE SOLI_TAB,
GI_MAIN_TEXT TYPE STANDARD TABLE OF SOLISTI1, "type bcsy_text.
WA_MAIN_TEXT TYPE SOLISTI1.
DATA : "IT_CONTENTS TYPE STANDARD TABLE OF solisti1,
"wa_contents TYPE solisti1,
TEXT TYPE CHAR100,
TEXT3 TYPE CHAR100,
TEXT1 TYPE STRING,
TEXT2 TYPE STRING,
LV_AMT1 TYPE CHAR15,
LV_AMT2 TYPE CHAR15,
LV_AMT3 TYPE CHAR15,
LV_AMT4 TYPE CHAR15,
LV_DMBTR TYPE DMBTR,
LV_CNT TYPE I.
*/.. Work Area Declarations
DATA: LW_CONTROL_PARAMETERS TYPE SSFCTRLOP,
LW_OUTPUT_OPTIONS TYPE SSFCOMPOP,
LW_SSFCRESCL TYPE SSFCRESCL,
LW_CONTENT TYPE SOLI,
LW_OTF TYPE ITCOO.
*/..Variables Decalrations
DATA: GV_FNAME TYPE RS38L_FNAM, "Fucntion Module
GV_SUBJECT TYPE SO_OBJ_DES,
GV_TITLE TYPE SO_OBJ_DES,
LV_BIN_FILESIZE TYPE I,
LV_TRANSFER_BIN TYPE SX_BOOLEAN,
LV_LEN TYPE SO_OBJ_LEN,
LV_EMAIL TYPE AD_SMTPADR,
LV_SENT_TO_ALL TYPE OS_BOOLEAN,
LV_ATT_NAME TYPE CHAR50,
LV_SUB TYPE STRING. "so_obj_des.
*/.. Class Declarations
DATA: GO_SEND_REQUEST TYPE REF TO CL_BCS,
GO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS,
LO_BCS_EXCEPTION TYPE REF TO CX_BCS.
DATA: SEND_REQUEST TYPE REF TO CL_BCS.
*DATA: TEXT TYPE BCSY_TEXT.
DATA: DOCUMENT TYPE REF TO CL_DOCUMENT_BCS.
DATA: SENDER TYPE REF TO CL_SAPUSER_BCS.
DATA: SENDER1 TYPE REF TO CL_CAM_ADDRESS_BCS.
DATA: RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.
DATA: BCS_EXCEPTION TYPE REF TO CX_BCS.
DATA: SENT_TO_ALL TYPE OS_BOOLEAN.
DATA: TL_CONTENTS TYPE STANDARD TABLE OF SOLI.
CONSTANTS:
*-- Constants used in the body of the Email (HTML)
C_HTM TYPE CHAR3 VALUE 'HTM',
C_SPACE(6) TYPE C VALUE ' ',
C_NEW_LINE TYPE CHAR255 VALUE '<br>'.
DATA : GV_FNAME1 TYPE RS38L_FNAM.
*/.. Internal Table Declaration
DATA: LI_OTF TYPE TABLE OF ITCOO,
LI_OTF1 TYPE TABLE OF ITCOO,
LI_PDF_TAB TYPE TABLE OF TLINE,
LI_CONTENT_TXT TYPE SOLI_TAB,
LI_CONTENT_HEX TYPE SOLIX_TAB.
DATA: BEGIN OF wa,
data(255),
END OF wa.
DATA: itab LIKE STANDARD TABLE OF wa WITH HEADER LINE.
REFRESH : LI_CONTENT_HEX,
LI_OBJHEAD.
CLEAR : LV_TRANSFER_BIN, LV_TRANSFER_BIN,
LV_LEN, IT_CONTENTS[].
IF IP_SENDER IS INITIAL OR IT_TO[] IS INITIAL.
EP_MSG = 'Eneter sender and To Email ID'.
ELSEIF IP_SUBJECT IS INITIAL.
EP_MSG = 'Enter Subject'.
ELSE.
if it_html_body[] is INITIAL.
"email body
WA_CONTENTS-LINE = '<HTML> <BODY>'.
APPEND WA_CONTENTS TO IT_CONTENTS.
CLEAR : WA_CONTENTS.
* CONCATENATE '<p style="font-family:Calibri;font-size:15;">' 'Dear' C_SPACE GS_LIST-NAME1 ',' INTO WA_CONTENTS-LINE.
WA_CONTENTS-LINE = '<p style="font-family:Calibri;font-size:15;">'.
APPEND WA_CONTENTS TO IT_CONTENTS.
CLEAR : WA_CONTENTS.
LOOP AT IT_BODY.
"new line
WA_CONTENTS-LINE = '<br>'.
APPEND WA_CONTENTS TO IT_CONTENTS.
CLEAR : WA_CONTENTS.
if it_body-line is NOT INITIAL.
* REPLACE ALL OCCURRENCES OF space in it_body-line with C_SPACE.
* REPLACE FIRST OCCURRENCE OF space in it_body-line with C_SPACE.
clear : ITAB[], lv_cnt.
SPLIT it_body-line AT space INTO TABLE itab.
loop at itab.
lv_cnt = lv_cnt + 1.
if lv_cnt = 1 and itab-data is NOT INITIAL.
WA_CONTENTS-LINE = itab-data.
else.
concatenate WA_CONTENTS-LINE itab-data into WA_CONTENTS-LINE separated by C_SPACE.
endif.
endloop.
APPEND WA_CONTENTS TO IT_CONTENTS.
CLEAR : WA_CONTENTS.
endif.
clear : IT_BODY.
ENDLOOP.
WA_CONTENTS-LINE = '<br>'.
APPEND WA_CONTENTS TO IT_CONTENTS.
CLEAR : WA_CONTENTS.
WA_CONTENTS-LINE = '</BODY> </HTML>'.
APPEND WA_CONTENTS TO IT_CONTENTS.
CLEAR : WA_CONTENTS.
else.
it_contents[] = IT_HTML_BODY[].
endif.
TRY.
* -------- create persistent send request ------------------------
GO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
* -------- create and set document -------------------------------
* create document from internal table with text
GO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'HTM'
I_TEXT = IT_CONTENTS
* i_length = '12'
I_SUBJECT = '' ). "'
CALL METHOD GO_SEND_REQUEST->SET_MESSAGE_SUBJECT
EXPORTING
IP_SUBJECT = IP_SUBJECT.
IF NOT LI_CONTENT_HEX IS INITIAL.
GO_DOCUMENT->ADD_ATTACHMENT(
I_ATTACHMENT_TYPE = 'PDF'
I_ATTACHMENT_SUBJECT = 'ATTACHMENT' "LV_ATT_NAME "gv_title "attachment subject
I_ATTACHMENT_SIZE = LV_LEN
I_ATT_CONTENT_HEX = LI_CONTENT_HEX ).
ENDIF.
CALL METHOD GO_SEND_REQUEST->SET_DOCUMENT( GO_DOCUMENT ).
*** Send mail using Email_ID
SENDER1 = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( IP_SENDER ).
CALL METHOD GO_SEND_REQUEST->SET_SENDER
EXPORTING
I_SENDER = SENDER1.
"TO EMAIL IDS
LOOP AT IT_TO WHERE email is NOT INITIAL.
LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( IT_TO-EMAIL ).
* add recipient with its respective attributes to send request
CALL METHOD GO_SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = LO_RECIPIENT
I_EXPRESS = 'X'.
ENDLOOP.
"cc
LOOP AT IT_CC WHERE EMAIL IS NOT INITIAL.
LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( IT_CC-EMAIL ).
* add recipient with its respective attributes to send request
CALL METHOD GO_SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = LO_RECIPIENT
I_COPY = 'X'.
ENDLOOP.
"Bcc
LOOP AT IT_BCC.
LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( IT_BCC-EMAIL ).
* add recipient with its respective attributes to send request
CALL METHOD GO_SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = LO_RECIPIENT
I_BLIND_COPY = 'X'.
ENDLOOP.
* set outbox flag
* try.
* if outbox = 'X'.
CALL METHOD GO_SEND_REQUEST->SEND_REQUEST->SET_LINK_TO_OUTBOX( 'X' ).
* endif.
* catch cx_bcs.
* endtry.
* ---------- send document ---------------------------------------
* TRY.
CALL METHOD GO_SEND_REQUEST->SET_SEND_IMMEDIATELY
EXPORTING
I_SEND_IMMEDIATELY = 'X'.
* CATCH cx_send_req_bcs .
* ENDTRY.
CALL METHOD GO_SEND_REQUEST->SEND(
EXPORTING
I_WITH_ERROR_SCREEN = 'X'
RECEIVING
RESULT = LV_SENT_TO_ALL ).
IF LV_SENT_TO_ALL = 'X'.
EP_MSG = 'Email send successfully'.
ELSEIF LV_SENT_TO_ALL IS INITIAL.
EP_MSG = 'Email not send'.
ENDIF.
COMMIT WORK.
CATCH CX_BCS INTO LO_BCS_EXCEPTION.
ENDTRY.
endif.
ENDFUNCTION.
0 Comments