关闭

SAP ABAP 发邮件方法(OO)

1493人阅读 评论(0) 收藏 举报
*&---------------------------------------------------------------------*
*& 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 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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4057946次
    • 积分:58432
    • 等级:
    • 排名:第52名
    • 原创:1704篇
    • 转载:2503篇
    • 译文:101篇
    • 评论:311条
    博客专栏
    最新评论
    微信公众号
      为你推荐最新的博文~更有惊喜等着你