CLASS zini_cl_email DEFINITION.
PUBLIC SECTION.
consTANTS: c_version type string vaLUE '1.00'.
DATA: g_subrc TYPE sysubrc.
METHODS:
set_subject IMPORTING i_data TYPE string,
set_body IMPORTING i_data TYPE soli_tab,
set_to IMPORTING i_data TYPE string,
set_from IMPORTING i_data TYPE string,
set_atta IMPORTING i_type TYPE soodk-objtp
i_name TYPE sood-objdes
i_size TYPE i
i_text TYPE soli_tab OPTIONAL
i_hexa TYPE solix_tab OPTIONAL,
send_email RETURNING VALUE(r_subrc) TYPE sysubrc,
ejemplo.
PRIVATE SECTION.
TYPES: BEGIN OF ty_atta,
i_type TYPE soodk-objtp,
i_name TYPE sood-objdes,
i_size TYPE i,
i_text TYPE soli_tab,
i_hexa TYPE solix_tab,
END OF ty_atta.
DATA: l_subject TYPE string,
l_to TYPE stringtab,
l_from type string,
l_body TYPE soli_tab,
l_atta TYPE STANDARD TABLE OF ty_atta.
METHODS check_email RETURNING VALUE(r_subrc) TYPE sysubrc.
ENDCLASS.
CLASS zini_cl_email IMPLEMENTATION.
METHOD set_subject. l_subject = i_data. ENDMETHOD.
METHOD set_from. l_from = i_data. ENDMETHOD.
METHOD set_body. l_body = i_data. ENDMETHOD.
METHOD set_to.
FIND REGEX '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'
IN i_data
MATCH COUNT DATA(lv_count).
DATA(lv_ok) = xsdbool( lv_count > 0 ).
IF lv_ok = abap_true AND i_data IS NOT INITIAL.
APPEND i_data TO l_to.
ENDIF.
ENDMETHOD.
METHOD set_atta.
l_atta = VALUE #( BASE l_atta
( i_type = i_type
i_name = i_name
i_text = i_text
i_size = i_size
i_hexa = i_hexa
)
).
ENDMETHOD.
METHOD check_email.
IF lines( l_to ) >= 1.
g_subrc = 1. "Error en Destinatarios
ENDIF.
ENDMETHOD.
METHOD send_email.
r_subrc = check_email( ).
CHECK r_subrc IS INITIAL.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Creamos el Objecto
DATA(lo_documento) = cl_document_bcs=>create_document( i_type = 'RAW'
i_text = l_body
i_subject = CONV #( l_subject )
).
DATA(lo_envio) = cl_bcs=>create_persistent( ).
lo_envio->set_document( lo_documento ).
if l_from is not initial.
data(lo_from) = cl_cam_address_bcs=>create_internet_address( conv #( l_from ) ).
lo_envio->set_sender( lo_from ).
endif.
LOOP AT l_to INTO DATA(ax).
DATA(lo_destinatario) = cl_cam_address_bcs=>create_internet_address( CONV #( ax ) ).
lo_envio->add_recipient( lo_destinatario ).
ENDLOOP.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Añadimos Attachments si tiene
LOOP AT l_atta INTO DATA(bx).
lo_documento->add_attachment(
i_attachment_type = bx-i_type
i_attachment_subject = bx-i_name
i_attachment_size = CONV #( bx-i_size )
i_att_content_hex = bx-i_hexa
i_att_content_text = bx-i_text
).
ENDLOOP.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*--[ Envio
lo_envio->send( i_with_error_screen = abap_false ).
COMMIT WORK.
ENDMETHOD.
METHOD ejemplo.
DATA(cl_mail) = NEW zini_cl_email( ).
cl_mail->set_subject( 'Prueba Temporal' ).
cl_mail->set_body( VALUE soli_tab( ( line ='Buenos días' ) ( line = 'Esto es una prueba' ) ) ).
cl_mail->set_to( 'publicidad@email.com' ).
cl_mail->set_atta( i_type = 'RAW'
i_name = 'Datos.csv'
i_size = 10
i_text = VALUE soli_tab( ( line = '1;2;3;4' ) ( line = '5;6;7;8') )
* i_hexa = value solix_tab ( )
).
cl_mail->send_email( ).
ENDMETHOD.
ENDCLASS.