Archivo

Posts Tagged ‘enviar correo’

Enviar Mail simple con SO_DOCUMENT_SEND_API1

Caso: Se desea enviar un mail en formato HTML.

Solución: se define un form ENVIAR_MAIL, que recibe como parámetros una lista de destinatarios y un texto adicional para incluir en el cuerpo del mensaje.

*&———————————————————————*
*&      Form  ENVIAR_MAIL
*&———————————————————————*
*       Envía un aviso al usuario que ejecutó el reporte indicando que el proceso terminó
*———————————————————————-*
FORM enviar_mail USING p_mails TYPE char100       » Destinatarios
p_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 mail!!!’.
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.

*———————————————————————-*
* CONTROL DATA (Datos de cabecera del mail)
*———————————————————————-*
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’.

*———————————————————————-*
* SUBJECT (Asunto del mail)
*———————————————————————-*
**    Email Subject
ls_doc_chng-obj_descr = ld_subject.     » Ver variable definida con valor constante arriba

*———————————————————————-*
* BODY (Cuerpo del mail, en HTML)
*———————————————————————-*
CLEAR ls_body.
MOVE ‘<html><body>’ TO ls_body-line.
APPEND ls_body TO lt_body.

CLEAR ls_body.
CONCATENATE ‘<p>’ ‘Resultados de la ejecución del reporte</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>’ p_texto ‘</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>’ ‘Este correo se ha generado en forma automática, por favor no responder</p>’
INTO ls_body-line SEPARATED BY space.
APPEND ls_body TO lt_body.

CLEAR ls_body.
MOVE  ‘</body></html>’ TO ls_body-line.
APPEND ls_body TO lt_body.

* Armo 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.

*———————————————————————-*
*RECIPIENTS (Destinatarios del mail separados por 😉
*———————————————————————-*
lv_sender = ‘aaaa@aaaaa.com’.       » Indicar el mail origen

CLEAR lt_recipients.
lv_len = STRLEN( p_mails ).          » p_mails tiene direcciones de correo separadas por «;»
DO lv_len TIMES.
lv_ofset = sy-index – 1.
lv_char = p_mails+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

[end]