Skip to Content
avatar image
Former Member

Send a mail via ABAP program

Hello Experts,

I want to send mail via ABAP program with the following requirements :

1. Recipient is OUTLOOK email -id

2. Sender address has to be an external email-id

3. Send mail as CC and BCC also to other email-id.

Is there any function module which can satisfy all the above requirements.

Regards,

Mansi.

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

6 Answers

  • avatar image
    Former Member
    Sep 16, 2008 at 04:33 AM

    Hi,

    try this FM 'SO_DOCUMENT_SEND_API1'

    thanks,

    Deepti A

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Sep 16, 2008 at 04:34 AM

    These are the FM for sending external email :-

    SO_DOCUMENT_SEND_API1

    SAPoffice: Send new document with attachments via RFC

    SO_NEW_DOCUMENT_ATT_SEND_API1

    (In 4.6C only, You can go to SE37 and click the documentation on how to use it. A sample program is provided there.)

    SAPoffice: Send new document with attachments via RFC

    Note : If you are using FM SO_NEW_DOCUMENT_ATT_SEND_API1 then Export Parameter DOCUMENT_DATA-OBJ_DESCR contains the Subject.

    SO_NEW_DOCUMENT_SEND_API1

    SAPoffice: Send new document

    Add comment
    10|10000 characters needed characters exceeded

  • Sep 16, 2008 at 04:36 AM

    check this function

    SO_DOCUMENT_SEND_API1, read documentation.

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Sep 16, 2008 at 04:36 AM

    Sample

    REPORT ZREPORT_TO_EMAIL NO STANDARD PAGE HEADING LINE-SIZE 200. 
    
    DATA : BEGIN OF ITAB OCCURS 0, 
    PERNR LIKE PA0001-PERNR, 
    ENAME LIKE PA0001-ENAME, 
    END OF ITAB. 
    
    DATA: message_content LIKE soli OCCURS 10 WITH HEADER LINE, 
    receiver_list LIKE soos1 OCCURS 5 WITH HEADER LINE, 
    packing_list LIKE soxpl OCCURS 2 WITH HEADER LINE, 
    listobject LIKE abaplist OCCURS 10, 
    compressed_attachment LIKE soli OCCURS 100 WITH HEADER LINE, 
    w_object_hd_change LIKE sood1, 
    compressed_size LIKE sy-index. 
    
    START-OF-SELECTION. 
    
    SELECT PERNR ENAME 
    INTO CORRESPONDING FIELDS OF TABLE ITAB 
    FROM PA0001 
    WHERE PERNR < 50. 
    
    LOOP AT ITAB. 
    WRITE :/02 SY-VLINE , ITAB-PERNR, 15 SY-VLINE , ITAB-ENAME, 50 
    SY-VLINE. 
    ENDLOOP. 
      
    
    * Receivers 
    receiver_list-recextnam = 'EXTERNAL-MAIL-ID'. "--> 
    * EMAIL ADDRESS 
    RECEIVER_list-RECESC = 'E'. "<- 
    RECEIVER_list-SNDART = 'INT'."<- 
    RECEIVER_list-SNDPRI = '1'."<- 
    
    APPEND receiver_list. 
    
    * General data 
    w_object_hd_change-objla = sy-langu. 
    w_object_hd_change-objnam = 'Object name'. 
    w_object_hd_change-objsns = 'P'. 
    * Mail subject 
    w_object_hd_change-objdes = 'Message subject'. 
    
    * Mail body 
    APPEND 'Message content' TO message_content. 
    
    * Attachment 
    CALL FUNCTION 'SAVE_LIST' 
    EXPORTING 
    list_index = '0' 
    TABLES 
    listobject = listobject. 
    CALL FUNCTION 'TABLE_COMPRESS' 
    IMPORTING 
    compressed_size = compressed_size 
    TABLES 
    in = listobject 
    out = compressed_attachment. 
    DESCRIBE TABLE compressed_attachment. 
    CLEAR packing_list. 
    packing_list-transf_bin = 'X'. 
    packing_list-head_start = 0. 
    packing_list-head_num = 0. 
    packing_list-body_start = 1. 
    packing_list-body_num = sy-tfill. 
    packing_list-objtp = 'ALI'. 
    packing_list-objnam = 'Object name'. 
    packing_list-objdes = 'Attachment description'. 
    packing_list-objlen = compressed_size. 
    APPEND packing_list. 
    
    CALL FUNCTION 'SO_OBJECT_SEND' 
    EXPORTING 
    object_hd_change = w_object_hd_change 
    object_type = 'RAW' 
    owner = sy-uname 
    TABLES 
    objcont = message_content 
    receivers = receiver_list 
    packing_list = packing_list 
    att_cont = compressed_attachment.

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Sep 16, 2008 at 04:36 AM

    hi,

    this code will definately help you just go through it:

    firstly exported the data to memory using the FM LIST_FROM_MEMORY.

    CALL FUNCTION 'LIST_FROM_MEMORY'

    TABLES

    listobject = t_listobject

    EXCEPTIONS

    not_found = 1

    OTHERS = 2.

    IF sy-subrc 0.

    MESSAGE e000(su) WITH text-001.

    ENDIF.

    then i converted it into ASCII using LIST_TO_ASCI,

    CALL FUNCTION 'LIST_TO_ASCI'

    TABLES

    listasci = t_xlstab

    listobject = t_listobject

    EXCEPTIONS

    empty_list = 1

    list_index_invalid = 2

    OTHERS = 3.

    IF sy-subrc NE 0.

    MESSAGE e003(yuksdbfzs).

    ENDIF.

    This gives the data in ASCII format separated by '|' and the header has '-', dashes. If you use this internal table directly without any proccesing in SO_NEW_DOCUMENT_ATT_SEND_API1, then you will not get a good excel sheet attachment. To overcome this limitation, i used cl_abap_char_utilities=>newline and cl_abap_char_utilities=>horizontal_tab to add horizontal and vertical tabs to the internal table, replacing all occurences of '|' with

    cl_abap_char_utilities=>horizontal_tab.

    Set the doc_type as 'XLS', create the body and header using the packing_list and pass the data to be downloaded to SO_NEW_DOCUMENT_ATT_SEND_API1 as contents_bin.

    This will create an excel attachment.

    Sample code for formatting the data for the attachment in excel format.

    u2022 Format the data for excel file download

    LOOP AT t_xlstab INTO wa_xlstab .

    DESCRIBE TABLE t_xlstab LINES lw_cnt.

    CLEAR lw_sytabix.

    lw_sytabix = sy-tabix.

    u2022 If not new line then replace '|' by tabs

    IF NOT wa_xlstab EQ cl_abap_char_utilities=>newline.

    REPLACE ALL OCCURRENCES OF '|' IN wa_xlstab

    WITH cl_abap_char_utilities=>horizontal_tab.

    MODIFY t_xlstab FROM wa_xlstab .

    CLEAR wa_xlstab.

    wa_xlstab = cl_abap_char_utilities=>newline.

    IF lw_cnt NE 0 .

    lw_sytabix = lw_sytabix + 1.

    u2022 Insert new line for the excel data

    INSERT wa_xlstab INTO t_xlstab INDEX lw_sytabix.

    lw_cnt = lw_cnt - 1.

    ENDIF.

    CLEAR wa_xlstab.

    ENDIF.

    ENDLOOP.

    Sample code for creating attachment and sending mail:

    FORM send_mail .

    u2022 Define the attachment format

    lw_doc_type = 'XLS'.

    u2022 Create the document which is to be sent

    lwa_doc_chng-obj_name = 'List'.

    lwa_doc_chng-obj_descr = w_subject. "Subject

    lwa_doc_chng-obj_langu = sy-langu.

    u2022 Fill the document data and get size of message

    LOOP AT t_message.

    lt_objtxt = t_message-line.

    APPEND lt_objtxt.

    ENDLOOP.

    DESCRIBE TABLE lt_objtxt LINES lw_tab_lines.

    IF lw_tab_lines GT 0.

    READ TABLE lt_objtxt INDEX lw_tab_lines.

    lwa_doc_chng-doc_size = ( lw_tab_lines - 1 ) * 255 + STRLEN( lt_objtxt ).

    lwa_doc_chng-obj_langu = sy-langu.

    lwa_doc_chng-sensitivty = 'F'.

    ELSE.

    lwa_doc_chng-doc_size = 0.

    ENDIF.

    u2022 Fill Packing List For the body of e-mail

    lt_packing_list-head_start = 1.

    lt_packing_list-head_num = 0.

    lt_packing_list-body_start = 1.

    lt_packing_list-body_num = lw_tab_lines.

    lt_packing_list-doc_type = 'RAW'.

    APPEND lt_packing_list.

    u2022 Create the attachment (the list itself)

    DESCRIBE TABLE t_xlstab LINES lw_tab_lines.

    u2022 Fill the fields of the packing_list for creating the attachment:

    lt_packing_list-transf_bin = 'X'.

    lt_packing_list-head_start = 1.

    lt_packing_list-head_num = 0.

    lt_packing_list-body_start = 1.

    lt_packing_list-body_num = lw_tab_lines.

    lt_packing_list-doc_type = lw_doc_type.

    lt_packing_list-obj_name = 'Attach'.

    lt_packing_list-obj_descr = w_docdesc.

    lt_packing_list-doc_size = lw_tab_lines * 255.

    APPEND lt_packing_list.

    u2022 Fill the mail recipient list

    lt_reclist-rec_type = 'U'.

    LOOP AT t_recipient_list.

    lt_reclist-receiver = t_recipient_list-address.

    APPEND lt_reclist.

    ENDLOOP.

    u2022 Finally send E-Mail

    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'

    EXPORTING

    document_data = lwa_doc_chng

    put_in_outbox = 'X'

    commit_work = 'X'

    IMPORTING

    sent_to_all = lw_sent_to_all

    TABLES

    packing_list = lt_packing_list

    object_header = lt_objhead

    contents_bin = t_xlstab

    contents_txt = lt_objtxt

    receivers = lt_reclist

    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.

    Hope it will help you

    regards

    Rahul sharma

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    Sep 16, 2008 at 05:06 AM

    Hi sapuser,

    Please refer to the following blog to configure the email setup.

    Sending E-Mail from ABAP - Version 610 and Higher - BCS Interface

    Try the below code to send mail.

    email

    Regards

    Indu

    Add comment
    10|10000 characters needed characters exceeded