edwinguedez
11/19/2014 - 6:02 PM

Send email to a list of recipient. With many attachments.

Send email to a list of recipient. With many attachments.

FUNCTION ytest0001_03.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(IV_SUBJECT) TYPE  SO_OBJ_DES OPTIONAL
*"     REFERENCE(IT_BODY_TEXT) TYPE  BCSY_TEXT OPTIONAL
*"     REFERENCE(IT_PDF) TYPE  YTESTT0004 OPTIONAL
*"     REFERENCE(IT_RECIPIENTS) TYPE  BCSY_SMTPA OPTIONAL
*"  EXPORTING
*"     REFERENCE(OV_SENT_TO_ALL) TYPE  OS_BOOLEAN
*"----------------------------------------------------------------------

  " *--------------------------------------------------------------------*
  " Local Data
  DATA lv_recipient TYPE ad_smtpadr.
  DATA lv_sent_to_all TYPE os_boolean.
  " Structures
  DATA ls_pdf TYPE ytests0004.
  " Tables
  DATA lt_message_body TYPE bcsy_text.
  " Objects
  DATA lo_send_request TYPE REF TO cl_bcs.
  DATA lo_document     TYPE REF TO cl_document_bcs.
  DATA lo_sender       TYPE REF TO if_sender_bcs.
  DATA lo_recipient    TYPE REF TO if_recipient_bcs.
  DATA lx_document_bcs TYPE REF TO cx_document_bcs.

  " *--------------------------------------------------------------------*
  " Create send request
  lo_send_request = cl_bcs=>create_persistent( ).

  " *--------------------------------------------------------------------*
  " Create message body and subject
  " Putt your text into the document
  lt_message_body[] = it_body_text[].
  lo_document = cl_document_bcs=>create_document(
                   i_type    = 'RAW'
                   i_text    = lt_message_body
                   i_subject = iv_subject
                ).

  " *--------------------------------------------------------------------*
  " Add attachments
  LOOP AT it_pdf INTO ls_pdf.
    TRY.
        lo_document->add_attachment(
          EXPORTING i_attachment_type    = ls_pdf-file_type
                    i_attachment_subject = ls_pdf-file_name
                    i_attachment_size    = ls_pdf-file_size
                    i_att_content_text   = ls_pdf-file_text
        ).
      CATCH cx_document_bcs INTO lx_document_bcs.
    ENDTRY.
  ENDLOOP.

  " *--------------------------------------------------------------------*
  " Pass the document to send request
  lo_send_request->set_document( lo_document ).

  " *--------------------------------------------------------------------*
  " Create sender
  lo_sender = cl_sapuser_bcs=>create( sy-uname ).
  " Set sender
  lo_send_request->set_sender( lo_sender ).

  " *--------------------------------------------------------------------*
  " Create recipients
  LOOP AT it_recipients INTO lv_recipient.
    lo_recipient = cl_cam_address_bcs=>create_internet_address( lv_recipient ).
    " Set recipient
    lo_send_request->add_recipient( lo_recipient ).
  ENDLOOP. " IT_RECIPIENTS

  " *--------------------------------------------------------------------*
  " Send email
  lo_send_request->send(
    EXPORTING i_with_error_screen = 'X'
    RECEIVING result = lv_sent_to_all
  ).

  " *--------------------------------------------------------------------*
  " Result
  ov_sent_to_all = lv_sent_to_all.
  COMMIT WORK.

ENDFUNCTION.


* Structure: YTESTS0004
*   FILE_NAME TYPE	SO_OBJ_DES
*   FILE_TYPE	TYPE SO_OBJ_TP
*   FILE_SIZE	TYPE SO_OBJ_LEN
*   FILE_TEXT	TYPE SOLI_TAB

* Type Table YTESTT0004
*   Line Type: YTESTS0004