zoukankan      html  css  js  c++  java
  • ABAP 发邮件(三)

    【转自http://blog.sina.com.cn/s/blog_7c7b16000101bnxk.html】
    SAP ABAP 发邮件方法三(OO)


    *&---------------------------------------------------------------------*
    *& Report ZSENDEMAIL08
    *&
    *&---------------------------------------------------------------------*

    REPORT zsendemail08.

    CONSTANTS:
    gc_tab TYPE c VALUE cl_bcs_convert=>gc_tab, "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
    gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf. "CL_ABAP_CHAR_UTILITIES=>CR_LF

    PARAMETERS: mailto TYPE ad_smtpadr DEFAULT 'justin.ding@usisz.com.cn'. " 收件人

    DATA send_request TYPE REF TO cl_bcs.
    DATA document TYPE REF TO cl_document_bcs.
    DATA recipient TYPE REF TO if_recipient_bcs.
    DATA bcs_exception TYPE REF TO cx_bcs.

    DATA main_text TYPE bcsy_text.
    DATA binary_content TYPE solix_tab.
    DATA size TYPE so_obj_len.
    DATA sent_to_all TYPE os_boolean.


    START-OF-SELECTION.

    PERFORM create_content.
    PERFORM send.

    *&---------------------------------------------------------------------*
    *& Form create_content
    *&---------------------------------------------------------------------*
    * Create Example Content
    * 1) Write example text into a string
    * 2) convert this string to solix_tab
    *----------------------------------------------------------------------*
    FORM create_content.

    DATA lv_string TYPE string.
    DATA ls_t100 TYPE t100.

    * --------------------------------------------------------------
    * as example content we use some system messages out of t100
    * get them for all installed languages from db
    * and write one line for each language into the spread sheet
    * columns are separated by TAB and each line ends with CRLF

    CONCATENATE 'This Is Just Example Text!'
    gc_crlf gc_crlf
    INTO lv_string.

    DO 10 TIMES.
    CONCATENATE lv_string
    '1111111111111111111111111111111111111111111111111111111111111' gc_tab
    '2222222222222222222222222222222222222222222222222222222222222' gc_tab
    '3333333333333333333333333333333333333333333333333333333333333' gc_tab
    'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' gc_tab
    'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb' gc_tab
    'ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' gc_tab
    'ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd' gc_tab
    'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' gc_tab
    'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' gc_tab
    'ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg' gc_tab
    'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh' gc_tab
    'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii' gc_tab
    'jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj' gc_tab
    'kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk' gc_crlf
    INTO lv_string.
    ENDDO.
    * --------------------------------------------------------------
    * convert the text string into UTF-16LE binary data including
    * byte-order-mark. Mircosoft Excel prefers these settings
    * all this is done by new class cl_bcs_convert (see note 1151257)

    TRY.
    cl_bcs_convert=>string_to_solix(
    EXPORTING
    iv_string = lv_string
    iv_codepage = '4103' "suitable for MS Excel, leave empty
    iv_add_bom = 'X' "for other doc types
    IMPORTING
    et_solix = binary_content
    ev_size = size ).
    CATCH cx_bcs.
    MESSAGE e445(so).
    ENDTRY.

    ENDFORM. "create_content

    *---------------------------------------------------------------
    * NOTES:
    *---------------------------------------------------------------
    * UTF-16LE including the BOM (Byte order mark)
    * is preferred by Microsoft Excel. If you want to create
    * other binary content you may choose another codepage (e.g.
    * '4110' (UTF-8) which is standard for e-mails).
    * Find SAP codepage names in the drop down list
    * for the codepage setting of node SMTP in transaction SCOT.
    * Or: leave iv_codepage and iv_add_bom empty. Then the target
    * codepage is set according to SAPconnect settings
    *
    * Important:
    * SAP neither guarantees that the attachment created
    * by this report can be opened by all Excel Versions nor
    * that it can be opened by any 3rd party software at all

    *&---------------------------------------------------------------------*
    *& Form send
    *&---------------------------------------------------------------------*
    FORM send.

    TRY.

    * -------- create persistent send request ------------------------
    send_request = cl_bcs=>create_persistent( ).

    * -------- create and set document with attachment ---------------
    * create document object from internal table with text
    APPEND 'Hello world!' TO main_text. " 邮件内容
    document = cl_document_bcs=>create_document(
    i_type = 'RAW'
    i_text = main_text
    i_subject = 'Test Created By BCS_EXAMPLE_7' ). " 邮件主题名

    * add the spread sheet as attachment to document object
    document->add_attachment(
    i_attachment_type = 'xls' " 附件格式
    i_attachment_subject = 'ExampleSpreadSheet' " attachment name
    i_attachment_size = size "附件大小
    i_att_content_hex = binary_content ). "附件内容

    * add document object to send request
    send_request->set_document( document ).

    * --------- add recipient (e-mail address) -----------------------
    * create recipient object
    recipient = cl_cam_address_bcs=>create_internet_address( mailto ).

    * add recipient object to send request
    send_request->add_recipient( recipient ).

    * ---------- send document ---------------------------------------
    sent_to_all = send_request->send( i_with_error_screen = 'X' ).

    COMMIT WORK.
    WAIT UP TO 2 SECONDS.
    SUBMIT rsconn01 WITH mode = 'INT'
    WITH output = 'X'
    AND RETURN.
    IF sent_to_all IS INITIAL.
    MESSAGE i500(sbcoms) WITH mailto.
    ELSE.
    MESSAGE s022(so).
    ENDIF.
    * ------------ exception handling ----------------------------------
    * replace this rudimentary exception handling with your own one !!!
    CATCH cx_bcs INTO bcs_exception.
    MESSAGE i865(so) WITH bcs_exception->error_type.
    ENDTRY.

    ENDFORM. "send

  • 相关阅读:
    每天学习一个设计模式(十二):创建型之单例模式
    每天学习一个设计模式(十一):创建型之原型模式
    每天学习一个设计模式(十):创建型之工厂方法模式
    每天学习一个设计模式(九):创建型之建造者模式
    数据库
    操作系统
    计算机网络
    Java 基础知识
    Linux基本操作
    git 基本操作
  • 原文地址:https://www.cnblogs.com/rainysblog/p/4135966.html
Copyright © 2011-2022 走看看