Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Mail Sending from a method

Former Member
0 Kudos

Hi All,

I kept mail sending functionality in a bady.

I kept the code in a method and i am using the Function module "SO_NEW_DOCUMENT_SEND_API1" to send the Email.But Suprig this function module returnd SY_SUBRC = 0 but when i checked in the SCOT its not showing the LOG and the mail is not going.I copied the same code and i kept in a Report and tried but here the Mail is sending.

Please help how to resolve this .

Regards

Krishna

2 REPLIES 2

Former Member
0 Kudos

Hi,

I am using below code without using SCOT.

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
  EXPORTING
  DOCUMENT_DATA = LA_DOC
  PUT_IN_OUTBOX = 'X'
* SENDER_ADDRESS = SY-UNAME
* SENDER_ADDRESS_TYPE = 'B'
  COMMIT_WORK = 'X'
 IMPORTING
* SENT_TO_ALL =
 NEW_OBJECT_ID = OBJID
* SENDER_ID =
  TABLES
  PACKING_LIST = IT_PACKING_LIST
  OBJECT_HEADER = HEADLIST
  CONTENTS_BIN = IT_ATTACHMENT
  CONTENTS_TXT = IT_MAILBODY[]
* CONTENTS_HEX =
* OBJECT_PARA =
* OBJECT_PARB =
  RECEIVERS = IT_RECEIVERS[]
  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
  .
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
  ENDIF.


  SELECT  * FROM SOSC WHERE OBJTP = OBJID+0(3) AND
                                  OBJYR = OBJID+3(2)  AND
                                  OBJNO = OBJID+5(12).
    MOVE-CORRESPONDING SOSC TO SOSC_WA.
    APPEND SOSC_WA TO SOSC_TAB.
  ENDSELECT.

  CALL FUNCTION 'SX_SEND_DISPATCHER'
    EXPORTING
      SOSC_TAB          = SOSC_TAB
      OUTPUT            = 'X'
    IMPORTING
      NR_SO_OBJECTS     = NR_SO_OBJECTS
    TABLES
      OBJ_CAT           = OBJ_CAT
    EXCEPTIONS
      INTERNAL_ERROR    = 1
      DIRECTSEND_FAILED = 2
      OTHERS            = 3.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  REFRESH SOSC_TAB.

Rgds

vijay

Former Member
0 Kudos

Hi.

Try using COMMIT WORK statement after the call to the FM.

Also Check the below code.



PARAMETERS: p_mail TYPE ad_smtpadr OBLIGATORY.
 
DATA: i_mara TYPE STANDARD TABLE OF mara,  " MARA Entries
      i_marc TYPE STANDARD TABLE OF marc.  " MARC Entries
DATA: l_text TYPE char255.  " Text
DATA: l_lines TYPE i,
      l_size            TYPE           sood-objlen.
" Size of Attachment
 
 
* Mail related
DATA: i_content         TYPE   soli_tab, " Mail content
      i_attach          TYPE   soli_tab, " Attachment
      i_attach1         TYPE   soli_tab. " Attachment
 
DATA: l_send_request    TYPE REF TO    cl_bcs,
                                            " E-Mail Send Request
      l_document        TYPE REF TO    cl_document_bcs,
                                            " E-Mail Attachment
      l_recipient       TYPE REF TO    if_recipient_bcs,
                                            " Distribution List
      l_sender          TYPE REF TO    if_sender_bcs,
                                            " Address of Sender
      l_uname           TYPE           salrtdrcpt,
                                            " Sender Name(SY-UNAME)
      l_bcs_exception   TYPE REF TO    cx_document_bcs,
                                            " BCS Exception
      l_addr_exception  TYPE REF TO    cx_address_bcs,
                                            " Address Exception
      l_send_exception  TYPE REF TO    cx_send_req_bcs.
" E-Mail sending Exception
 
*Constants------------------------------------------------------------*
CONSTANTS: c_tab(1) TYPE c VALUE
               cl_abap_char_utilities=>horizontal_tab,
                                     " Tab Character
 
           c_cr(1)  TYPE c VALUE cl_abap_char_utilities=>cr_lf,
                                     " Line Feed for End-Of_line
 
           c_ext    TYPE soodk-objtp VALUE 'XLS'. " XLS Extension
 
START-OF-SELECTION.
 
  SELECT * FROM mara INTO TABLE i_mara UP TO 20 ROWS.
 
  SELECT * FROM marc INTO TABLE i_marc UP TO 20 ROWS.
 
* Preparing body of the Mail
  MOVE 'Mail Body' TO l_text.
  APPEND l_text TO i_content.
 
