Archivo
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/
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]