Direccion remitente en mail

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • alvaro_melen21
    Junior Member
    • jul
    • 2

    #1

    Direccion remitente en mail

    Buenas, en mi sistema el remitente se recuperaba y se enviaba bien en los mails pero desde que implementamos los SP (parches), aparace el nombre del remitente bien, pero la direccion aparece fpr300+cod_usuario@....

    Os ha pasado a alguien???

    La funcion que envia los mail es:

    FUNCTION z_enviar_email.
    *"----------------------------------------------------------------------
    *"*"Interfase local
    *" IMPORTING
    *" VALUE(FILE_SEND) LIKE RLGRAP-FILENAME
    *" VALUE(NAME_FILE) TYPE SOOD-OBJDES OPTIONAL
    *" VALUE(EMAIL) TYPE SO_NAME
    *" VALUE(TITLE) TYPE SO_OBJ_DES
    *" VALUE(PROGRAM) LIKE SY-CPROG OPTIONAL
    *"----------------------------------------------------------------------

    * Variables
    DATA: send_request TYPE REF TO cl_bcs.
    DATA: text TYPE bcsy_text.
    DATA: doc_content TYPE bcsy_text.
    DATA: binary_content TYPE solix_tab.
    DATA: document TYPE REF TO cl_document_bcs.
    DATA: sender TYPE REF TO cl_sapuser_bcs.
    DATA: recipient TYPE REF TO if_recipient_bcs.
    DATA: bcs_exception TYPE REF TO cx_bcs.
    DATA: sent_to_all TYPE os_boolean.
    DATA: temp_text(255).
    DATA: doc_line TYPE soli.
    DATA: hex_line TYPE solix.
    DATA: hex_table TYPE solix_tab.
    DATA: nombre_fichero TYPE sood-objdes.
    DATA: temp_mail LIKE zcontrol_batch-email_gds.
    DATA: lines TYPE i.
    DATA: length LIKE sood-objlen.
    DATA: temp_fecha(10).
    DATA: titulo TYPE so_obj_des.

    * Fecha del sistema
    WRITE sy-datum TO temp_fecha DD/MM/YYYY.

    * Titulo del correo
    CONCATENATE title '-' temp_fecha INTO titulo SEPARATED BY space.


    TRY.
    * -------- create persistent send request ------------------------
    send_request = cl_bcs=>create_persistent( ).

    * -------- Creamos el texto del correo ---------------
    * create document from internal table with text
    CONCATENATE text-001 file_send text-002 program text-003 email '.'
    INTO temp_text SEPARATED BY space.
    APPEND temp_text TO text.

    APPEND text-004 TO text.
    APPEND '' TO text.

    APPEND text-005 TO text.
    APPEND '' TO text.

    APPEND text-006 TO text.

    * Creamos eldocuemnto con el titulo, el texto y el fichero
    document = cl_document_bcs=>create_document(
    i_type = 'RAW'
    i_text = text
    i_length = '12'
    i_subject = titulo ).

    OPEN DATASET file_send FOR INPUT IN BINARY MODE.
    * OPEN DATASET file_send FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
    IF sy-subrc NE 0.
    MESSAGE i010(ad) WITH text-007.
    EXIT.
    ELSE.

    DO.
    READ DATASET file_send INTO hex_line-line.
    IF sy-subrc <> 0.
    EXIT.
    ELSE.
    APPEND hex_line TO binary_content.
    ENDIF.
    ENDDO.
    ENDIF.

    CLOSE DATASET file_send.
    * fin de la creación del documento

    CONCATENATE 'NAME_FILE' '-'
    sy-datum
    INTO nombre_fichero SEPARATED BY space.
    CALL METHOD document->add_attachment
    EXPORTING
    i_attachment_type = 'CSV'
    i_attachment_subject = nombre_fichero
    * i_attachment_size = length
    i_att_content_hex = binary_content.
    * i_att_content_text = doc_content.

    * add document to send request
    CALL METHOD send_request->set_document( document ).

    * --------- set sender -------------------------------------------
    * note: this is necessary only if you want to set the sender
    * different from actual user (SY-UNAME). Otherwise sender is
    * set automatically with actual user.

    sender = cl_sapuser_bcs=>create( sy-uname ).
    CALL METHOD send_request->set_sender
    EXPORTING
    i_sender = sender.

    * --------- add recipient (e-mail address) -----------------------
    * create recipient - please replace e-mail address !!!
    recipient = cl_cam_address_bcs=>create_internet_address( email ).

    * add recipient with its respective attributes to send request
    CALL METHOD send_request->add_recipient
    EXPORTING
    i_recipient = recipient
    i_express = 'X'.

    * set send immediately flag
    send_request->set_send_immediately( 'X' ).

    * ---------- send document ----------------------------------
    CALL METHOD send_request->send(
    EXPORTING
    i_with_error_screen = 'X'
    RECEIVING
    result = sent_to_all ).

    COMMIT WORK.
    * -----------------------------------------------------------

    * exception handling
    CATCH cx_bcs INTO bcs_exception.

    WRITE: bcs_exception->error_type.
    EXIT.

    ENDTRY.

    ENDFUNCTION.
  • romyggar
    Junior Member
    • jun
    • 14

    #2
    Me pasó igual

    Amigo, tuve que hacer casi el mismo programa que tu, y me pasaba algo un poco diferente, era que el número de personal al que se le deseaba en enviar el correo electrónico no tenia e-mail asociado.

    La solución que te puede servir es manualmente buscar en las tablas donde está la info de usuario y extraer la dirección de correo. No dejes que el sistema lo haga automáticamente, ya que puede ser un problema de reeemplazo (al aplicar los parches). Por la SU01 se puede mirar cual es la dirección de correo asociada a un usuario logueado. Por la USR21 (tabla) ves la info de los números de persona!.

    Quizá te sirva este código para acceder a la USR21 con el numero de personal verificándolo en la ADR6. "address_rem" es una variable tipo char de 40 caracteres.

    Código:
    FORM obtener_usuario CHANGING p_address_rem.
    
      SELECT SINGLE b~smtp_addr
      FROM usr21 AS a
      INNER JOIN adr6 AS b
              ON a~persnumber = b~persnumber
      INTO address_rem
      WHERE a~bname = syst-uname.
      if address_rem is initial or address_rem co space or address_rem eq ''.
        address_rem = 'C.PARRA66@XXXXXXX.com'.
      endif.
    ENDFORM. " OBTENER_USUARIO

    Comentario

    Trabajando...