*&---------------------------------------------------------------------* *& REPORT ZATTACH_EMAIL * *&---------------------------------------------------------------------* *& Description: Program to upload attachments and send it to the * *& required Email ID * *&---------------------------------------------------------------------* *& Modification Log: * *& * *& Date Name User ID Transport # * *& Description of Modifications * *&---------------------------------------------------------------------* *& Amit Bisht * *& -Initial version * *&---------------------------------------------------------------------* REPORT zattach_email MESSAGE-ID zz LINE-SIZE 132 NO STANDARD PAGE HEADING. *----------------------------------------------------------------------* * TABLES * *----------------------------------------------------------------------* TABLES: somlreci1. *----------------------------------------------------------------------* * GLOBAL DATA DECLARATION * *----------------------------------------------------------------------* DATA: t_mailhex TYPE STANDARD TABLE OF solix, t_contents TYPE STANDARD TABLE OF solisti1, wa_contents TYPE solisti1, w_file TYPE dsvasdocid, w_extn(5) TYPE c, w_mail_subj TYPE string, w_document TYPE REF TO cl_document_bcs. *----------------------------------------------------------------------* * CONSTANTS DECLARATION * *----------------------------------------------------------------------* CONSTANTS: *-- Constants used in the body of the Email (HTML) c_htm TYPE char3 VALUE 'HTM', c_style_start TYPE char255 VALUE '', c_new_line TYPE char255 VALUE '
', c_link_start TYPE char128 VALUE '', c_link_text TYPE char32 VALUE 'Link for learning HTML', c_link_end TYPE char4 VALUE '', c_space(6) TYPE c VALUE ' ', *-- Used as an Example for displaying space between texts in Email body c_emp1(6) TYPE c VALUE 101001, c_emp2(6) TYPE c VALUE 101002, c_emp3(6) TYPE c VALUE 101003. *----------------------------------------------------------------------* * SELECTION SCREEN * *----------------------------------------------------------------------* *-- Input Details - Block SELECTION-SCREEN BEGIN OF BLOCK file WITH FRAME TITLE text-t01. PARAMETERS: p_attach TYPE rlgrap-filename. SELECTION-SCREEN END OF BLOCK file. *-- Email ID of the Recipient SELECTION-SCREEN BEGIN OF BLOCK mail WITH FRAME TITLE text-t02. SELECT-OPTIONS: s_mailid FOR somlreci1-receiver NO INTERVALS. SELECTION-SCREEN END OF BLOCK mail. *----------------------------------------------------------------------* * AT SELECTION SCREEN * *----------------------------------------------------------------------* *-- Providing F4 Help for the input file AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_attach. PERFORM file_path USING 'P_ATTACH'. *&---------------------------------------------------------------------* * START-OF-SELECTION * *&---------------------------------------------------------------------* START-OF-SELECTION. IF p_attach IS INITIAL. MESSAGE i999(zz) WITH 'Please Enter at-least one file name'(001). EXIT. ENDIF. *-- Upload data from Presentation Server to SAP PERFORM upload_data. *----------------------------------------------------------------------* * END OF SELECTION * *----------------------------------------------------------------------* END-OF-SELECTION. *-- Frame the Body of the Email PERFORM frame_mail_body. *-- Send Mail PERFORM send_mail. *&--------------------------------------------------------------------* *& Form Name : File_path *&--------------------------------------------------------------------* *& Description : F4 help for File Name / Path *&--------------------------------------------------------------------* *& Parameters : FP_FILE --> File Name *&--------------------------------------------------------------------* FORM file_path USING fp_file TYPE any. *-- Selects the directory list CALL FUNCTION 'F4_DXFILENAME_4_DYNP' EXPORTING dynpfield_filename = fp_file dyname = sy-cprog dynumb = sy-dynnr filetype = 'P' location = 'P' server = space. ENDFORM. " file_path *&---------------------------------------------------------------------* *& Form Name : Upload_Data * *&---------------------------------------------------------------------* *& Description : Upload data into SAP from Presentation Server * *&---------------------------------------------------------------------* *& Parameters : None * *&---------------------------------------------------------------------* FORM upload_data. *-- Local data declaration DATA: l_file TYPE string, l_index TYPE sy-tabix, *-- For holding the split file name tl_splitfile TYPE STANDARD TABLE OF rlgrap-filename, wl_splitfile TYPE rlgrap-filename. l_file = p_attach. **-- Function module to split the Filename and Extension from the Path CALL FUNCTION 'CH_SPLIT_FILENAME' EXPORTING complete_filename = l_file IMPORTING extension = w_extn name = w_file. *-- Split the filename at '.' SPLIT l_file AT '.' INTO TABLE tl_splitfile. DESCRIBE TABLE tl_splitfile LINES l_index. *-- In case the filename contains more than one dot IF l_index GT 2. CLEAR: wl_splitfile, w_extn. *-- Get the Extension of the file READ TABLE tl_splitfile INTO wl_splitfile INDEX l_index. w_extn = wl_splitfile. DELETE tl_splitfile INDEX l_index. DELETE tl_splitfile INDEX 1. CLEAR wl_splitfile. *-- Get the Actual filename LOOP AT tl_splitfile INTO wl_splitfile. CONCATENATE '.' wl_splitfile INTO wl_splitfile. ENDLOOP. CONCATENATE w_file wl_splitfile INTO w_file. ENDIF. CONDENSE w_extn. *-- Upload File CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = l_file filetype = 'BIN' TABLES data_tab = t_mailhex EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 OTHERS = 17. IF sy-subrc IS NOT INITIAL. MESSAGE i999(zz) WITH 'Error in reading file for upload'(002) w_file. ENDIF. ENDFORM. " upload_data *&---------------------------------------------------------------------* *& Form Name : frame_mail_body * *&---------------------------------------------------------------------* *& Description : To frame the body part of the Email to be sent * *&---------------------------------------------------------------------* *& Parameters : None * *&---------------------------------------------------------------------* FORM frame_mail_body. *-- Local data declaration to hold the textpool DATA: tl_textpool TYPE STANDARD TABLE OF textpool, wl_textpool TYPE textpool. *-- Read the Entire Textpool into an Internal table READ TEXTPOOL sy-repid INTO tl_textpool LANGUAGE sy-langu. IF sy-subrc IS INITIAL. SORT tl_textpool BY id key. ENDIF. *-- Font start CLEAR wa_contents. wa_contents-line = c_style_start. APPEND wa_contents TO t_contents. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- Program name : Email Attachment CLEAR: wl_textpool, wa_contents. READ TABLE tl_textpool INTO wl_textpool WITH KEY id = 'I' key = 'T03' BINARY SEARCH. IF sy-subrc EQ 0. wa_contents-line = wl_textpool-entry. *-- "#" Present in the Text Element will be replaced by the below value REPLACE: '#' WITH 'Email Attachment' INTO wa_contents-line. APPEND wa_contents TO t_contents. ENDIF. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- You can also change or add the text here... CLEAR: wl_textpool, wa_contents. READ TABLE tl_textpool INTO wl_textpool WITH KEY id = 'I' key = 'T04' BINARY SEARCH. IF sy-subrc EQ 0. wa_contents-line = wl_textpool-entry. APPEND wa_contents TO t_contents. ENDIF. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- For giving spaces between texts, you can use... CLEAR: wl_textpool, wa_contents. READ TABLE tl_textpool INTO wl_textpool WITH KEY id = 'I' key = 'T05' BINARY SEARCH. IF sy-subrc EQ 0. wa_contents-line = wl_textpool-entry. APPEND wa_contents TO t_contents. ENDIF. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- For Ex; Employee Numbers : CLEAR: wl_textpool, wa_contents. READ TABLE tl_textpool INTO wl_textpool WITH KEY id = 'I' key = 'T06' BINARY SEARCH. IF sy-subrc EQ 0. wa_contents-line = wl_textpool-entry. *-- How to give Spaces in between texts CONCATENATE wa_contents-line c_space c_emp1 c_space c_emp2 c_space c_emp3 INTO wa_contents-line. APPEND wa_contents TO t_contents. ENDIF. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- For more Information on HTML.. CLEAR: wl_textpool, wa_contents. READ TABLE tl_textpool INTO wl_textpool WITH KEY id = 'I' key = 'T07' BINARY SEARCH. IF sy-subrc EQ 0. wa_contents-line = wl_textpool-entry. APPEND wa_contents TO t_contents. ENDIF. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- New line CLEAR wa_contents. wa_contents-line = c_new_line. APPEND wa_contents TO t_contents. *-- Hyperlink CLEAR wa_contents. CONCATENATE c_link_start c_link_text c_link_end INTO wa_contents-line. APPEND wa_contents TO t_contents. *-- Subject of the Mail CONCATENATE text-t08 w_mail_subj INTO w_mail_subj. ENDFORM. " frame_mail_body *&---------------------------------------------------------------------* *& Form Name : Send_mail * *&---------------------------------------------------------------------* *& Description : To set the recipients and send the mail * *&---------------------------------------------------------------------* *& Parameters : None * *&---------------------------------------------------------------------* FORM send_mail. *-- Local data declaration for sending mail DATA: l_send_request TYPE REF TO cl_bcs, l_document TYPE REF TO cl_document_bcs, l_sender TYPE REF TO cl_sapuser_bcs, l_sub TYPE char50, l_recipient TYPE REF TO if_recipient_bcs, tl_contents TYPE STANDARD TABLE OF soli, l_doc_len TYPE so_obj_len, l_cnt TYPE sy-tabix, l_rcv_email TYPE adr6-smtp_addr, l_result TYPE sy-binpt, l_bcs_exception TYPE REF TO cx_bcs, l_subj TYPE string, wl_mailid LIKE LINE OF s_mailid. TRY. *-- Create persistent send request l_send_request = cl_bcs=>create_persistent( ). tl_contents[] = t_contents[]. *-- Get the length of the Document DESCRIBE TABLE tl_contents LINES l_cnt. READ TABLE tl_contents INTO wa_contents INDEX l_cnt. l_doc_len = ( l_cnt - 1 ) * 255 + STRLEN( wa_contents ). *-- Subject of the mail l_sub = w_mail_subj. *-- Create Document l_document = cl_document_bcs=>create_document( i_type = c_htm i_text = tl_contents i_length = l_doc_len i_subject = l_sub i_language = sy-langu i_importance = '1' ). *-- Subject of the mail MOVE w_mail_subj TO l_subj. w_document = l_document. TRY. *-- Set the Message Subject CALL METHOD l_send_request->set_message_subject EXPORTING ip_subject = l_subj. CATCH cx_sy_dyn_call_illegal_method. ENDTRY. *-- Add document to send request CALL METHOD l_send_request->set_document( l_document ). *-- Do send delivery info for successful mails CALL METHOD l_send_request->set_status_attributes EXPORTING i_requested_status = 'E' i_status_mail = 'A'. *-- Set sender l_sender = cl_sapuser_bcs=>create( sy-uname ). CALL METHOD l_send_request->set_sender EXPORTING i_sender = l_sender. *-- To frame the attachments for the mail PERFORM frame_attachments. *-- Add the recipients to the Send mail LOOP AT s_mailid INTO wl_mailid. l_rcv_email = wl_mailid-low. CHECK NOT l_rcv_email IS INITIAL. l_recipient = cl_cam_address_bcs=>create_internet_address( l_rcv_email ). CALL METHOD l_send_request->add_recipient EXPORTING i_recipient = l_recipient i_express = 'X'. ENDLOOP. *-- Send Email CALL METHOD l_send_request->send( EXPORTING i_with_error_screen = 'X' RECEIVING result = l_result ). IF l_result = 'X'. MESSAGE s999(zz) WITH 'Approval Mail Sent Successfully'(003). ENDIF. CATCH cx_bcs INTO l_bcs_exception. IF l_result NE 'X'. MESSAGE s999(zz) WITH 'Approval Mail Not Successful'(004). ENDIF. ENDTRY. COMMIT WORK. "Commit Work ENDFORM. " send_mail *&---------------------------------------------------------------------* *& Form Name : frame_attachments * *&---------------------------------------------------------------------* *& Description : To frame the attachments for the mail to be sent * *&---------------------------------------------------------------------* *& Parameters : None * *&---------------------------------------------------------------------* FORM frame_attachments. *-- Local Data declaration DATA: l_subject TYPE so_obj_des, l_att_type TYPE soodk-objtp. *-- Subject of the Attachment l_subject = w_file. *-- Format of the Attachment l_att_type = w_extn. IF t_mailhex[] IS NOT INITIAL. TRY. *-- Add Attachment to the Document CALL METHOD w_document->add_attachment EXPORTING i_attachment_type = l_att_type i_attachment_subject = l_subject i_att_content_hex = t_mailhex. CATCH cx_document_bcs. ENDTRY. ENDIF. ENDFORM. " frame_attachments