How to Send E-Mail from SAP ABAP code?

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.

Yorum bırakın

WordPress.com ile böyle bir site tasarlayın
Başlayın