Enviar E-Mail – Mejor forma
Caso: buscando encontré este código para envío de mail, muy correcto y simple.
Solución: Lo hice en una función
FUNCTION z_envio_mail. *"---------------------------------------------------------------------- *"*"Interfase local *" IMPORTING *" REFERENCE(I_SUBJECT) TYPE SO_OBJ_DES OPTIONAL *" REFERENCE(I_BODY) TYPE BCSY_TEXT OPTIONAL *" REFERENCE(I_TYPE_DOC) TYPE SO_OBJ_TP OPTIONAL *" REFERENCE(I_SENDER) TYPE AD_SMTPADR OPTIONAL *" REFERENCE(I_RECEIVERS) TYPE BCSY_SMTPA *"---------------------------------------------------------------------- DATA: lo_send_request TYPE REF TO cl_bcs, lo_bcs_exception TYPE REF TO cx_bcs, lo_document TYPE REF TO cl_document_bcs, lo_sender TYPE REF TO if_sender_bcs, lo_recipient TYPE REF TO if_recipient_bcs, lit_message_body TYPE bcsy_text, lx_document_bcs TYPE REF TO cx_document_bcs, lv_sent_to_all TYPE os_boolean, lv_sender TYPE adr6-smtp_addr, lv_uname TYPE uname, lv_emailadd TYPE adr6-smtp_addr, wa_receivers TYPE LINE OF bcsy_smtpa, lv_sub TYPE so_obj_des, lv_subrc TYPE sy-subrc, lv_error TYPE string. TRY. lo_send_request = cl_bcs=>create_persistent( ). *************** Subject ***************************************** CLEAR lv_sub. lv_sub = i_subject. " Asunto *************** Message Body ***************************************** REFRESH:lit_message_body. lit_message_body[] = i_body[]. * put your text into the document IF i_type_doc IS NOT INITIAL. lo_document = cl_document_bcs=>create_document( i_type = i_type_doc i_text = lit_message_body i_subject = lv_sub ). ELSE. lo_document = cl_document_bcs=>create_document( i_type = 'RAW' i_text = lit_message_body i_subject = lv_sub ). ENDIF. *************** Create sender ***************************************** lv_sender = i_sender. " 'remitente@mail.com'. IF lv_sender IS INITIAL. lo_sender = cl_sapuser_bcs=>create( sy-uname ). ELSE. lo_sender = cl_cam_address_bcs=>create_internet_address( lv_sender ). ENDIF. * Set sender lo_send_request->set_sender( lo_sender ). *************** Create Receiver ***************************************** LOOP AT i_receivers INTO wa_receivers. lv_emailadd = wa_receivers. " destinatario@mail.com lo_recipient = cl_cam_address_bcs=>create_internet_address( lv_emailadd ). * Add recipient object to send request CALL METHOD lo_send_request->add_recipient EXPORTING i_recipient = lo_recipient i_express = 'X'. ENDLOOP. *************** Send Email ***************************************** lo_send_request->set_document( lo_document ). lo_send_request->send( EXPORTING i_with_error_screen = 'X' RECEIVING result = lv_sent_to_all ). COMMIT WORK. IF lv_sent_to_all IS INITIAL. lv_subrc = '1'. ELSE. CLEAR lv_subrc. ENDIF. CATCH cx_bcs INTO lo_bcs_exception. lv_error = lo_bcs_exception->get_text( ). lv_subrc = '1'. ENDTRY. ENDFUNCTION.
Link: http://www.patelashish.com/wordpress/2013/08/abap-code-best-way-series-send-email/
Hola, gracias por compartir este tutorial. Una consulta hay alguna forma de obtener el ID del correo a enviar para luego por ese ID consultar a las tablas de la transacción SOST y saber el estado del correo?. Gracias de antemano.
Hola Jimmy, así a primera mano nunca lo he hecho, habría que ponerse a investigar un poco!
Hola, hay alguna forma de personalizar el remitente, por ejemplo «Juan Perez» juanperez@gmail,com??. Gracias de antemano
Creo que si, fijate en la parte de:
lo_recipient TYPE REF TO if_recipient_bcs,
Excelente material, Gracias.
Hola, lo primero muchas gracias por el post, es muy util. Una duda, con este codigo envia un mensaje de confirmacion de lectura al remitente, ¿como puedo hacer que no envie ningun correo al destinatario? , gracias, un saludo
buenos días, necesito una ayuda, al realizar la migracion a HANNA no se envian los correos de comprobantes de pago a los clientes