* Creates persistent send request
  TRY.
      l_send_request = cl_bcs=>create_persistent( ).
 
* Creating Document
      l_document = cl_document_bcs=>create_document(
                                    i_type  = 'RAW'
                                    i_text  = i_content[]
                                    i_subject = 'Material Details' ).
 
* Preparing contents of attachment with Change Log
  PERFORM prepare_attachment.
 
  DESCRIBE TABLE i_mara LINES l_lines.
* Size to multiplied by 2 for UNICODE enabled systems
      l_size = l_lines * 2 * 255.
 
* Adding Attachment
      CALL METHOD l_document->add_attachment
        EXPORTING
          i_attachment_type    = c_ext
          i_attachment_size    = l_size
          i_attachment_subject = 'Material Details'
          i_att_content_text   = i_attach[].
 
  DESCRIBE TABLE i_marc LINES l_lines.
* Size to multiplied by 2 for UNICODE enabled systems
      l_size = l_lines * 2 * 255.
 
* Adding Attachment
      CALL METHOD l_document->add_attachment
        EXPORTING
          i_attachment_type    = c_ext
          i_attachment_size    = l_size
          i_attachment_subject = 'Material Plant Details'
          i_att_content_text   = i_attach1[].
 
 
* Add document to send request
      CALL METHOD l_send_request->set_document( l_document ).
 
* Get Sender Object
      l_uname = sy-uname.
 
      l_sender = cl_sapuser_bcs=>create( l_uname ).
       CALL METHOD l_send_request->set_sender
        EXPORTING
          i_sender = l_sender.
 
* E-Mail
      TRANSLATE p_mail TO LOWER CASE.
 
    l_recipient = cl_cam_address_bcs=>create_internet_address( p_mail )
.
       CALL METHOD l_send_request->add_recipient
        EXPORTING
          i_recipient  = l_recipient
          i_express    = 'U'
          i_copy       = ' '
          i_blind_copy = ' '
          i_no_forward = ' '.
 
 *Trigger E-Mail immediately
      l_send_request->set_send_immediately( 'X' ).
 
      CALL METHOD l_send_request->send( ).
 
      COMMIT WORK.
 
    CATCH cx_document_bcs INTO l_bcs_exception.
    CATCH cx_send_req_bcs INTO l_send_exception.
    CATCH cx_address_bcs  INTO l_addr_exception.
   ENDTRY.
 
 *&---------------------------------------------------------------------
*&      Form  PREPARE_ATTACHMENT
*&---------------------------------------------------------------------
*
FORM prepare_attachment.
 
  FIELD-SYMBOLS: <lfs_table>,    " Internal table structure
                 <lfs_con>.      " Field Content
  DATA: l_text TYPE char1024.     " Text content for mail attachment
  DATA: l_con(50) TYPE c.        " Field Content in character format
 
* Columns to be tab delimeted
  LOOP AT i_mara ASSIGNING <lfs_table>.
    DO.
      ASSIGN COMPONENT sy-index OF STRUCTURE <lfs_table>
             TO <lfs_con>.
      IF sy-subrc NE 0.
        CONCATENATE c_cr l_text INTO l_text.
        APPEND l_text TO i_attach.
        EXIT.
      ELSE.
        CLEAR: l_con.
        MOVE <lfs_con> TO l_con.
        CONDENSE l_con.
        IF sy-index = 1.
          CLEAR: l_text.
          MOVE l_con TO l_text.
        ELSE.
          CONCATENATE l_text l_con INTO l_text
             SEPARATED BY c_tab.
        ENDIF.
      ENDIF.
    ENDDO.
  ENDLOOP.
 
  LOOP AT i_marc ASSIGNING <lfs_table>.
    DO.
      ASSIGN COMPONENT sy-index OF STRUCTURE <lfs_table>
             TO <lfs_con>.
      IF sy-subrc NE 0.
        CONCATENATE c_cr l_text INTO l_text.
        APPEND l_text TO i_attach1.
        EXIT.
      ELSE.
        CLEAR: l_con.
        MOVE <lfs_con> TO l_con.
        CONDENSE l_con.
        IF sy-index = 1.
          CLEAR: l_text.
          MOVE l_con TO l_text.
        ELSE.
          CONCATENATE l_text l_con INTO l_text
             SEPARATED BY c_tab.
        ENDIF.
      ENDIF.
    ENDDO.
  ENDLOOP.
 
ENDFORM.                    " PREPARE_ATTACHMENT
 

Please treat above code just as reference...

Hope this helps.

Thanks,

Balaji