PROGRAM TO SEND MAIL FORM SAP| Program to send mail from SAP WITH ATTACHMENT|FUNCTION MODULE USED FOR SEND MAIL FROM SAP
Here we have a requirement to send attachment of invoice whenever is Purchase Order released, So we had create a method using badi (ZCL_IM_ME_PROCESS_PO_CUST IF_EX_ME_PROCESS_PO_CUST~POST) and place the below example code in our method to send mail from sap with attachment.

Table of Contents
PROGRAM TO SEND MAIL FROM SAP
***************PROGRAM TO SEND MAIL FROM SAP*********
********PROGRAM TO SEND MAIL FROM SAP WITH ATTACHMENT********
********FUNCTION MODULE USED FOR SEND MAIL FROM SAP*************
DATA : ls_mepoheader TYPE mepoheader.
DATA : ls_nast TYPE nast,
ls_doc TYPE meein_purchase_doc_print,
ls_ex_nast TYPE nast,
ls_addr_key TYPE addr_key,
l_background TYPE char30,
ls_control_param TYPE ssfctrlop,
ls_composer_param TYPE ssfcompop,
ls_recipient TYPE swotobjid,
ls_sender TYPE swotobjid,
lf_retcode TYPE sy-subrc,
lf_device TYPE tddevice,
ls_itcpo TYPE itcpo,
lf_fm_name TYPE rs38l_fnam,
lv_druvo TYPE t166k-druvo,
lv_xfz TYPE char1,
lv_gst_v TYPE stcd3,
lt_xkomk TYPE TABLE OF komk,
it_item_gst TYPE zpo_item_gst,
ls_job_info TYPE ssfcrescl,
lt_otf TYPE tsfotf,
lt_content_txt TYPE soli_tab,
lt_content_hex TYPE solix_tab,
ls_transfer_bin TYPE sx_boolean,
ls_objhead TYPE soli_tab,
lv_len_in TYPE so_obj_len,
g_mail_subject TYPE so_obj_des,
lv_att_name TYPE sood-objdes,
it_mail_id TYPE TABLE OF zibs_mail,
it_body TYPE soli_tab,
lv_message TYPE string,
ls_toa_dara TYPE toa_dara,
ls_arc_params TYPE arc_params,
lt_pgr TYPE zpo_cc_mail.
ls_mepoheader = im_header->get_data( ).
if ls_mepoheader-frgke eq 'R'.
SELECT SINGLE * FROM ekko INTO @DATA(ls_ekko) WHERE ebeln = @im_ebeln.
IF sy-subrc EQ 0.
ls_nast-mandt = sy-mandt.
ls_nast-kappl = 'EF'.
ls_nast-objky = im_ebeln.
ls_nast-spras = sy-langu.
ls_nast-parnr = ls_ekko-lifnr.
ls_nast-parvw = 'LF'.
ls_nast-erdat = ls_ekko-aedat.
ls_nast-nacha = '1'.
ls_nast-vsztp = '3'.
ls_nast-usnam = sy-uname.
ls_nast-ldest = 'LP01'.
ls_nast-objtype = 'BUS2012'.
ENDIF .
CALL FUNCTION 'ME_READ_PO_FOR_PRINTING'
EXPORTING
ix_nast = ls_nast
ix_screen = 'X'
IMPORTING
doc = ls_doc
ex_nast = ls_ex_nast
CHANGING
cx_druvo = lv_druvo
* CX_FROM_MEMORY = 'X'
.
IF ls_mepoheader-frgke = 'R'.
l_background = 'APPROVED_TILTED_COPY1'.
ELSE.
l_background = 'BACKGROUND_NOTAPPROVED1'."'NOT_APPROVED_TILTED1'.
ENDIF.
READ TABLE ls_doc-xekpo WITH KEY loekz = space TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
MESSAGE 'No printout found' TYPE 'E'.
EXIT.
ENDIF.
IF ls_nast-adrnr IS INITIAL.
SELECT SINGLE lifnr ,adrnr,name1 INTO @DATA(ls_lfa1) FROM lfa1 WHERE lifnr = @ls_ekko-lifnr.
IF sy-subrc EQ 0.
ls_addr_key-addrnumber = ls_lfa1-adrnr.
ENDIF .
SELECT lifnr ,name1,smtp_addr
FROM lfa1 AS l
INNER JOIN adr6 AS ad
ON l~adrnr = ad~addrnumber
AND ad~flgdefault = @abap_true
INTO TABLE @DATA(lt_vndr_email)
WHERE lifnr = @ls_ekko-lifnr.
ENDIF .
CALL FUNCTION 'WFMC_PREPARE_SMART_FORM'
EXPORTING
pi_nast = ls_nast
pi_addr_key = ls_addr_key
pi_repid = sy-repid
IMPORTING
pe_returncode = lf_retcode
pe_itcpo = ls_itcpo
pe_device = lf_device
pe_recipient = ls_recipient
pe_sender = ls_sender.
IF lf_retcode = 0.
MOVE-CORRESPONDING ls_itcpo TO ls_composer_param.
ls_control_param-device = lf_device.
ls_control_param-no_dialog = 'X'.
ls_control_param-preview = abap_true.
ls_control_param-langu = ls_nast-spras.
ls_control_param-getotf = ls_itcpo-tdgetotf.
ls_composer_param-tdnoprev = 'X'.
ls_composer_param-tddest = 'LP01'.
ls_composer_param-tdnoprint = 'X'.
ls_control_param-preview = 'X'.
ls_control_param-getotf = 'X'.
ls_control_param-no_dialog = 'X'.
ls_control_param-langu = sy-langu.
ENDIF.
IF ls_doc-xtkomv IS INITIAL.
SELECT * INTO TABLE ls_doc-xtkomv FROM konv
WHERE knumv = ls_doc-xekko-knumv.
ENDIF.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMM_PO_PRINT'
IMPORTING
fm_name = lf_fm_name
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
"----- error handling ------------
* ent_retco = sy-subrc.
IF sy-subrc = 1.
MESSAGE e001(/smb40/ssfcomposer).
ENDIF.
IF sy-subrc = 2.
MESSAGE e002(/smb40/ssfcomposer).
ENDIF.
* PERFORM protocol_update_i.
ENDIF.
SELECT *
FROM j_1imocomp
INTO TABLE @DATA(it_excise)
FOR ALL ENTRIES IN @ls_doc-xekpo
WHERE werks = @ls_doc-xekpo-werks.
CALL FUNCTION lf_fm_name
EXPORTING
archive_index = ls_toa_dara
archive_parameters = ls_arc_params
control_parameters = ls_control_param
mail_recipient = ls_recipient
mail_sender = ls_sender
output_options = ls_composer_param
is_ekko = ls_doc-xekko
user_settings = ' ' "Disable User Printer
is_pekko = ls_doc-xpekko
is_nast = ls_nast
iv_from_mem = abap_true
iv_druvo = lv_druvo
iv_xfz = lv_xfz
iv_background = l_background
v_gstin_vendor = lv_gst_v
IMPORTING
job_output_info = ls_job_info
TABLES
it_ekpo = ls_doc-xekpo[]
it_ekpa = ls_doc-xekpa[]
it_pekpo = ls_doc-xpekpo[]
it_eket = ls_doc-xeket[]
it_tkomv = ls_doc-xtkomv[]
it_ekkn = ls_doc-xekkn[]
it_ekek = ls_doc-xekek[]
it_komk = lt_xkomk[]
it_item_gst = it_item_gst
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
APPEND LINES OF ls_job_info-otfdata TO lt_otf.
CLEAR ls_job_info-otfdata.
LOOP AT lt_otf ASSIGNING FIELD-SYMBOL(<ls_otf>).
APPEND VALUE #( line = <ls_otf>-tdprintcom && <ls_otf>-tdprintpar ) TO lt_content_txt.
ENDLOOP.
CALL FUNCTION 'SX_OBJECT_CONVERT_OTF_PDF'
EXPORTING
format_src = 'OTF'
format_dst = 'PDF'
devtype = 'PRINTER'
CHANGING
transfer_bin = ls_transfer_bin
content_txt = lt_content_txt
content_bin = lt_content_hex
objhead = ls_objhead
len = lv_len_in
EXCEPTIONS
err_conv_failed = 1
OTHERS = 2.
g_mail_subject = 'PO#' && ` ` && im_ebeln && ` ` && 'Vendor Name' && ` ` && ls_lfa1-name1.
SELECT smtp_addr
FROM usr21 AS l
INNER JOIN adr6 AS ad
ON l~addrnumber = ad~addrnumber AND l~persnumber = ad~persnumber
AND ad~flgdefault = @abap_true
INTO TABLE @DATA(lt_usr_email)
WHERE l~bname = @ls_ekko-ernam.
TRY.
APPEND VALUE #( action = 'R' email = lt_vndr_email[ 1 ]-smtp_addr ) TO it_mail_id .
CATCH cx_sy_itab_line_not_found.
ENDTRY.
TRY.
APPEND VALUE #( action = 'R' email = lt_usr_email[ 1 ]-smtp_addr cc = 'X' ) TO it_mail_id .
CATCH cx_sy_itab_line_not_found.
ENDTRY.
TRY.
SELECT * FROM zpo_cc_mail INTO lt_PGR
WHERE ekgrp = ls_ekko-ekgrp.
APPEND VALUE #( action = 'R' email = lt_pgr-smtp_addr cc = 'X' ) TO it_mail_id .
ENDSELECT.
CATCH cx_sy_itab_line_not_found.
ENDTRY.
lv_message = 'Dear' && ` ` && ls_lfa1-name1.
APPEND VALUE #( line = lv_message ) TO it_body.
APPEND VALUE #( line = '<BR>' ) TO it_body.
APPEND VALUE #( line = '<BR>' ) TO it_body.
lv_message = 'Please find the Purchase Order #' && ` ` && im_EBELN.
APPEND VALUE #( line = lv_message ) TO it_body.
APPEND VALUE #( line = '<BR>' ) TO it_body.
APPEND VALUE #( line = '<BR>' ) TO it_body.
lv_message = 'Thanks & Reagrds'.
APPEND VALUE #( line = lv_message ) TO it_body.
APPEND VALUE #( line = '<BR>' ) TO it_body.
APPEND VALUE #( line = '<BR>' ) TO it_body.
lv_message = 'ABP Procurment Team'.
APPEND VALUE #( line = lv_message ) TO it_body.
APPEND VALUE #( line = '<BR>' ) TO it_body.
lv_att_name = 'Purchase Order'.
CALL FUNCTION 'ZIBS_SEND_MAIL_WITH_ATTACHMENT'
EXPORTING
i_type = 'HTM'
i_message_body = it_body
i_subject = g_mail_subject
i_attachment_type = 'PDF'
i_attachment_name = lv_att_name
i_att_content_hex = lt_content_hex "it_solix
TABLES
i_email_id = it_mail_id
EXCEPTIONS
ex_sender = 1
OTHERS = 2.
IF sy-subrc <> 0.
*Implement suitable error handling here
ENDIF.
FUCNTION MODULE USED FOR SEND MAIL FROM SAP
- CALL FUNCTION ‘ME_READ_PO_FOR_PRINTING’.
- CALL FUNCTION ‘WFMC_PREPARE_SMART_FORM’.
- CALL FUNCTION ‘SSF_FUNCTION_MODULE_NAME’.
- CALL FUNCTION ‘SX_OBJECT_CONVERT_OTF_PDF’
- CALL FUNCTION ‘ZIBS_SEND_MAIL_WITH_ATTACHMENT’.


OUTPUT OF PROGRAM TO SEND MAIL FROM SAP

You May Also Like:
- CDHDR object class list
- Cdpos and Cdhdr table in SAP
- F4IF_INT_TABLE_VALUE_REQUEST search help
- Program To Upload File In Al11 In SAP ABAP
For the next blog please connect with us and follow us on twitter.com/einfonett