cancel
Showing results for 
Search instead for 
Did you mean: 

Sending mail with/without Attachment of files using CL_BCS class

Former Member
0 Kudos

Can any one solve the above problem

Moderator message: Moved to Webdynpro ABAP forum.

Message was edited by: Kesavadas Thekkillath

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi Padma,

You can not achieve the requirement by only using CL_BCS class. You have to take help of another class CL_DOCUMENT_BCS.

Use CREATE_DOCUMENT method to create the office document and then

Use ADD_ATTACHMENT method to create the attachment.

Former Member
0 Kudos

method ONACTIONSENDMAIL .
*  get message manager
   data: flag type c.
   clear flag.
   DATA LO_API_CONTROLLER     TYPE REF TO IF_WD_CONTROLLER.
   DATA LO_MESSAGE_MANAGER    TYPE REF TO IF_WD_MESSAGE_MANAGER.

   LO_API_CONTROLLER ?= WD_THIS->WD_GET_API( ).

   CALL METHOD LO_API_CONTROLLER->GET_MESSAGE_MANAGER
     RECEIVING
       MESSAGE_MANAGER = LO_MESSAGE_MANAGER.

   DATA LO_ND_MAIL TYPE REF TO IF_WD_CONTEXT_NODE.
   DATA LO_EL_MAIL TYPE REF TO IF_WD_CONTEXT_ELEMENT.
   DATA LS_MAIL TYPE WD_THIS->ELEMENT_MAIL.
   DATA LV_MAIL LIKE LS_MAIL-MAIL.
*   navigate from <CONTEXT> to <MAIL> via lead selection
   LO_ND_MAIL = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_MAIL ).

*   get element via lead selection
   LO_EL_MAIL = LO_ND_MAIL->GET_ELEMENT(  ).

*   get single attribute
   LO_EL_MAIL->GET_ATTRIBUTE(
     EXPORTING
       NAME =  `MAIL`
     IMPORTING
       VALUE = LV_MAIL ).

   data ls_split    type string.
   data lt_split    like table of ls_split.
   split LV_MAIL at ',' into table lt_split.

   data ADDRESS_email type SX_ADDRess.
*  data  ADDRESS_NORMAL type SX_ADDRess.
   ADDRESS_email-TYPE = 'INT'.

   ADDRESS_email-ADDRESS = LV_MAIL.

   loop at lt_split into ls_split.

     ADDRESS_email-ADDRESS = ls_split.

     CALL FUNCTION 'SX_INTERNET_ADDRESS_TO_NORMAL'
       EXPORTING
         ADDRESS_UNSTRUCT                     = ADDRESS_email
        COMPLETE_ADDRESS                     = 'X'
*     IMPORTING
*       ADDRESS_NORMAL                       =  ADDRESS_NORMAL
*       LOCAL                                =
*       DOMAIN                               =
*       COMMENT                              =
*       ADDR_NORMAL_NO_UPPER                 =
*       ADDR_NORMAL_NO_UP_WITH_COMMENT       =
      EXCEPTIONS
        ERROR_ADDRESS_TYPE                   = 1
        ERROR_ADDRESS                        = 2
        ERROR_GROUP_ADDRESS                  = 3
        OTHERS                               = 4
               .
     IF SY-SUBRC <> 0.
       flag = 'X'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

* report message
       CALL METHOD LO_MESSAGE_MANAGER->REPORT_T100_MESSAGE
         EXPORTING
           MSGID = 'ZMESSAGE'
           MSGNO = '016'
           MSGTY = 'E'.
     endif.

   endloop.

*----------------------------------------------------------------------------*

   IF flag <> 'X'.

     data email like ls_mail-mail.
     data subject  like ls_mail-subject.
     data body  like ls_mail-body.


     lo_nd_mail = wd_context->get_child_node( name = wd_this->wdctx_mail ).

     lo_el_mail = lo_nd_mail->get_element(  ).

     lo_el_mail->get_static_attributes(
       IMPORTING
         static_attributes = ls_mail ).


     lo_el_mail->get_attribute(
     EXPORTING
       name = 'MAIL'
       IMPORTING
         value = email ).


     lo_el_mail->get_attribute(
     EXPORTING
       name = 'SUBJECT'
       IMPORTING
         value = subject ).

     LO_EL_MAIL->GET_ATTRIBUTE(
       EXPORTING
         NAME =  `BODY`
       IMPORTING
         VALUE = BODY ).

*--------------------------------------------
     data sub(50) type c.
     sub = subject.
