Lunes, 19 Enero 2015 00:00

SAPconnect y el envío de correos

Escrito por
Valora este artículo
(4 votos)

En primer lugar deberemos chequear si tenemos activo el servicio SMTP, para ello podemos validar a través de la transacción RZ10 el puerto sobre el que está configuado el protocolo SMTP, y a través de la transacción SMICM podemos comprobar si el servicio está activo, y el puerto es el correcto.

 

Después lanzamos la transacción SCOT para configurar SAPconnect, y chequeamos el nodo para SMTP situado debajo del nodo INT, y hacemos doble click en SMTP para que nos aparezca un ventana de configuración donde tendremos que indicar el nombre del servidor de correo saliente, el puerto, y activar la casilla de "Internet", poniendo el valor "*" para enviar correos a todo el mundo. El nodo se pondrá de color verde.

 

 



* 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

 

 

Visto 594715 veces Modificado por última vez en Miércoles, 06 Mayo 2020 12:45