*----------------------------------------------------------------------* * Data and types for send_email *----------------------------------------------------------------------* * raw data for attachment TYPES: BEGIN OF t_data, lifnr TYPE elifn, name1 TYPE name1_gp, END OF t_data. DATA: i_data TYPE STANDARD TABLE OF t_data, v_data TYPE t_data. * attachment details and formatted data TYPES: BEGIN OF t_attach_file, file_name TYPE so_obj_des, file_ext TYPE so_obj_tp, attach TYPE soli_tab, END OF t_attach_file, ti_attach_file TYPE STANDARD TABLE OF t_attach_file. * receivers table TYPES: BEGIN OF t_email_address, address TYPE ad_smtpadr, END OF t_email_address, ti_email_address TYPE STANDARD TABLE OF t_email_address. *----------------------------------------------------------------------* * FORM send_email *----------------------------------------------------------------------* * [+] Sends an email with a message and attachment *----------------------------------------------------------------------* FORM send_email USING p_email TYPE ad_smtpadr. CONSTANTS: c_subject TYPE so_obj_des VALUE 'Email Subject', c_tab(1) TYPE x VALUE '09', c_linebreak(2) TYPE x VALUE '0D0A', c_filename(50) TYPE c VALUE 'file_attachment_01', c_txt(3) TYPE c VALUE 'txt'. DATA: li_message_body TYPE STANDARD TABLE OF soli, lv_message_body LIKE LINE OF li_message_body, li_attachment_data TYPE STANDARD TABLE OF soli, lv_attachment_data LIKE LINE OF li_attachment_data, lv_email_data TYPE t_attach_file, li_email_data TYPE ti_attach_file, li_email_address TYPE ti_email_address. * Build the email body message CLEAR: lv_message_body. MOVE 'This is line 1' TO lv_message_body. APPEND lv_message_body TO li_message_body. CLEAR: lv_message_body. CONCATENATE 'This Is' 'Line 2' INTO lv_message_body SEPARATED BY space. APPEND lv_message_body TO li_message_body. CLEAR: lv_message_body. MOVE 'This is line 3' TO lv_message_body. APPEND lv_message_body TO li_message_body. * setting up attachment name MOVE: c_filename TO lv_email_data-file_name, c_txt TO lv_email_data-file_ext. * Build the attachment (text file) * Column headings as first row CLEAR: lv_attachment_data. CONCATENATE 'Vendor' 'Name' INTO lv_attachment_data SEPARATED BY c_tab. APPEND lv_attachment_data TO li_attachment_data. * Extracting table data into remaining rows LOOP AT i_data INTO v_data. CLEAR: lv_attachment_data. CONCATENATE v_data-lifnr v_data-name1 INTO lv_attachment_data SEPARATED BY c_tab. * add the line break CONCATENATE c_linebreak lv_attachment_data INTO lv_attachment_data. APPEND lv_attachment_data TO li_attachment_data. ENDLOOP. MOVE li_attachment_data TO lv_email_data-attach. APPEND lv_email_data TO li_email_data. CLEAR: lv_email_data. * build email address table APPEND p_email TO li_email_address. * Send the email PERFORM send_mail_api USING li_message_body c_subject li_email_address li_email_data. ENDFORM. *----------------------------------------------------------------------* * FORM send_mail_api *----------------------------------------------------------------------* * [+] Generic email sending *----------------------------------------------------------------------* FORM send_mail_api USING p_message_body TYPE soli_tab p_message_subject TYPE sood1-objdes p_recipient_email TYPE ti_email_address p_attachment TYPE ti_attach_file. *** CONSTANTS *** CONSTANTS: c_rt_internet TYPE soos1-recesc VALUE 'U'. "internet mail *** DATA *** DATA: lv_tab_lines TYPE sy-tabix, lv_obj_descr TYPE sodocchgi1-obj_descr, lv_head_start TYPE sytabix, lv_body_start TYPE sytabix. *** STRUCTURES *** DATA: lv_objpack TYPE sopcklsti1, lv_objhead TYPE solisti1, lv_objbin TYPE solisti1, lv_objtxt TYPE solisti1, lv_reclist TYPE somlreci1, lv_recipients TYPE somlreci1, lv_doc_chng TYPE sodocchgi1, lv_attachment TYPE t_attach_file, lv_recipient_email TYPE t_email_address. *** INTERNAL TABLES *** DATA: li_objpack TYPE TABLE OF sopcklsti1, li_objhead TYPE TABLE OF solisti1, li_objbin TYPE TABLE OF solisti1, li_objtxt TYPE TABLE OF solisti1, li_objhex TYPE TABLE OF solix, li_reclist TYPE TABLE OF somlreci1. *** Build the message body MOVE p_message_body TO li_objtxt. DESCRIBE TABLE li_objtxt LINES lv_tab_lines. READ TABLE li_objtxt INTO lv_objtxt INDEX lv_tab_lines. lv_doc_chng-doc_size = ( lv_tab_lines - 1 ) * 255 + STRLEN( lv_objtxt ). MOVE p_message_subject TO lv_doc_chng-obj_descr. CONDENSE lv_doc_chng-obj_descr. * creation of the message CLEAR lv_objpack-transf_bin. lv_objpack-head_start = 1. lv_objpack-head_num = 0. lv_objpack-body_start = 1. lv_objpack-doc_type = 'RAW'. DESCRIBE TABLE li_objtxt LINES lv_objpack-body_num. APPEND lv_objpack TO li_objpack. CLEAR lv_objpack. *** Build the attachments LOOP AT p_attachment INTO lv_attachment. DESCRIBE TABLE lv_attachment-attach LINES lv_tab_lines. DESCRIBE TABLE li_objhex LINES lv_body_start. DESCRIBE TABLE li_objhead LINES lv_head_start. ADD 1 TO lv_head_start. ADD 1 TO lv_body_start. lv_objpack-transf_bin = 'X'. lv_objpack-head_start = lv_head_start. lv_objpack-head_num = 1. lv_objpack-body_start = lv_body_start. lv_objpack-body_num = lv_tab_lines. lv_objpack-doc_type = lv_attachment-file_ext. lv_objpack-obj_name = lv_attachment-file_ext. CONCATENATE lv_attachment-file_name '.' lv_attachment-file_ext INTO lv_obj_descr. lv_objpack-obj_descr = lv_obj_descr. lv_objpack-doc_size = lv_tab_lines * 255. APPEND lv_objpack TO li_objpack. CLEAR lv_objpack. * creation of the document attachment APPEND LINES OF lv_attachment-attach TO li_objhex. * build file information into header MOVE lv_obj_descr TO lv_objhead. APPEND lv_objhead TO li_objhead. CLEAR: lv_objhead. CLEAR: lv_tab_lines. ENDLOOP. *** Build recipients IF p_recipient_email IS INITIAL. EXIT. ENDIF. * build recipients table LOOP AT p_recipient_email INTO lv_recipient_email. CLEAR lv_reclist. lv_reclist-rec_type = c_rt_internet. lv_reclist-receiver = lv_recipient_email-address. APPEND lv_reclist TO li_reclist . ENDLOOP. *** Send the email CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1' EXPORTING document_data = lv_doc_chng put_in_outbox = 'X' TABLES packing_list = li_objpack object_header = li_objhead contents_bin = li_objbin contents_txt = li_objtxt contents_hex = li_objhex receivers = li_reclist EXCEPTIONS OTHERS = 99. ENDFORM.