*-----------------------------------------------------------------

     DATA lo_nd_it TYPE REF TO if_wd_context_node.
     DATA lo_el_it TYPE REF TO if_wd_context_element.
     DATA ls_it TYPE wd_this->element_it.
     data lt_it like table of ls_it.

     lo_nd_it = wd_context->get_child_node( name = wd_this->wdctx_it ).
     lo_el_it = lo_nd_it->get_element(  ).

     lo_el_it->get_static_attributes(
       IMPORTING
         static_attributes = ls_it ).

     CALL METHOD lo_nd_it->get_static_attributes_table
       EXPORTING
         from  = 1
         to    = 2147483647
       IMPORTING
         table = lt_it.


     DATA : l_o_send_request TYPE REF TO cl_bcs, " email request object
              l_o_document TYPE REF TO cl_document_bcs, " documents object
              l_o_sender TYPE REF TO cl_cam_address_bcs, " sender object
              l_o_recipient TYPE REF TO cl_cam_address_bcs, " recipient object
              bcs_exception TYPE REF TO cx_bcs, " exceptions
              rc_addr TYPE ADR6-SMTP_ADDR,
           " address
            sd_addr TYPE ADR6-SMTP_ADDR VALUE 'abc@xyz.com',
*        text_body type bcsy_text,
            l_it_contents TYPE bcsy_text,
            l_wa_contents TYPE LINE OF bcsy_text.

     rc_addr = email.
     split email at ',' into table lt_split.

     DATA T_ATT_CONTENT_HEX TYPE  SOLIX_TAB.

     loop at lt_it into ls_it.

       CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
         EXPORTING
           buffer     = ls_it-source
         TABLES
           binary_tab = T_ATT_CONTENT_HEX.

       DATA LV_NAME(50). " SO_OBJ_DES

       TRY.
           at first.
             " create email objects
             l_o_send_request = cl_bcs=>create_persistent( ).

             " sender
*------------------------------------------------------------------------------


             CALL METHOD cl_cam_address_bcs=>create_internet_address
               EXPORTING
                 i_address_string = sd_addr
               RECEIVING
                 RESULT           = l_o_sender.

             l_o_send_request->set_sender( i_sender = l_o_sender ).

             " recipient TO
             loop at lt_split into ls_split.

               rc_addr = ls_split.

               CALL METHOD cl_cam_address_bcs=>create_internet_address
                 EXPORTING
                   i_address_string = rc_addr
                 RECEIVING
                   RESULT           = l_o_recipient.

               l_o_send_request->add_recipient(
               i_recipient = l_o_recipient
               i_copy = ''  " CC indicator
               i_blind_copy =  'X'
               i_no_forward = ' ' ).

               clear rc_addr.


             endloop.

*  *********************************************************************


             CLEAR l_wa_contents.
             l_wa_contents-line = body.
             APPEND l_wa_contents TO l_it_contents.

             " create documents
             l_o_document = cl_document_bcs=>create_document(
             i_type = 'RAW' " RAW document format
             i_text = l_it_contents "text_body
             i_subject = SUB"'Simple Email'
             ).

           ENDAT.

           LV_NAME = Ls_IT-FILE.

           CALL METHOD l_o_document->add_attachment
             EXPORTING
               i_attachment_type    = Ls_IT-type
               i_attachment_subject = LV_NAME
               i_att_content_hex    = T_ATT_CONTENT_HEX.
               l_o_send_request->set_document( l_o_document ).

           DATA: status_mail TYPE bcs_stml.
           status_mail = 'N'.
           CALL METHOD l_o_send_request->set_status_attributes
             EXPORTING
               i_requested_status = status_mail
               i_status_mail      = status_mail.


         CATCH cx_bcs INTO bcs_exception.
           data v_message(100).
           v_message = bcs_exception->get_text( ).
           MESSAGE e000(su) WITH v_message.
         cleanup.

       ENDTRY.

     endloop.


*--------------------------------------------------------
*data lv_result type os_boolean.
     try.
         L_O_SEND_REQUEST->set_send_immediately( 'X' ).
         L_O_SEND_REQUEST->send( ).

         commit work .

       CATCH cx_send_req_bcs.
         data v_message1(100).
         v_message1 = bcs_exception->get_text( ).
         MESSAGE e000(su) WITH v_message1.
       cleanup.

     endtry.

     if sy-subrc = 0.
*     report message
       CALL METHOD LO_MESSAGE_MANAGER->REPORT_T100_MESSAGE
         EXPORTING
           msgid = 'ZMESSAGE'
           msgno = '013'
           msgty = 'S'.

     endif.
   ENDIF.

endmethod.

In the above code works only for multiple attachments. Now I want to send the mail without attachment using above code. how to achieve this

kesavadas_thekkillath
Active Contributor
0 Kudos

Moderator Message : Your question is not complete and is a widely discussed topic in SCN, if it is a technical problem that you are facing, please update it properly. I am leaving this thread free for some time so that you can update it.

Former Member
0 Kudos

method ONACTIONSENDMAIL .
*  get message manager
   data: flag type c.
   clear flag.
   DATA LO_API_CONTROLLER     TYPE REF TO IF_WD_CONTROLLER.
   DATA LO_MESSAGE_MANAGER    TYPE REF TO IF_WD_MESSAGE_MANAGER.

   LO_API_CONTROLLER ?= WD_THIS->WD_GET_API( ).

   CALL METHOD LO_API_CONTROLLER->GET_MESSAGE_MANAGER
     RECEIVING
       MESSAGE_MANAGER = LO_MESSAGE_MANAGER.

   DATA LO_ND_MAIL TYPE REF TO IF_WD_CONTEXT_NODE.
   DATA LO_EL_MAIL TYPE REF TO IF_WD_CONTEXT_ELEMENT.
   DATA LS_MAIL TYPE WD_THIS->ELEMENT_MAIL.
   DATA LV_MAIL LIKE LS_MAIL-MAIL.
*   navigate from <CONTEXT> to <MAIL> via lead selection
   LO_ND_MAIL = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_MAIL ).

*   get element via lead selection
   LO_EL_MAIL = LO_ND_MAIL->GET_ELEMENT(  ).

*   get single attribute
   LO_EL_MAIL->GET_ATTRIBUTE(
     EXPORTING
       NAME =  `MAIL`
     IMPORTING
       VALUE = LV_MAIL ).

   data ls_split    type string.
   data lt_split    like table of ls_split.
   split LV_MAIL at ',' into table lt_split.

   data ADDRESS_email type SX_ADDRess.
*  data  ADDRESS_NORMAL type SX_ADDRess.
   ADDRESS_email-TYPE = 'INT'.

   ADDRESS_email-ADDRESS = LV_MAIL.

   loop at lt_split into ls_split.

     ADDRESS_email-ADDRESS = ls_split.

     CALL FUNCTION 'SX_INTERNET_ADDRESS_TO_NORMAL'
       EXPORTING
         ADDRESS_UNSTRUCT                     = ADDRESS_email
        COMPLETE_ADDRESS                     = 'X'
*     IMPORTING
*       ADDRESS_NORMAL                       =  ADDRESS_NORMAL
*       LOCAL                                =
*       DOMAIN                               =
*       COMMENT                              =
*       ADDR_NORMAL_NO_UPPER                 =
*       ADDR_NORMAL_NO_UP_WITH_COMMENT       =
      EXCEPTIONS
        ERROR_ADDRESS_TYPE                   = 1
        ERROR_ADDRESS                        = 2
        ERROR_GROUP_ADDRESS                  = 3
        OTHERS                               = 4
               .
     IF SY-SUBRC <> 0.
       flag = 'X'.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

* report message
       CALL METHOD LO_MESSAGE_MANAGER->REPORT_T100_MESSAGE
         EXPORTING
           MSGID = 'ZMESSAGE'
           MSGNO = '016'
           MSGTY = 'E'.
     endif.

   endloop.

*----------------------------------------------------------------------------*

   IF flag <> 'X'.

     data email like ls_mail-mail.
     data subject  like ls_mail-subject.
     data body  like ls_mail-body.


     lo_nd_mail = wd_context->get_child_node( name = wd_this->wdctx_mail ).

     lo_el_mail = lo_nd_mail->get_element(  ).

     lo_el_mail->get_static_attributes(
       IMPORTING
         static_attributes = ls_mail ).


     lo_el_mail->get_attribute(
     EXPORTING
       name = 'MAIL'
       IMPORTING
         value = email ).


     lo_el_mail->get_attribute(
     EXPORTING
       name = 'SUBJECT'
       IMPORTING
         value = subject ).

     LO_EL_MAIL->GET_ATTRIBUTE(
       EXPORTING
         NAME =  `BODY`
       IMPORTING
         VALUE = BODY ).

*--------------------------------------------
     data sub(50) type c.
     sub = subject.
