ABAP 发邮件程序

来源:互联网 发布:c语言 flag 编辑:程序博客网 时间:2024/05/21 15:03
*&---------------------------------------------------------------------*
*& Report 
ZZ_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZZ_TEST.
DATA: i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
     i_objtxt  LIKE solisti1 OCCURS 0 WITH HEADERLINE,
     i_objbin  LIKE solisti1 OCCURS 0 WITH HEADERLINE,
     i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
     i_record  LIKE solisti1 OCCURS 0 WITH HEADERLINE,
     v_objhead TYPE soli_tab ,
     v_lines_txt TYPE i,
     v_lines_bin TYPE i,
     v_docchgi TYPE sodocchgi1,
     v_lines_bin_all TYPE i ,
     filelen TYPE i.
DATA: BEGIN OF itab_text OCCURS 0 , "内表作为邮件附件
       ff1(20) ,
       ff2(40) ,
       ff3 TYPE i,
     END OF itab_text.

START-OF-SELECTION.
  itab_text-ff1 = 'skdfksd'.
  itab_text-ff2 = '第一行'.
  itab_text-ff3 = 123.
  APPEND itab_text.
  itab_text-ff1 = 'ksssd'.
  itab_text-ff2 = '第二行'.
  itab_text-ff3 = 456.
  APPEND itab_text.

  PERFORM send_mail.

*&---------------------------------------------------------------------*
*&     Form  send_mail
*&---------------------------------------------------------------------*
     text
*----------------------------------------------------------------------*
FORM send_mail .
  v_docchgi-obj_name = 'Text'.
  v_docchgi-expiry_dat = sy-datum + 2 ."过期日期
  v_docchgi-sensitivty = 'F'. "Functionalobject
  v_docchgi-doc_size = v_lines_txt * 255.
  v_docchgi-obj_descr = 'Mail标题'.

  i_objtxt = 'Line1第一行'.
  APPEND i_objtxt.
  i_objtxt = 'Line2第二行'.
  APPEND i_objtxt.
  DESCRIBE TABLE i_objtxt LINES v_lines_txt.

  i_objpack-transf_bin = ''.
  i_objpack-head_start = 1.
  i_objpack-head_num = 0.
  i_objpack-body_start = 1.
  i_objpack-body_num = v_lines_txt.
  i_objpack-doc_type = 'RAW'.
  APPEND i_objpack.

**内表作为邮件附件
  DATA: tmpstr TYPE string .
  CLEAR: tmpstr,i_record,i_record[].
  PERFORM itabtostr TABLES itab_text USINGtmpstr.
  PERFORM strtorecord TABLES i_record USING tmpstrfilelen.
  APPEND LINES OF i_record TO i_objbin.
  DESCRIBE TABLE i_record LINES v_lines_bin.
  DESCRIBE TABLE i_objbin LINESv_lines_bin_all.

  i_objpack-transf_bin = 'X'.
  i_objpack-body_start = v_lines_bin_all -v_lines_bin + 1 .
  i_objpack-body_num = v_lines_bin.
  i_objpack-doc_type = 'XLS'.
  i_objpack-obj_name = 'text'.
  i_objpack-doc_size = v_lines_bin * 255.
  CONCATENATE 'itab_attch.xls' '' INTOi_objpack-obj_descr."附件名
  APPEND i_objpack.

**接收人
  CLEAR i_reclist.
  i_reclist-receiver = 'liuandr@gmail.com'.
  i_reclist-express = 'X'.
  i_reclist-rec_type = 'U'.
  APPEND i_reclist.

  CALL FUNCTION'SO_NEW_DOCUMENT_ATT_SEND_API1'
   EXPORTING
     document_data             = v_docchgi
     put_in_outbox             = 'X'
     commit_work               = 'X'
    TABLES
     packing_list              = i_objpack
     object_header             = v_objhead
     contents_bin              = i_objbin
     contents_txt              = i_objtxt
     receivers                 = i_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.
  IF sy-subrc = 0.
    WAIT UP TO 2SECONDS.
    SUBMITrsconn01 WITH mode = 'INT' AND RETURN.
  ENDIF.
ENDFORM.                   " send_mail

*&---------------------------------------------------------------------*
*&     Form  itabtostr
*&---------------------------------------------------------------------*
FORM itabtostr TABLES intab
               USING outstr TYPE string.
  DATA: tab TYPE c VALUEcl_abap_char_utilities=>horizontal_tab,
       enter(2) TYPE c VALUEcl_abap_char_utilities=>cr_lf,
       n TYPE i.
  DATA: BEGIN OF headtab OCCURS 0 ,
         length    TYPE i,
         decimals  TYPE i,
         type_kind TYPE c,
         name(30)  TYPE c,
       END OF headtab.
  DATA descr_ref TYPE REF TOcl_abap_structdescr.
  FIELD-SYMBOLS:<comp_wa> TYPE abap_compdescr ,
                <f_field> ,
                <f_intab> TYPE ANY .
  DATA:str TYPE string,
      str2 TYPE string ,
      text1 TYPE c.
  descr_ref ?=cl_abap_typedescr=>describe_by_data( intab ).
  LOOP AT descr_ref->componentsASSIGNING <comp_wa>.
   MOVE-CORRESPONDING <comp_wa> TOheadtab.
    APPENDheadtab.
  ENDLOOP.
  DESCRIBE TABLE headtab LINES n.
  LOOP AT intab ASSIGNING<f_intab>.
    DO nTIMES.
     ASSIGN COMPONENT sy-index OF STRUCTURE<f_intab> TO<f_field>.
     str = <f_field>.
     READ TABLE headtab INDEX sy-index.
     IF headtab-type_kind = 'I' OR headtab-type_kind = 'P'
                                OR headtab-type_kind = 'F'.
       SEARCH str FOR '-'.
       IF sy-subrc = 0 AND sy-fdpos <>0.
         SPLIT str AT '-' INTO str text1.
         CONDENSE str.
         CONCATENATE '-' str INTO str.
       ELSE.
         CONDENSE str.
       ENDIF.
     ELSE.
      SHIFT str LEFT DELETING LEADING '0' .
     ENDIF.
     CONCATENATE str2 tab str INTO str2.
    ENDDO.
    SHIFTstr2.
    CONCATENATEoutstr str2 enter INTO outstr.
    CLEARstr2.
  ENDLOOP.
ENDFORM.                   "itabtostr

*&---------------------------------------------------------------------*
*&     Form  strtorecord
*&---------------------------------------------------------------------*
FORM strtorecord TABLES record USING str len.
  DATA:tmpbuffer TYPE xstring.
  CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
   EXPORTING
     text    = str
     mimetype = '"text/html; charset=gb2312"'
    encoding = '8400'
   IMPORTING
     buffer   = tmpbuffer
   EXCEPTIONS
     failed   = 1
     OTHERS   = 2.
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
   EXPORTING
     buffer         = tmpbuffer
     append_to_table = ''
   IMPORTING
     output_length   = len
    TABLES
     binary_tab     = record.
ENDFORM.                   "strtorecord

原创粉丝点击