* Bloque1 donde el usuario realizará la selección
SELECTION-SCREEN: BEGIN OF BLOCK bq1 WITH FRAME TITLE text-001.
PARAMETERS: p_correo TYPE char100 OBLIGATORY,
p_texto TYPE char255.
SELECTION-SCREEN: END OF BLOCK bq1.
*********************************
* LÓGICA DE PROCESO *
*********************************
AT SELECTION-SCREEN.
* Validaciones de la pantalla de selección
START-OF-SELECTION.
* Selección principal de datos
END-OF-SELECTION.
* Enviar email
PERFORM f_enviar_mail USING p_correo p_texto.
*********************************
* SUBRUTINAS *
*********************************
FORM f_enviar_mail USING param_email TYPE char100 "destinatarios
param_texto TYPE char255. "texto dinámico para el cuerpo del mail
DATA: lt_docs TYPE TABLE OF docs,
ls_doc_chng LIKE sodocchgi1,
ld_tab_lines LIKE sy-tabix,
lt_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,
lt_objpack LIKE sopcklsti1 OCCURS 6 WITH HEADER LINE,
ls_body TYPE solisti1,
lt_body TYPE TABLE OF solisti1,
lt_recipients TYPE TABLE OF somlreci1 WITH HEADER LINE,
ls_recipients TYPE somlreci1.
DATA ld_subject(50) TYPE c VALUE 'Asunto del correo'.
DATA ld_body(255) TYPE c.
DATA lv_sender TYPE soextreci1-receiver.
DATA lv_len TYPE i.
DATA lv_ofset TYPE i.
DATA lv_char(1).
CLEAR: ls_doc_chng, ls_body, lt_recipients, ld_tab_lines, lv_sender.
REFRESH: lt_body, lt_recipients, lt_objpack, lt_objtxt.
* Cabecera del email
ls_doc_chng-obj_name = 'URGENT'.
ls_doc_chng-sensitivty = 'P'.
ls_doc_chng-no_change = 'X'.
ls_doc_chng-priority = '1'.
ls_doc_chng-obj_prio = '1'.
ls_doc_chng-obj_langu = sy-langu.
ls_doc_chng-no_change = 'X'.
* Asunto
ls_doc_chng-obj_descr = ld_subject. " ver variable definida con valor constante arriba
* Cuerpo en HTML
CLEAR ls_body.
MOVE '' TO ls_body-line.
APPEND ls_body TO lt_body.
CLEAR ls_body.
CONCATENATE '<p>' 'Ejecución del programa</p>'
INTO ls_body-line.
APPEND ls_body TO lt_body.
CLEAR ls_body.
APPEND ls_body TO lt_body.
CLEAR ls_body.
CONCATENATE '<p><b><u>' param_texto '</u></b><br></p>'
INTO ls_body-line SEPARATED BY space.
APPEND ls_body TO lt_body.
CLEAR ls_body.
APPEND ls_body TO lt_body.
CLEAR ls_body.
CONCATENATE '<p>' '<IMG SRC=''https://URL/images''></p>'
INTO ls_body-line SEPARATED BY space.
APPEND ls_body TO lt_body.
CLEAR ls_body.
MOVE '' TO ls_body-line.
APPEND ls_body TO lt_body.
* Carga el HTML
lt_objtxt[] = lt_body[].
CLEAR lt_objtxt.
DESCRIBE TABLE lt_objtxt LINES ld_tab_lines.
IF ld_tab_lines GT 0.
READ TABLE lt_objtxt INDEX ld_tab_lines.
ls_doc_chng-doc_size = ( ld_tab_lines - 1 ) * 255 + strlen( lt_objtxt ).
CLEAR lt_objpack-transf_bin.
lt_objpack-head_start = 1.
lt_objpack-head_num = 0.
lt_objpack-body_start = 1.
lt_objpack-body_num = ld_tab_lines.
lt_objpack-doc_type = 'HTM'.
APPEND lt_objpack.
ENDIF.
* Destinatarios del email separados por ";"
lv_sender = Esta dirección de correo electrónico está protegida contra spambots. Usted necesita tener Javascript activado para poder verla.'. " indicar el mail origen
CLEAR lt_recipients.
lv_len = strlen( param_email ).
DO lv_len TIMES.
lv_ofset = sy-index - 1.
lv_char = param_email+lv_ofset(1).
CHECK lv_char IS NOT INITIAL.
IF lv_char = ';'.
CONDENSE lt_recipients-receiver.
lt_recipients-rec_type = 'U'.
lt_recipients-rec_date = sy-datum.
APPEND lt_recipients.
CLEAR lt_recipients.
CONTINUE.
ENDIF.
CONCATENATE lt_recipients-receiver lv_char INTO lt_recipients-receiver.
IF lv_len = sy-index.
CONDENSE lt_recipients-receiver.
lt_recipients-rec_type = 'U'.
lt_recipients-rec_date = sy-datum.
APPEND lt_recipients.
ENDIF.
ENDDO.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = ls_doc_chng
put_in_outbox = 'X'
sender_address = lv_sender
sender_address_type = 'SMTP'
commit_work = 'X'
TABLES
packing_list = lt_objpack
contents_txt = lt_objtxt
receivers = lt_recipients
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc EQ 0.
FORMAT: COLOR COL_POSITIVE, INTENSIFIED ON.
WRITE: /1 'el MAIL fue enviado con éxito'.
ELSE.
FORMAT: COLOR COL_NEGATIVE, INTENSIFIED ON.
WRITE: /1 'no se pudo enviar mail'.
ENDIF.
ENDFORM. " enviar_mail
Para visualizar los correos generados para envío SCOT -> Utilidades -> Resumen órdenes de envío