DATA: receivers TYPE TABLE OF somlreci1 WITH HEADER LINE,
contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,
subject TYPE so_obj_des,
dl_receiver TYPE so_recname.
Subject
subject = ‘Mail Header’.
Receivers
“If receivers are distribution list from SAP (SO15)
dl_receiver = ‘Distrubiton_List_Name’.
receivers-receiver = dl_receiver.
receivers-rec_type = ‘C’.
APPEND receivers.
“Else if receiver is a single Mail address
dl_receiver = ‘singlemailaddress@blabla.com’.
receivers-receiver = dl_receiver.
receivers-rec_type = ‘U’.
APPEND receivers.
Content
contents-line = ‘This is first line of e-mail’.
APPEND contents.
contents-line = ‘This is second line of e-mail’.
APPEND contents.
contents-line = ‘This is third line of e-mail’.
APPEND contents.
contents-line = ”.
APPEND contents.
contents-line = ‘This mail is send by SAP automatically’.
APPEND contents.
Call Function
CALL FUNCTION ‘Z_SEND_MAIL_REPORT’
EXPORTING
subject = subject
attach_req = ”
TABLES
receivers = receivers
contents = contents
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
Function
FUNCTION z_send_mail_report.
*”———————————————————————-
*”*”Local Interface:
*” IMPORTING
*” VALUE(PROG) TYPE REPID OPTIONAL
*” VALUE(VARIANT) TYPE RALDB_VARI OPTIONAL
*” VALUE(SUBJECT) TYPE SO_OBJ_DES DEFAULT ‘No subject’
*” VALUE(ATTACH_NAME) TYPE SO_TEXT255 OPTIONAL
*” VALUE(ATTACH_REQ) TYPE CHAR1 DEFAULT ‘X’
*” TABLES
*” PARAMS STRUCTURE RSPARAMS OPTIONAL
*” USERLIST STRUCTURE SLS_UNAMES OPTIONAL
*” RECEIVERS STRUCTURE SOMLRECI1 OPTIONAL
*” CONTENTS STRUCTURE SOLISTI1 OPTIONAL
*” EXCEPTIONS
*” TOO_MANY_RECEIVERS
*” DOCUMENT_NOT_SENT
*” DOCUMENT_TYPE_NOT_EXIST
*” OPERATION_NO_AUTHORIZATION
*” PARAMETER_ERROR
*” X_ERROR
*” ENQUEUE_ERROR
*”———————————————————————-
* INCLUDES *
*———————————————————————-*
INCLUDE rssocons.
*———————————————————————-*
* CONSTANTS *
*———————————————————————-*
CONSTANTS: htm_ext(4) TYPE c VALUE ‘.htm’,
htm_type(3) TYPE c VALUE ‘HTM’,
internet(1) TYPE c VALUE ‘U’,
dist_list(1) TYPE c VALUE ‘C’.
*———————————————————————-*
* VARIABLES *
*———————————————————————-*
DATA: length TYPE i.
DATA: doc_chng LIKE sodocchgi1.
DATA: tab_lines LIKE sy-tabix.
DATA: raw_lines LIKE sy-tabix.
*———————————————————————-*
* INTERNAL TABLES *
*———————————————————————-*
DATA: BEGIN OF html_tab OCCURS 0.
INCLUDE STRUCTURE w3html.
DATA: END OF html_tab.
DATA: itab LIKE abaplist OCCURS 0 WITH HEADER LINE.
DATA: objpack LIKE sopcklsti1 OCCURS 2 WITH HEADER LINE.
DATA: objhead LIKE solisti1 OCCURS 1 WITH HEADER LINE.
DATA: objbin LIKE solisti1 OCCURS 10 WITH HEADER LINE.
DATA: objtxt LIKE solisti1 OCCURS 10 WITH HEADER LINE.
*———————————————————————-*
* FUNCTION CODE *
*———————————————————————-*
* Submit prog and create .htm attachment
IF prog IS NOT INITIAL.
IF variant IS NOT INITIAL.
SUBMIT (prog) AND RETURN
EXPORTING LIST TO MEMORY
USING SELECTION-SET variant.
ELSEIF params[] IS NOT INITIAL.
SUBMIT (prog) AND RETURN
EXPORTING LIST TO MEMORY
WITH SELECTION-TABLE params.
ENDIF.
CALL FUNCTION ‘LIST_FROM_MEMORY’
TABLES
listobject = itab
EXCEPTIONS
not_found = 1.
IF sy-subrc NE 0.
LEAVE PROGRAM.
ENDIF.
CALL FUNCTION ‘WWW_HTML_FROM_LISTOBJECT’
EXPORTING
template_name = ‘WEBREPORTING_REPORT’
TABLES
html = html_tab
listobject = itab.
ENDIF.
* Mail subject
CONCATENATE text-010 subject text-011
INTO doc_chng-obj_descr
SEPARATED BY space.
* Mail content
MOVE contents[] TO objtxt[].
DESCRIBE TABLE objtxt LINES raw_lines.
DESCRIBE TABLE objtxt LINES tab_lines.
READ TABLE objtxt INDEX tab_lines.
doc_chng-doc_size = ( tab_lines – 1 ) * 255 + STRLEN( objtxt ).
CLEAR objpack-transf_bin.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = tab_lines.
objpack-doc_type = ‘RAW’.
APPEND objpack.
* Attachment header
IF attach_req IS NOT INITIAL.
DESCRIBE TABLE html_tab LINES tab_lines.
IF attach_name IS INITIAL.
attach_name = subject.
ENDIF.
CONCATENATE attach_name htm_ext
INTO objhead.
APPEND objhead.
* objpack-transf_bin = ‘X’.
objpack-head_start = 1.
objpack-head_num = 1.
objpack-body_start = raw_lines.
objpack-body_num = tab_lines.
objpack-doc_type = htm_type.
objpack-obj_name = subject.
CONCATENATE text-019 subject
INTO objpack-obj_descr
SEPARATED BY space.
objpack-doc_size = tab_lines * 255.
APPEND objpack.
ENDIF.
* Email address of users in userlist[]
DATA: iaddsmtp TYPE bapiadsmtp OCCURS 0 WITH HEADER LINE.
DATA: ireturn TYPE bapiret2 OCCURS 0 WITH HEADER LINE.
LOOP AT userlist.
CLEAR : iaddsmtp.
REFRESH iaddsmtp.
CALL FUNCTION ‘BAPI_USER_GET_DETAIL’
EXPORTING
username = userlist-uname
TABLES
return = ireturn
addsmtp = iaddsmtp.
LOOP AT iaddsmtp WHERE std_no = ‘X’.
MOVE iaddsmtp-e_mail TO receivers-receiver.
MOVE internet TO receivers-rec_type.
APPEND receivers.
ENDLOOP.
ENDLOOP.
* Send mail
CHECK receivers IS NOT INITIAL.
CALL FUNCTION ‘SO_NEW_DOCUMENT_ATT_SEND_API1’
EXPORTING
document_data = doc_chng
put_in_outbox = ‘X’
commit_work = ‘X’
TABLES
packing_list = objpack
object_header = objhead
contents_bin = html_tab
contents_txt = objtxt
receivers = receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
CASE sy-subrc.
WHEN object_not_sent.
RAISE document_not_sent.
WHEN too_much_receivers.
RAISE too_many_receivers.
WHEN object_type_not_exist.
RAISE document_type_not_exist.
WHEN operation_no_authorization.
RAISE operation_no_authorization.
WHEN parameter_error.
RAISE parameter_error.
WHEN x_error.
RAISE x_error.
WHEN enqueue_error.
RAISE enqueue_error.
ENDCASE.
ENDFUNCTION.