Hoy vamos a hablar de un importante en cuanto a los desarrollos. El cual es permitir enviar correo electrónico desde un sistema Sap al exterior.
Nota: hemos de tener un servidor de correo interno (propio) o externo que permita el reenvió SMTP.
Existe dos formas de realizar el envió, en formato normal tipo texto o en formato html. Este último por ejemplo se utiliza para poder enviar imágenes como el logo de la empresa, etc.
1. Código en formato HTML
Nota: hemos de tener un servidor de correo interno (propio) o externo que permita el reenvió SMTP.
Existe dos formas de realizar el envió, en formato normal tipo texto o en formato html. Este último por ejemplo se utiliza para poder enviar imágenes como el logo de la empresa, etc.
1. Código en formato HTML
*----------------------------------------------------------------------* * ASUNTO *----------------------------------------------------------------------* gs_doc_data-obj_langu = sy-langu. gs_doc_data-obj_name = 'SAPRPT'. LV_TEXT3 = 'Documento de aceptacion'. gs_doc_data-obj_descr = LV_TEXT3. gs_doc_data-sensitivty = 'F'. *----------------------------------------------------------------------* * CUERPO DEL MENSAJE *----------------------------------------------------------------------* APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<html>'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<head>'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<meta http-equiv="Content-Type" content="text/html;'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<charset="iso-8859-1">'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '</head>'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<body>'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = 'Estimado Proveedor:'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<br> </br>'. LV_TEXT1 = 'La orden de servicio con N°'. LV_TEXT2 = ', ha sido aceptado con el número de documento'. CONCATENATE LV_TEXT1 LV_EBELN LV_TEXT2 LV_LFBNR INTO LV_MENSAJE SEPARATED BY SPACE. CONCATENATE LV_MENSAJE '.' INTO LV_MENSAJE2. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = LV_MENSAJE2. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = ''. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<br> </br>'. LV_TEXT4 = 'Para efectuar la entrega de la factura, favor acercarse a la Ventanilla Única adjuntando una copia de la orden de compra, el original de la factura comercial y'. LV_TEXT5 = 'el número de documento de aceptación.'. CONCATENATE LV_TEXT4 LV_TEXT5 INTO LV_MENSAJE1 SEPARATED BY SPACE. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = LV_MENSAJE1. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = ''. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<br> </br>'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = 'El horario para recepción de facturas será de lunes a viernes.'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<br> </br>'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = 'Atentamente,'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<br> </br>'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = 'Departamento de LogÃstica'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '<br> </br>'. DATA LV_IMAGEN TYPE STRING. LV_IMAGEN = '<DIV> <IMG SRC="https://3vxbpa.livefilestore.com/imagen.jpg"> </IMG</DIV>'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = LV_IMAGEN. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '</body>'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = '</html>'. *----------------------------------------------------------------------* * DESTINATARIOS *----------------------------------------------------------------------* *A APPEND INITIAL LINE TO gt_receivers ASSIGNING <gt_receivers>. <gt_receivers>-receiver = LV_SMTP_ADDR. "Nombre de destinatario mensaje. <gt_receivers>-rec_type = 'U'. "Tipo de destinatario, en caso de se "envÃa a un correo convencional. <gt_receivers>-express = 'X'. "Enviar: En forma de documento urgente. <gt_receivers>-notif_ndel = 'X'. "Acuse de Recibo. *CC APPEND INITIAL LINE TO gt_receivers ASSIGNING <gt_receivers>. <gt_receivers>-receiver = LV_SMTP_ADDR1. "Nombre de destinatario mensaje. <gt_receivers>-rec_type = 'U'. "Tipo de destinatario, en caso de se "envÃa a un correo convencional. <gt_receivers>-express = 'X'. "Enviar: En forma de documento urgente. <gt_receivers>-notif_ndel = 'X'. "Acuse de Recibo. <gt_receivers>-copy = 'X'. "Con copia al siguiente destinatario *----------------------------------------------------------------------------* * EJECUTANDO: SO_NEW_DOCUMENT_SEND_API1 *----------------------------------------------------------------------------* CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1' EXPORTING document_data = gs_doc_data "Asunto del mensaje document_type = 'HTM' put_in_outbox = 'X' "Deja una copia en la salida’ commit_work = 'X' TABLES object_content = gt_obj_content "Cuerpo del mensaje receivers = gt_receivers "Destinatarios 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. WAIT UP TO 2 SECONDS. IF sy-subrc EQ 0. WRITE: 'e-mail enviado exitósamente'. ELSE. WRITE: 'error en envió de e-mail'. ENDIF.
2. Código en formato de texto
*----------------------------------------------------------------------* * ASUNTO *----------------------------------------------------------------------* gs_doc_data-obj_langu = sy-langu. gs_doc_data-obj_name = 'SAPRPT'. LV_TEXT3 = 'Documento de aceptacion'. gs_doc_data-obj_descr = LV_TEXT3. gs_doc_data-sensitivty = 'F'. *----------------------------------------------------------------------* * CUERPO DEL MENSAJE *----------------------------------------------------------------------* APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = 'Estimado Proveedor:'. LV_TEXT1 = 'La orden de servicio con N°'. LV_TEXT2 = ', ha sido aceptado con el número de documento'. CONCATENATE LV_TEXT1 LV_EBELN LV_TEXT2 LV_LFBNR INTO LV_MENSAJE SEPARATED BY SPACE. CONCATENATE LV_MENSAJE '.' INTO LV_MENSAJE2. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = LV_MENSAJE2. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = ' '. LV_TEXT4 = 'Para efectuar la entrega de la factura, favor acercarse a la Ventanilla Única adjuntando una copia de la orden de compra, el original de la factura comercial y'. LV_TEXT5 = 'el número de documento de aceptación.'. CONCATENATE LV_TEXT4 LV_TEXT5 INTO LV_MENSAJE1 SEPARATED BY SPACE. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = LV_MENSAJE1. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-line = ' '. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = 'El horario para recepción de facturas será de lunes a viernes.'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = 'Atentamente,'. APPEND INITIAL LINE TO gt_obj_content ASSIGNING <gt_obj_content>. <gt_obj_content>-LINE = 'Departamento de LogÃstica'. *----------------------------------------------------------------------* * DESTINATARIOS *----------------------------------------------------------------------* *A APPEND INITIAL LINE TO gt_receivers ASSIGNING <gt_receivers>. <gt_receivers>-receiver = LV_SMTP_ADDR. "Nombre de destinatario mensaje. <gt_receivers>-rec_type = 'U'. "Tipo de destinatario, en caso de se "envÃa a un correo convencional. <gt_receivers>-express = 'X'. "Enviar: En forma de documento urgente. <gt_receivers>-notif_ndel = 'X'. "Acuse de Recibo. *CC APPEND INITIAL LINE TO gt_receivers ASSIGNING <gt_receivers>. <gt_receivers>-receiver = LV_SMTP_ADDR1. "Nombre de destinatario mensaje. <gt_receivers>-rec_type = 'U'. "Tipo de destinatario, en caso de se "envÃa a un correo convencional. <gt_receivers>-express = 'X'. "Enviar: En forma de documento urgente. <gt_receivers>-notif_ndel = 'X'. "Acuse de Recibo. <gt_receivers>-copy = 'X'. "Con copia al siguiente destinatario *----------------------------------------------------------------------------* * EJECUTANDO: SO_NEW_DOCUMENT_SEND_API1 *----------------------------------------------------------------------------* CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1' EXPORTING document_data = gs_doc_data "Asunto del mensaje document_type = 'RAW' put_in_outbox = 'X' "Deja una copia en la salida’ commit_work = 'X' TABLES object_content = gt_obj_content "Cuerpo del mensaje receivers = gt_receivers "Destinatarios 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. WAIT UP TO 2 SECONDS. IF sy-subrc EQ 0. WRITE: 'e-mail enviado exitósamente'. ELSE. WRITE: 'error en envió de e-mail'. ENDIF.
Me gusto mucho el post acerca del envio de Correos, esta bien explicado.
ResponderBorrarGracias, trato de ser bien especÃfico en el proceso, para que no quede dudas en su ejecución.
BorrarSe puede recibir la respuesta de los mails en sap
ResponderBorrarTe refieres, si el correo fue enviado? Te recomiendo que ingreses a la transaccion SOST. Con ella, puedes ver el estado de tu correo si se envio o hubo problemas.
BorrarAdemás, te sugiero la tx SCOT que analiza todo el estado.
Tengo una consulta que puede tener que ver con este tema, tengo un smartforms que solo se envÃa por correo solo al primer destinatario y no al resto. Cómo crees que pueda solucionarlo de manera tal que se envÃe a todos los destinatarios?
ResponderBorrarTu problema puede deberse a la función que estas usando para enviar el correo. Te recomiendo SO_NEW_DOCUMENT_ATT_SEND_API1 permite cargar varios destinatarios.
BorrarTe envió una sentencia de código como ejemplo:
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = doc_chng
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = lt_objpack
object_header = lt_objhead
contents_bin = lt_objbin
contents_txt = lt_objtxt
receivers = lt_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
operation_no_authorization = 4
OTHERS = 99.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
donde en la tabla LT_RECLIST le paso los destinatarios
(la completé de esta manera). Seguramente vas a tener qe cambiar el campo REC_TYPE proqe yo use una lista de distribución.
LOOP AT lt_mails INTO le_mails.
lt_reclist-receiver = le_mails-grupo. "NOMBRE DE LA LISTA
lt_reclist-express = 'X'.
lt_reclist-rec_type = 'C'. "Usa lista de distribución.
lt_reclist-copy = 'X'.
APPEND lt_reclist.
ENDLOOP.
Me avisas.