ABAP /

Enviar Mail

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

SAP ABAP Programación Class

Última modificación de la página el 02 October 2026 a las 12h17
Powered by PmWiki