ABAPSSENDMAIL

  1.  
  2. CLASS zini_cl_email DEFINITION.
  3.   PUBLIC SECTION.
  4.  
  5.    consTANTS: c_version type string vaLUE '1.00'.
  6.  
  7.     DATA: g_subrc TYPE sysubrc.
  8.  
  9.     METHODS:
  10.       set_subject IMPORTING i_data TYPE string,
  11.       set_body    IMPORTING i_data TYPE soli_tab,
  12.       set_to      IMPORTING i_data TYPE string,
  13.       set_from    IMPORTING i_data TYPE string,
  14.       set_atta    IMPORTING i_type TYPE soodk-objtp
  15.                             i_name TYPE sood-objdes
  16.                             i_size TYPE i
  17.                             i_text TYPE soli_tab OPTIONAL
  18.                             i_hexa TYPE solix_tab OPTIONAL,
  19.  
  20.       send_email RETURNING VALUE(r_subrc) TYPE sysubrc,
  21.  
  22.       ejemplo.
  23.  
  24.   PRIVATE SECTION.
  25.     TYPES: BEGIN OF ty_atta,
  26.              i_type TYPE soodk-objtp,
  27.              i_name TYPE sood-objdes,
  28.              i_size TYPE i,
  29.              i_text TYPE soli_tab,
  30.              i_hexa TYPE solix_tab,
  31.            END OF ty_atta.
  32.  
  33.     DATA: l_subject TYPE string,
  34.           l_to      TYPE stringtab,
  35.           l_from    type string,
  36.           l_body    TYPE soli_tab,
  37.           l_atta    TYPE STANDARD TABLE OF ty_atta.
  38.  
  39.     METHODS check_email RETURNING VALUE(r_subrc) TYPE sysubrc.
  40.  
  41. ENDCLASS.
  42.  
  43. CLASS zini_cl_email IMPLEMENTATION.
  44.  
  45.   METHOD set_subject. l_subject = i_data. ENDMETHOD.
  46.   METHOD set_from.    l_from = i_data. ENDMETHOD.
  47.   METHOD set_body.    l_body = i_data. ENDMETHOD.
  48.   METHOD set_to.
  49.     FIND REGEX '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'
  50.          IN i_data
  51.          MATCH COUNT DATA(lv_count).
  52.  
  53.     DATA(lv_ok) = xsdbool( lv_count > 0 ).
  54.  
  55.     IF lv_ok = abap_true AND i_data IS NOT INITIAL.
  56.       APPEND i_data TO l_to.
  57.     ENDIF.
  58.  
  59.   ENDMETHOD.
  60.  
  61.   METHOD set_atta.
  62.     l_atta = VALUE #(  BASE l_atta
  63.                          ( i_type = i_type
  64.                            i_name = i_name
  65.                            i_text = i_text
  66.                            i_size = i_size
  67.                            i_hexa = i_hexa
  68.                          )
  69.                     ).
  70.   ENDMETHOD.
  71.  
  72.   METHOD check_email.
  73.     IF lines( l_to ) >= 1.
  74.       g_subrc = 1. "Error en Destinatarios
  75.     ENDIF.
  76.   ENDMETHOD.
  77.  
  78.   METHOD send_email.
  79.  
  80.     r_subrc = check_email(  ).
  81.  
  82.     CHECK r_subrc IS INITIAL.
  83. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  84. *--[ Creamos el Objecto
  85.     DATA(lo_documento) = cl_document_bcs=>create_document( i_type = 'RAW'
  86.                                                            i_text = l_body
  87.                                                            i_subject = CONV #( l_subject )
  88.                                                          ).
  89.  
  90.     DATA(lo_envio) = cl_bcs=>create_persistent( ).
  91.     lo_envio->set_document( lo_documento ).
  92.  
  93.     if l_from is not initial.
  94.        data(lo_from) = cl_cam_address_bcs=>create_internet_address( conv #( l_from ) ).
  95.        lo_envio->set_sender( lo_from ).
  96.     endif.
  97.  
  98.     LOOP AT l_to INTO DATA(ax).
  99.       DATA(lo_destinatario) = cl_cam_address_bcs=>create_internet_address( CONV #( ax ) ).
  100.       lo_envio->add_recipient( lo_destinatario ).
  101.     ENDLOOP.
  102.  
  103. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  104. *--[ Añadimos Attachments si tiene
  105.     LOOP AT l_atta INTO DATA(bx).
  106.  
  107.       lo_documento->add_attachment(
  108.         i_attachment_type    = bx-i_type
  109.         i_attachment_subject = bx-i_name
  110.         i_attachment_size    = CONV #( bx-i_size )
  111.         i_att_content_hex    = bx-i_hexa
  112.         i_att_content_text   = bx-i_text
  113.       ).
  114.  
  115.     ENDLOOP.
  116.  
  117. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  118. *--[ Envio
  119.     lo_envio->send( i_with_error_screen = abap_false ).
  120.     COMMIT WORK.
  121.  
  122.   ENDMETHOD.
  123.  
  124.   METHOD ejemplo.
  125.     DATA(cl_mail) = NEW zini_cl_email(  ).
  126.     cl_mail->set_subject( 'Prueba Temporal' ).
  127.     cl_mail->set_body( VALUE soli_tab( ( line ='Buenos días' ) ( line = 'Esto es una prueba' ) ) ).
  128.     cl_mail->set_to( 'publicidad@email.com' ).
  129.     cl_mail->set_atta(  i_type = 'RAW'
  130.                         i_name = 'Datos.csv'
  131.                         i_size = 10
  132.                         i_text = VALUE soli_tab( ( line = '1;2;3;4' ) ( line = '5;6;7;8') )
  133. *                       i_hexa = value solix_tab (  )
  134.                      ).
  135.     cl_mail->send_email(  ).
  136.   ENDMETHOD.
  137.  
  138. ENDCLASS.
  139.