*-----------------------------------------------------------------

     DATA lo_nd_it TYPE REF TO if_wd_context_node.
     DATA lo_el_it TYPE REF TO if_wd_context_element.
     DATA ls_it TYPE wd_this->element_it.
     data lt_it like table of ls_it.

     lo_nd_it = wd_context->get_child_node( name = wd_this->wdctx_it ).
     lo_el_it = lo_nd_it->get_element(  ).

     lo_el_it->get_static_attributes(
       IMPORTING
         static_attributes = ls_it ).

     CALL METHOD lo_nd_it->get_static_attributes_table
       EXPORTING
         from  = 1
         to    = 2147483647
       IMPORTING
         table = lt_it.


     DATA : l_o_send_request TYPE REF TO cl_bcs, " email request object
              l_o_document TYPE REF TO cl_document_bcs, " documents object
              l_o_sender TYPE REF TO cl_cam_address_bcs, " sender object
              l_o_recipient TYPE REF TO cl_cam_address_bcs, " recipient object
              bcs_exception TYPE REF TO cx_bcs, " exceptions
              rc_addr TYPE ADR6-SMTP_ADDR,
           " address
            sd_addr TYPE ADR6-SMTP_ADDR VALUE 'abc@xyz.com',
*        text_body type bcsy_text,
            l_it_contents TYPE bcsy_text,
            l_wa_contents TYPE LINE OF bcsy_text.

     rc_addr = email.
     split email at ',' into table lt_split.

     DATA T_ATT_CONTENT_HEX TYPE  SOLIX_TAB.

     loop at lt_it into ls_it.

       CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
         EXPORTING
           buffer     = ls_it-source
         TABLES
           binary_tab = T_ATT_CONTENT_HEX.

       DATA LV_NAME(50). " SO_OBJ_DES

       TRY.
           at first.
             " create email objects
             l_o_send_request = cl_bcs=>create_persistent( ).

             " sender
*------------------------------------------------------------------------------


             CALL METHOD cl_cam_address_bcs=>create_internet_address
               EXPORTING
                 i_address_string = sd_addr
               RECEIVING
                 RESULT           = l_o_sender.

             l_o_send_request->set_sender( i_sender = l_o_sender ).

             " recipient TO
             loop at lt_split into ls_split.

               rc_addr = ls_split.

               CALL METHOD cl_cam_address_bcs=>create_internet_address
                 EXPORTING
                   i_address_string = rc_addr
                 RECEIVING
                   RESULT           = l_o_recipient.

               l_o_send_request->add_recipient(
               i_recipient = l_o_recipient
               i_copy = ''  " CC indicator
               i_blind_copy =  'X'
               i_no_forward = ' ' ).

               clear rc_addr.


             endloop.

*  *********************************************************************


             CLEAR l_wa_contents.
             l_wa_contents-line = body.
             APPEND l_wa_contents TO l_it_contents.

             " create documents
             l_o_document = cl_document_bcs=>create_document(
             i_type = 'RAW' " RAW document format
             i_text = l_it_contents "text_body
             i_subject = SUB"'Simple Email'
             ).

           ENDAT.

           LV_NAME = Ls_IT-FILE.

           CALL METHOD l_o_document->add_attachment
             EXPORTING
               i_attachment_type    = Ls_IT-type
               i_attachment_subject = LV_NAME
               i_att_content_hex    = T_ATT_CONTENT_HEX.
               l_o_send_request->set_document( l_o_document ).

           DATA: status_mail TYPE bcs_stml.
           status_mail = 'N'.
           CALL METHOD l_o_send_request->set_status_attributes
             EXPORTING
               i_requested_status = status_mail
               i_status_mail      = status_mail.


         CATCH cx_bcs INTO bcs_exception.
           data v_message(100).
           v_message = bcs_exception->get_text( ).
           MESSAGE e000(su) WITH v_message.
         cleanup.

       ENDTRY.

     endloop.


*--------------------------------------------------------
*data lv_result type os_boolean.
     try.
         L_O_SEND_REQUEST->set_send_immediately( 'X' ).
         L_O_SEND_REQUEST->send( ).

         commit work .

       CATCH cx_send_req_bcs.
         data v_message1(100).
         v_message1 = bcs_exception->get_text( ).
         MESSAGE e000(su) WITH v_message1.
       cleanup.

     endtry.

     if sy-subrc = 0.
*     report message
       CALL METHOD LO_MESSAGE_MANAGER->REPORT_T100_MESSAGE
         EXPORTING
           msgid = 'ZMESSAGE'
           msgno = '013'
           msgty = 'S'.

     endif.
   ENDIF.

endmethod.

In the above code works only for multiple attachments. Now I want to send the mail without attachment using above code. how to achieve this

kesavadas_thekkillath
Active Contributor

Refer program BCS_EXAMPLE_1