Send Email With

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

METHOD send_email.

DATA: lt_tline TYPE TABLE OF tline,


lt_objtxt TYPE TABLE OF solisti1,
lt_mail_content TYPE TABLE OF soli,
lt_binary_content TYPE TABLE OF solix.

DATA: ls_tline LIKE LINE OF lt_tline,


ls_objtxt LIKE LINE OF lt_objtxt,
ls_mail_content TYPE solisti1.

DATA: lr_send_request TYPE REF TO cl_bcs,


lr_document TYPE REF TO cl_document_bcs,
lr_doc TYPE REF TO cl_document_bcs,
lr_sender TYPE REF TO cl_sapuser_bcs,
lr_recipient TYPE REF TO if_recipient_bcs,
lr_bcs_exception TYPE REF TO cx_bcs,
lr_send_exception TYPE REF TO cx_send_req_bcs,
lr_doc_exception TYPE REF TO cx_document_bcs.

DATA: lv_filename TYPE so_obj_des,


lv_att_type TYPE so_obj_tp,
lv_doc_len TYPE so_obj_len,
lv_mail_subj TYPE char50,
lv_rcv_email TYPE ad_smtpadr,
lv_subject TYPE string,
lv_string TYPE string,
lv_size TYPE so_obj_len,
lv_result TYPE sy-binpt,
lv_msg TYPE string.

*---> Fetch mail body content


CALL FUNCTION 'READ_TEXT'
EXPORTING
id = c_id_st
language = sy-langu
name = c_mail_body
object = c_obj_text
TABLES
lines = lt_tline
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc NE 0.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = c_id_st
language = c_spras_e
name = c_mail_body
object = c_obj_text
TABLES
lines = lt_tline
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc NE 0.
MESSAGE TEXT-w04 TYPE c_s.
ENDIF.
ENDIF.

IF NOT lt_tline[] IS INITIAL.


LOOP AT lt_tline INTO ls_tline.
ls_objtxt-line = ls_tline-tdline.
APPEND ls_objtxt TO lt_objtxt.
CLEAR: ls_tline,
ls_objtxt.
ENDLOOP.
ENDIF.

TRY.
*---> Create persistent send request
lr_send_request = cl_bcs=>create_persistent( ).
lt_mail_content[] = lt_objtxt[].

*---> Get the length of the Document


DESCRIBE TABLE lt_mail_content LINES DATA(lv_lines_cnt).
READ TABLE lt_mail_content INTO ls_mail_content
INDEX lv_lines_cnt.
IF sy-subrc EQ 0.
lv_doc_len = ( ( lv_lines_cnt - 1 ) * c_255 )
+ strlen( ls_mail_content ).
ENDIF.

*---> Subject of the mail


lv_mail_subj = TEXT-m01.

*--> Create Document


lr_document = cl_document_bcs=>create_document(
i_type = c_raw
i_text = lt_mail_content
i_length = lv_doc_len
i_subject = lv_mail_subj
i_language = sy-langu ).

TRY.
*---> Subject of the mail
lv_subject = TEXT-m01.
lr_doc = lr_document.

*---> Set the Message Subject


CALL METHOD lr_send_request->set_message_subject
EXPORTING
ip_subject = lv_subject.
CATCH cx_send_req_bcs INTO lr_send_exception.

CLEAR lv_msg.
lv_msg = lr_send_exception->get_text( ).

IF lv_msg IS NOT INITIAL.


MESSAGE lv_msg TYPE c_e.
ENDIF.

ENDTRY.

*---> Add document to send request


TRY.
CALL METHOD lr_send_request->set_document( lr_document ).
CATCH cx_send_req_bcs INTO lr_send_exception.

CLEAR lv_msg.
lv_msg = lr_send_exception->get_text( ).

IF lv_msg IS NOT INITIAL.


MESSAGE lv_msg TYPE c_e.
ENDIF.
ENDTRY.

*---> To frame the attachments for the mail


IF NOT gt_final[] IS INITIAL.
CONCATENATE TEXT-f01 c_tab
TEXT-f02 c_tab
TEXT-f03 c_tab
TEXT-f04 c_tab
TEXT-f05 c_tab
TEXT-f06 c_tab
TEXT-f07 c_tab
TEXT-f08 c_tab
TEXT-f09 c_tab
TEXT-f10 c_tab
TEXT-f11 c_cr INTO lv_string.

