SAP ABAP EMAIL
From SapWiki
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
*I_ATTACH_NAME Importing Type STRING
*I_SENDER Importing Type AD_SMTPADR
*I_COPY Importing Type BCSY_SMTPA
*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.
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.
EXIT.
ENDTRY.
ENDMETHOD.