一个很强的基于面向对象的SAP邮件发送

来源:互联网 发布:匿名发短信软件 编辑:程序博客网 时间:2024/06/18 08:03
 1. OO程序,能够发送外部邮件。

REPORT  Z_MAIL_TEST3.
PARAMETERSp_mail TYPE ad_smtpadr OBLIGATORY.

DATAi_mara TYPE STANDARD TABLE OF mara.  MARA Entries
DATAl_text TYPE char255.  Text
DATAl_lines TYPE i,
      l_size            TYPE           sood-objlen.
Size of Attachment


Mail related
DATAi_content         TYPE   soli_tab, Mail content
      i_attach          TYPE   soli_tab. Attachment

DATAl_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------------------------------------------------------------*
CONSTANTSc_tab(1TYPE 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.

Preparing body of the Mail
  MOVE 'Mail Body' TO l_text.
  APPEND l_text TO i_content.

Preparing contents of attachment with Change Log
  PERFORM prepare_attachment.

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' ).

      DESCRIBE TABLE i_mara LINES l_lines.
Size to multiplied by 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[].

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
  DATAl_text TYPE char1024.     Text content for mail attachment
  DATAl_con(50TYPE 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.
        CLEARl_con.
        MOVE <lfs_con> TO l_con.
        CONDENSE l_con.
        IF sy-index 1.
          CLEARl_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
原创粉丝点击