PDA

Ver la Versión Completa : Envío de correo desde cuenta genérica


felix_cid
23/09/08, 19:37:27
Hola a todos:

Por casualidad conoce alguien de Uds. la manera de poder enviar correo desde SAP a uno a varios destinatarios, pero cuyo origen sea SIEMPRE una cuenta genérica, independiente de la cuenta del usuario que está ejecutando el programa.

Espero sus noticias y muchas gracias a todos por vuestra ayuda.

Saludos.:confused: :confused: :eek:

Jotabin
23/09/08, 19:44:32
si usás la función estándar SO_DOCUMENT_SEND_API1 para el envío de mails, el remitente se define vía parámetros

felix_cid
25/09/08, 21:18:17
¿Me podrías dar un ejemplo de como poder utilizar la función SO_DOCUMENT_SEND_API1?.....he tratado de probar de diferentes maneras y parámetros, pero no he logrado que pueda enviar un correo EXTERNO, sólo me envía correos al inbox de SAP. Probé cambiando parámetros e indicando que es un correo tipo U y del tipo INT, pero no me aparece en ningún momento en la transacción SCOT.

Espero tus comentarios, de antemano muchas gracias.

tomasap
23/10/09, 09:08:11
Buenas, ¿Encontrste algo felix?

Gracais

Neo_25
23/10/09, 10:00:31
A ver si puedo ayudar.
Yo uso este código para mandar a varias personas.
El q lo envía lo puedes poner tú o te lo coge la mákina del usuario actual.

Luego hay q liberarlo desde la transacción SCOT, o tardará un rato en hacerlo sólo.

Si aún así no te llega el email, es porque han de modificar algo en SAP para q deje mandar correos fuera.

Eso es otra historia.

Saludos

**********************************************
* Email
**********************************************
* Declaraciones de tablas internas
DATA: i_receivers TYPE TABLE OF somlreci1 WITH HEADER LINE,

** Objetos a mandar por email
i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
i_objtxt LIKE solisti1 OCCURS 0 WITH HEADER LINE,
i_objbin LIKE solisti1 OCCURS 0 WITH HEADER LINE,
i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

* Declaraciones de estructuras
wa_objhead TYPE soli_tab,
wa_doc_chng TYPE sodocchgi1,
w_data TYPE sodocchgi1,

* Declaración de variables
v_len_out TYPE so_obj_len,
v_len_outn TYPE i,
v_lines_txt TYPE i,
v_lines_bin TYPE i,

* Importar de la bapi
zsend_to_all TYPE so_text001,
znew_order TYPE so_obj_id.


*******************************************************************
*/////////////////////////////////////////////////////////////
* A S U N T O , R E M I T E N T E y D E S T I N A T A R I O
*/////////////////////////////////////////////////////////////
DATA: asunto_email(255) TYPE c VALUE 'Asunto EMAIL'.
DATA: remitente TYPE so_rec_ext. "kien envía, se puede poner uno fijo
DATA: destinatario TYPE ad_smtpadr
VALUE 'direccion ARROBA direccion.com'.
* Si no se pone remitente, el sistema lo coge automáticamente
* de la sesión del usuario, de este usuario
*******************************************************************

* Variable del texto a enviar
DATA: v_texto TYPE string.
TYPES: BEGIN OF t_texttable,
line(255) TYPE c,
END OF t_texttable.
* Estructura del texto a enviar
DATA: w_texttable TYPE t_texttable.
* Tabla donde estará el texto a enviar
DATA: i_texttable TYPE TABLE OF t_texttable.

REFRESH: i_reclist, i_objtxt, i_objbin, i_objpack.
CLEAR wa_objhead.

*******************************************************************
*////////////////////////////////////////
* T E X T O D E L E M A I L
*////////////////////////////////////////
*-----1ª línea
v_texto = 'Prueba del cuerpo del email, primera línea.'.
w_texttable-line = v_texto.
APPEND w_texttable TO i_texttable.
*-----2ª línea
v_texto = 'Podemos seguir escribindo, segunda línea.'.
w_texttable-line = v_texto.
APPEND w_texttable TO i_texttable.
*******************************************************************

