Difference between revisions of "SAP ABAP EMAIL"
From SapWiki
(13 intermediate revisions by the same user not shown) | |||
Line 36: | Line 36: | ||
DATA: ld_addr TYPE adr6-smtp_addr, | DATA: ld_addr TYPE adr6-smtp_addr, | ||
internet_sender TYPE REF TO if_sender_bcs. | internet_sender TYPE REF TO if_sender_bcs. | ||
+ | DATA: gv_dummy(160). | ||
text[] = i_text[]. | text[] = i_text[]. | ||
Line 142: | Line 143: | ||
CATCH cx_bcs INTO bcs_exception. | CATCH cx_bcs INTO bcs_exception. | ||
r_subrc = 4. | r_subrc = 4. | ||
+ | IF NOT bcs_exception->msgid IS INITIAL | ||
+ | AND NOT bcs_exception->msgty IS INITIAL | ||
+ | AND NOT bcs_exception->msgno IS INITIAL. | ||
+ | MESSAGE ID bcs_exception->msgid | ||
+ | TYPE bcs_exception->msgty | ||
+ | NUMBER bcs_exception->msgno | ||
+ | WITH bcs_exception->msgv1 | ||
+ | bcs_exception->msgv2 | ||
+ | bcs_exception->msgv3 | ||
+ | bcs_exception->msgv4 | ||
+ | into gv_dummy. | ||
EXIT. | EXIT. | ||
Line 163: | Line 175: | ||
lo_address TYPE REF TO cl_cam_address_bcs. | lo_address TYPE REF TO cl_cam_address_bcs. | ||
− | DATA : | + | DATA : l_xstring TYPE xstring, "image in XSTRING |
− | |||
− | |||
− | |||
− | |||
DATA: l_subject TYPE so_obj_des, | DATA: l_subject TYPE so_obj_des, | ||
Line 182: | Line 190: | ||
CREATE OBJECT lo_mime_helper. | CREATE OBJECT lo_mime_helper. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
* crear via trn. se80 => Repository MIME, SAP=>PUBLIC | * crear via trn. se80 => Repository MIME, SAP=>PUBLIC | ||
− | + | cl_mime_repository_api=>get_api( )->get( | |
− | EXPORTING | + | EXPORTING i_url = '/SAP/PUBLIC/notificacion2.jpg' "image path |
− | + | IMPORTING e_content = l_xstring | |
− | IMPORTING | + | EXCEPTIONS parameter_missing = 1 |
− | + | error_occured = 2 | |
− | + | not_found = 3 | |
− | + | permission_failure = 4 | |
− | EXCEPTIONS | + | OTHERS = 5 ). |
− | |||
− | |||
− | |||
− | |||
− | |||
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' | CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' | ||
Line 234: | Line 232: | ||
( LINE = '</HEAD>') | ( LINE = '</HEAD>') | ||
( LINE = '<BODY>') | ( LINE = '<BODY>') | ||
− | ( | + | ( line = '<p class=Default align=center>') |
+ | ( line = '<IMG alt="[image]" src="cid:mi_imagen.jpg"/>') | ||
+ | ( line = '</p>') | ||
( LINE = '<H1>Rechazo el Pago</H1>') | ( LINE = '<H1>Rechazo el Pago</H1>') | ||
( LINE = 'Estimado Representante de la Empresa <P>') | ( LINE = 'Estimado Representante de la Empresa <P>') | ||
Line 296: | Line 296: | ||
ENDTRY. | ENDTRY. | ||
− | l_mail_address = 'pablo.tapia@ | + | l_mail_address = 'pablo.tapia@sapwiki.cl'. |
TRY. | TRY. | ||
Line 354: | Line 354: | ||
COMMIT WORK. | COMMIT WORK. | ||
ENDIF.</nowiki> | ENDIF.</nowiki> | ||
+ | |||
+ | ==Subject largo, method set_message_subject== | ||
+ | <nowiki> | ||
+ | TRY. | ||
+ | * -------- create persistent send request ------------------------ | ||
+ | send_request = cl_bcs=>create_persistent( ). | ||
+ | * -------- create and set document with attachment --------------- | ||
+ | document = cl_document_bcs=>create_document( | ||
+ | i_type = 'HTM' | ||
+ | i_text = ut_text | ||
+ | * i_length = '12' | ||
+ | i_subject = lv_subject ). | ||
+ | send_request->set_message_subject( ip_subject = uv_subject ). "Subject largo | ||
+ | </nowiki> | ||
+ | |||
+ | ==[[SAP_ABAP_HTML_EX01|Ejemplo de HTML para envío de correo con imagen y link]]== | ||
+ | ==Programa DEMO: SF_XSF_DEMO_MAIL== | ||
+ | ==SAP Note 1915614 - Dump or error message occurs while SAPoffice object (user, folder, document, attachment) should be created: SAPSQL_ARRAY_INSERT_DUPREC - DBSQL_DUPLICATE_KEY_ERROR == |
Latest revision as of 22:47, 26 July 2024
Contents
- 1 EJEMPLO 1
- 2 Ejemplo 2 Enviar email con imagenes
- 3 Subject largo, method set_message_subject
- 4 Ejemplo de HTML para envío de correo con imagen y link
- 5 Programa DEMO: SF_XSF_DEMO_MAIL
- 6 SAP Note 1915614 - Dump or error message occurs while SAPoffice object (user, folder, document, attachment) should be created: SAPSQL_ARRAY_INSERT_DUPREC - DBSQL_DUPLICATE_KEY_ERROR
EJEMPLO 1
r_subrc = zcl_hcm_class=>send_mail( i_correouser = lt_correos[] i_text = lt_text[] i_subject = l_subject i_sender = 'Remuneraciones@sapwiki.cl' i_copy = lt_copy ). METHOD send_mail. *I_CORREOUSER Importing Type BCSY_SMTPA *I_TEXT Importing Type BCSY_TEXT *I_SUBJECT Importing Type SO_OBJ_DES *I_MAILHEX Importing Type SOLIX_TAB op *I_ATTACH_NAME Importing Type STRING op *I_SENDER Importing Type AD_SMTPADR op *I_COPY Importing Type BCSY_SMTPA op *R_SUBRC Returning Type SYST_SUBRC ********************************************************************** DATA: send_request TYPE REF TO cl_bcs, text TYPE bcsy_text, binary_content TYPE solix_tab, document TYPE REF TO cl_document_bcs, sender TYPE REF TO cl_sapuser_bcs, recipient TYPE REF TO if_recipient_bcs, bcs_exception TYPE REF TO cx_bcs, sent_to_all TYPE os_boolean, document_data TYPE sofolenti1, doc_id TYPE sofolenti1-doc_id, cont_text TYPE soli_tab, attachment TYPE REF TO if_document_bcs, lv_attach_name TYPE sood-objdes, l_sender TYPE REF TO if_sender_bcs, l_message TYPE string, l_correouser TYPE ad_smtpadr, l_address_name TYPE ad_smtpadr. DATA: ld_addr TYPE adr6-smtp_addr, internet_sender TYPE REF TO if_sender_bcs. DATA: gv_dummy(160). text[] = i_text[]. TRY. * -------- create persistent send request ------------------------ send_request = cl_bcs=>create_persistent( ). * -------- create and set document with attachment --------------- * create document from internal table with text document = cl_document_bcs=>create_document( i_type = 'HTM' i_text = i_text * i_length = '12' i_subject = i_subject ). * add attachment IF i_attach_name <> space. lv_attach_name = i_attach_name. CALL METHOD document->add_attachment EXPORTING i_attachment_type = 'BIN' i_attachment_subject = lv_attach_name i_att_content_hex = i_mailhex. ENDIF. * add document to send request CALL METHOD send_request->set_document( document ). * --------- add recipient (e-mail address) ----------------------- * create recipient LOOP AT i_correouser INTO l_correouser. l_address_name = l_correouser. recipient = cl_cam_address_bcs=>create_internet_address( l_address_name ). * add recipient with its respective attributes to send request CALL METHOD send_request->add_recipient EXPORTING i_recipient = recipient i_express = 'X'. ENDLOOP. LOOP AT i_copy INTO l_correouser. l_address_name = l_correouser. recipient = cl_cam_address_bcs=>create_internet_address( l_address_name ). * add recipient with its respective attributes to send request CALL METHOD send_request->add_recipient EXPORTING i_recipient = recipient i_express = 'X' i_copy = abap_true. ENDLOOP. ** Crear 'Enviado por:" * IF p_from IS NOT INITIAL. * CALL METHOD cl_cam_address_bcs=>create_internet_address * EXPORTING * i_address_string = p_from * i_address_name = p_from_name * RECEIVING * result = l_sender. * * send_request->set_sender( l_sender ). * CLEAR l_sender. * ENDIF. * --------- 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. IF i_sender IS NOT INITIAL. ld_addr = i_sender. "'Remuneraciones@sapwiki.cl'. internet_sender = cl_cam_address_bcs=>create_internet_address( i_address_string = ld_addr ). CALL METHOD send_request->set_sender EXPORTING i_sender = internet_sender. ENDIF. * ---------- send document --------------------------------------- send_request->send_request->set_link_to_outbox( 'X' ). CALL METHOD send_request->send( EXPORTING i_with_error_screen = 'X' RECEIVING result = sent_to_all ). IF sent_to_all = 'X'. * WRITE text-003. ENDIF. COMMIT WORK. r_subrc = 0. * ----------------------------------------------------------- * * exception handling * ----------------------------------------------------------- * * replace this very rudimentary exception handling * * with your own one !!! * ----------------------------------------------------------- CATCH cx_bcs INTO bcs_exception. r_subrc = 4. IF NOT bcs_exception->msgid IS INITIAL AND NOT bcs_exception->msgty IS INITIAL AND NOT bcs_exception->msgno IS INITIAL. MESSAGE ID bcs_exception->msgid TYPE bcs_exception->msgty NUMBER bcs_exception->msgno WITH bcs_exception->msgv1 bcs_exception->msgv2 bcs_exception->msgv3 bcs_exception->msgv4 into gv_dummy. EXIT. ENDTRY. ENDMETHOD.
Ejemplo 2 Enviar email con imagenes
REPORT zenvio_mail_html. DATA: lt_html TYPE soli_tab, ls_html TYPE soli, lt_solix_tab TYPE solix_tab, ls_htmlx TYPE solix, l_url TYPE so_text255, l_file_length TYPE i, l_string TYPE string. DATA: lo_bcs TYPE REF TO cl_bcs, lo_doc_bcs TYPE REF TO cl_document_bcs, lo_mime_helper TYPE REF TO cl_gbt_multirelated_service, lo_recipient TYPE REF TO if_recipient_bcs, lo_address TYPE REF TO cl_cam_address_bcs. DATA : l_xstring TYPE xstring, "image in XSTRING DATA: l_subject TYPE so_obj_des, l_username TYPE uname, l_mail_address TYPE ad_smtpadr. DATA: l_send_exception TYPE REF TO cx_root, l_reason TYPE string. * Attach image to HTML body DATA: l_filename TYPE string, l_content_id TYPE string. "for HTML content DATA : l_obj_len TYPE so_obj_len. CREATE OBJECT lo_mime_helper. * crear via trn. se80 => Repository MIME, SAP=>PUBLIC cl_mime_repository_api=>get_api( )->get( EXPORTING i_url = '/SAP/PUBLIC/notificacion2.jpg' "image path IMPORTING e_content = l_xstring EXCEPTIONS parameter_missing = 1 error_occured = 2 not_found = 3 permission_failure = 4 OTHERS = 5 ). CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = l_xstring IMPORTING output_length = l_file_length TABLES binary_tab = lt_solix_tab. * Attach image to HTML body l_filename = 'mi_imagen.jpg'. l_content_id = 'mi_imagen.jpg'. l_obj_len = l_file_length. CALL METHOD lo_mime_helper->add_binary_part EXPORTING content = lt_solix_tab " Xstring in table form filename = l_filename " file name to be given to image extension = 'JPG' " type of file description = 'Graphic in JPG format' " description content_type = 'image/jpg' " content type / Mime type. If mime type not present in system then need to add through tcode : SMW0 length = l_obj_len " length of image content_id = l_content_id. " content id would be used in html part ********************************************************************** * crear HTML ********************************************************************** lt_html = value #( ( LINE = '<!DOCTYPE html>') ( LINE = '<HTML>') ( LINE = '<HEAD>') ( LINE = '<TITLE>Mi titulo</TITLE>') ( LINE = '</HEAD>') ( LINE = '<BODY>') ( line = '<p class=Default align=center>') ( line = '<IMG alt="[image]" src="cid:mi_imagen.jpg"/>') ( line = '</p>') ( LINE = '<H1>Rechazo el Pago</H1>') ( LINE = 'Estimado Representante de la Empresa <P>') ( LINE = 'Ud. esta rechazado <P>') ( LINE = '</BODY></HTML>') ). BREAK-POINT. ********************************************************************** * ********************************************************************** TRY. l_subject = 'Rechazo'(t01). CALL METHOD lo_mime_helper->set_main_html EXPORTING content = lt_html " filename = 'sap.htm' " file name to be given to image description = 'Imagen'. " description. " content id would be used in html part lo_doc_bcs = cl_document_bcs=>create_from_multirelated( i_subject = l_subject i_multirel_service = lo_mime_helper ). CATCH cx_document_bcs INTO l_send_exception. * error handling * write: / 'Fehler in cl_document_bcs=>create_from_multirelated()'(001). l_reason = l_send_exception->get_text( ). WRITE: / l_reason. EXIT. CATCH cx_bcom_mime INTO l_send_exception. * error handling * write: / 'Fehler in cl_document_bcs=>create_from_multirelated()'(002). l_reason = l_send_exception->get_text( ). WRITE: / l_reason. EXIT. CATCH cx_gbt_mime INTO l_send_exception. * error handling * write: / 'Fehler in cl_document_bcs=>create_from_multirelated()'(003). l_reason = l_send_exception->get_text( ). WRITE: / l_reason. EXIT. ENDTRY. * create send_request TRY. lo_bcs = cl_bcs=>create_persistent( ). CATCH cx_send_req_bcs INTO l_send_exception. * error handling * write: / 'Fehler in cl_bcs=>create_persistent()'(004). l_reason = l_send_exception->get_text( ). WRITE: / l_reason. EXIT. ENDTRY. TRY. lo_bcs->set_document( i_document = lo_doc_bcs ). CATCH cx_send_req_bcs INTO l_send_exception. * error handling * write: / 'Fehler in <cl_bcs>->set_document()'(005). l_reason = l_send_exception->get_text( ). WRITE: / l_reason. EXIT. ENDTRY. l_mail_address = 'pablo.tapia@sapwiki.cl'. TRY. lo_address = cl_cam_address_bcs=>create_internet_address( l_mail_address ). CATCH cx_address_bcs. * "Error al crear objeto de destinatario RETURN. ENDTRY. * TRY. lo_bcs->add_recipient( lo_address ). CATCH cx_send_req_bcs. * "Error al agregar destinatario a la lista RETURN. ENDTRY. * --------- 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. DATA: ld_addr TYPE adr6-smtp_addr, lo_internet_sender TYPE REF TO if_sender_bcs. l_mail_address = 'ejecutivo@sapwiki.cl'. TRY. lo_internet_sender = cl_cam_address_bcs=>create_internet_address( i_address_string = l_mail_address ). CATCH cx_address_bcs . ENDTRY. TRY. CALL METHOD lo_bcs->set_sender EXPORTING i_sender = lo_internet_sender. CATCH cx_send_req_bcs . ENDTRY. *--------------------------------------------------------------------* TRY. lo_bcs->set_send_immediately( abap_true ). CATCH cx_send_req_bcs. * "Error al marcar el correo como envio inmediato RETURN. ENDTRY. * TRY. "Enviar con error en pantalla DATA(l_result) = lo_bcs->send( abap_true ). CATCH cx_send_req_bcs. * "Error al setear el envío de correo RETURN. ENDTRY. IF l_result EQ abap_true. "Se confirma el envío, es necesario. COMMIT WORK. ENDIF.
Subject largo, method set_message_subject
TRY. * -------- create persistent send request ------------------------ send_request = cl_bcs=>create_persistent( ). * -------- create and set document with attachment --------------- document = cl_document_bcs=>create_document( i_type = 'HTM' i_text = ut_text * i_length = '12' i_subject = lv_subject ). send_request->set_message_subject( ip_subject = uv_subject ). "Subject largo