LOOP AT gt_final INTO DATA(ls_final).


CONCATENATE lv_string ls_final-bukrs INTO lv_string.
CONCATENATE lv_string
ls_final-gjahr
ls_final-belnr
ls_final-budat
ls_final-bldat
ls_final-cpudt
ls_final-cputm
ls_final-usnam
ls_final-tcode
ls_final-blart
ls_final-posting INTO lv_string SEPARATED BY c_tab.
CONCATENATE lv_string c_cr INTO lv_string.
CLEAR ls_final.
ENDLOOP.
ENDIF.

*---> Convert string to Excel format


TRY.
cl_bcs_convert=>string_to_solix(
EXPORTING
iv_string = lv_string
* iv_codepage = '4103' "suitable for MS Excel
* iv_add_bom = 'X' "for other doc types
IMPORTING
et_solix = lt_binary_content
ev_size = lv_size ).
CATCH cx_bcs INTO lr_bcs_exception.

CLEAR lv_msg.
lv_msg = lr_bcs_exception->get_text( ).

IF lv_msg IS NOT INITIAL.


MESSAGE lv_msg TYPE c_e.
ENDIF.

* MESSAGE e445(so).
ENDTRY.

*---> Subject of the Attachment


CONCATENATE TEXT-a01 sy-datum+4(2) sy-datum(4) INTO lv_filename SEPARATED
BY space.

*---> Format of the Delivery items Attachment


lv_att_type = c_att_type_xls.

IF NOT lt_binary_content[] IS INITIAL.


TRY.
*---> Add Attachment to the Document
CALL METHOD lr_doc->add_attachment
EXPORTING
i_attachment_type = lv_att_type
i_attachment_subject = lv_filename
i_attachment_size = lv_size
i_att_content_hex = lt_binary_content.
CATCH cx_document_bcs INTO lr_doc_exception.

CLEAR lv_msg.
lv_msg = lr_doc_exception->get_text( ).

IF lv_msg IS NOT INITIAL.


MESSAGE lv_msg TYPE c_e.
ENDIF.

ENDTRY.
ENDIF.

*---> Set sender


lr_sender = cl_sapuser_bcs=>create( sy-uname ).
TRY.
CALL METHOD lr_send_request->set_sender
EXPORTING
i_sender = lr_sender.
CATCH cx_send_req_bcs INTO lr_send_exception.

CLEAR lv_msg.
lv_msg = lr_send_exception->get_text( ).

IF lv_msg IS NOT INITIAL.


MESSAGE lv_msg TYPE c_e.
ENDIF.
ENDTRY.
*---> Add the recipients to the Send mail
LOOP AT gt_fixdata INTO DATA(ls_fixdata)
WHERE zdataname = c_email.
lv_rcv_email = ls_fixdata-zdata.

IF NOT lv_rcv_email IS INITIAL.


lr_recipient = cl_cam_address_bcs=>create_internet_address(
lv_rcv_email ).
TRY.
CALL METHOD lr_send_request->add_recipient
EXPORTING
i_recipient = lr_recipient
i_express = c_x.
CATCH cx_send_req_bcs INTO lr_send_exception.

CLEAR lv_msg.
lv_msg = lr_send_exception->get_text( ).

IF lv_msg IS NOT INITIAL.


MESSAGE lv_msg TYPE c_e.
ENDIF.
ENDTRY.
ENDIF.
ENDLOOP.

*---> Send Email


TRY.
CALL METHOD lr_send_request->send(
EXPORTING
i_with_error_screen = c_x
RECEIVING
result = lv_result ).
CATCH cx_send_req_bcs INTO lr_send_exception.

CLEAR lv_msg.
lv_msg = lr_send_exception->get_text( ).

IF lv_msg IS NOT INITIAL.


MESSAGE lv_msg TYPE c_e.
ENDIF.
ENDTRY.

IF lv_result = 'X'.
MESSAGE TEXT-s03 TYPE c_s.
ENDIF.

CATCH cx_bcs INTO lr_bcs_exception.

CLEAR lv_msg.
lv_msg = lr_bcs_exception->get_text( ).

IF lv_msg IS NOT INITIAL.


MESSAGE lv_msg TYPE c_e.
ENDIF.

IF lv_result NE 'X'.
MESSAGE TEXT-e02 TYPE c_e.
ENDIF.
ENDTRY.

COMMIT WORK.

ENDMETHOD.

You might also like