Inicio > ABAP/4 > Enviar Mail simple con SO_DOCUMENT_SEND_API1

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]

  1. Manuel
    15/11/2015 a las 11:44

    Gracias por tu ejemplo!! Me sirvió mucho. Una acotación por si alguien más lo necesita. Para el envío de correo, también se puede usar el usuario SAP, no solo una dirección de correo.

    En caso de necesitar enviar al usuario SAP, se debe cambiar el tipo de ‘U’ a ‘B’ y quitar la fecha. Así:

    lt_recipients-rec_type = ‘B’.
    “lt_recipients-rec_date = sy-datum.

    Gracias, y saludos!

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: