ABAP 发邮件程序

*&---------------------------------------------------------------------*
*& 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP剑客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值