* i_texttable es una tabla con un campo texto ( 255 caracteres )
* cargamos el cuerpo del email en la tabla a mandar
i_objtxt[] = i_texttable[].

DESCRIBE TABLE i_objtxt LINES v_lines_txt.
READ TABLE i_objtxt INDEX v_lines_txt.
wa_doc_chng-obj_name = asunto_email.
wa_doc_chng-expiry_dat = sy-datum + 10.
wa_doc_chng-obj_descr = asunto_email.
wa_doc_chng-sensitivty = 'F'.
wa_doc_chng-doc_size = v_lines_txt * 255.

CLEAR i_objpack-transf_bin.
i_objpack-head_start = 1.
i_objpack-head_num = 0.
i_objpack-body_start = 1.
i_objpack-body_num = v_lines_txt.
i_objpack-doc_type = 'RAW'.
APPEND i_objpack.


* ---> Destinatario del correo
CLEAR i_reclist.
i_reclist-receiver = destinatario.
i_reclist-rec_type = 'U'. "Usuario de internet
APPEND i_reclist.
** Akí puedes apendear los usuarios q kieras
** con un loop a una tabla ...
*CLEAR i_reclist.
*i_reclist-receiver = destinatario2.
*i_reclist-rec_type = 'U'. "Usuario de internet
*APPEND i_reclist.


* ---> Envio de correo al destinatario
CLEAR i_objpack.
CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = wa_doc_chng
put_in_outbox = 'X'
sender_address = remitente
sender_address_type = 'SMTP'
commit_work = 'X'
IMPORTING
sent_to_all = zsend_to_all
new_object_id = znew_order
TABLES
packing_list = i_objpack
object_header = wa_objhead
contents_bin = i_objbin
contents_txt = i_objtxt
* contents_hex = contents_hex "no uso
* object_para = object_para "no uso
* object_parb = object_parb "no uso
receivers = i_reclist
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.

Belerophonte
11/11/09, 22:51:56
Hola , yo mande correos de esta forma, solo que hay que pasarle como parametro el correo al cual sera enviado, ojala te sirva.

Saludos

FORM send .
DATA lv_texto(30) TYPE c.

REFRESH main_text.

TRY.

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

* -------- create and set document with attachment ---------------
* create document object from internal table with text
APPEND 'Pedidos próximos a vencer y vencidos' TO main_text.
CONCATENATE 'Grupo de Compras:' gc_tab
gv_ekgrp gc_tab
INTO lv_texto.
APPEND lv_texto TO main_text.
APPEND 'El contenido del reporte esta incluido en el archivo anexo' TO main_text.

document = cl_document_bcs=>create_document(
i_type = 'RAW'
i_text = main_text
i_subject = 'Pedidos próximos a vencer y vencidos' ).

* add the spread sheet as attachment to document object
document->add_attachment(
i_attachment_type = 'xls'
i_attachment_subject = 'Pedidos'
i_attachment_size = size
i_att_content_hex = binary_content ).

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

* --------- add recipient (e-mail address) -----------------------
* create recipient object
LOOP AT t_mailto INTO w_mailto.
recipient = cl_cam_address_bcs=>create_internet_address( w_mailto-mailto ).
* add recipient object to send request
send_request->add_recipient( recipient ).
ENDLOOP.



* ---------- send document ---------------------------------------
sent_to_all = send_request->send( i_with_error_screen = 'X' ).

COMMIT WORK.

IF sent_to_all IS INITIAL.
MESSAGE i500(sbcoms) WITH mailto.
ELSE.
MESSAGE s022(so).
ENDIF.

* ------------ exception handling ----------------------------------
* replace this rudimentary exception handling with your own one !!!
CATCH cx_bcs INTO bcs_exception.
MESSAGE i865(so) WITH bcs_exception->error_type.
ENDTRY.
ENDFORM. " SEND