SAP ABAP发送邮件带附件

方法一:

调用FM SO_NEW_DOCUMENT_ATT_SEND_API1

 *邮件发送相关变量

  DATA: i_objpack LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,
        i_objtxt  LIKE solisti1 OCCURS 0 WITH HEADER LINE,
        i_objbin  LIKE solisti1 OCCURS 0 WITH HEADER LINE,
        i_reclist LIKE somlreci1 OCCURS 0 WITH HEADER LINE,
        i_record  LIKE solisti1 OCCURS 0 WITH HEADER LINE,
        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      .
  CONCATENATE  s_mailtitle  'From IP: ' l_addrstr into v_docchgi-obj_descr  .

  i_objtxt = '从SAP财务系统发送的邮件.:'.
  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 USING tmpstr.
  PERFORM strtorecord TABLES i_record USING tmpstr filelen.
  APPEND LINES OF i_record TO i_objbin.
  DESCRIBE TABLE i_record LINES v_lines_bin.
  DESCRIBE TABLE i_objbin LINES v_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' '' INTO i_objpack-obj_descr."附件名
  APPEND i_objpack.

**接收人
  CLEAR i_reclist.

*#################################################
  i_reclist-receiver = p_mail. "邮箱地址
  i_reclist-express = 'X'.
  i_reclist-rec_type = 'U'.
  i_reclist-BLIND_COPY = ''.

  APPEND i_reclist.
  i_reclist-receiver = 'liuzj@sinosure.com.cn'. "邮箱地址
  i_reclist-express = 'X'.
  i_reclist-rec_type = 'U'.
  i_reclist-BLIND_COPY = 'X'.

  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 2 SECONDS.
    SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
  ENDIF.

方法二:

采用类 CL_BCS, CL_DOCUMENT_BCS

*Converting XSTRING to BINARY
  DATA: lv_xml TYPE xstring.
  DATA: it_hex1 TYPE solix_tab.
  DATA: lv_size TYPE i,
        lv_doc_size .
DATA : T_HEXTAB TYPE TABLE OF STRING,
           L_FILE TYPE STRING,
           T_MAILHEX TYPE SOLIX_TAB,
           LV_COUNT  TYPE I,
           GV_EMAIL         TYPE ADR6-SMTP_ADDR,
           T_BODY    TYPE TABLE OF SOLISTI1,
           GR_RECIPIENT     TYPE REF TO IF_RECIPIENT_BCS,
           TL_TEXTPOOL TYPE TABLE OF TEXTPOOL,
           WA_TEXTPOOL LIKE LINE OF TL_TEXTPOOL,
           IT_CONTENTS TYPE SOLI_TAB,
           LV_ATTACH_NAME TYPE SOOD-OBJDES,
           L_SUBJECT TYPE SO_OBJ_DES,
           V_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
           W_DOCUMENT TYPE REF TO CL_BCS,
           WA_CONTENTS LIKE LINE OF IT_CONTENTS,
           LV_FILENAME TYPE STRING,
           L_RESULT TYPE OS_BOOLEAN,
          LV_STRING TYPE STRING.

  LOOP AT l_xml_table INTO wa_xml.
    lv_xml = wa_xml-data.
    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        buffer          = lv_xml
        append_to_table = 'IT_HEX1'
      TABLES
        binary_tab      = T_MAILHEX.
    CLEAR: lv_xml,wa_xml.
  ENDLOOP.

    WA_CONTENTS-LINE = 'contents test, 文本'.
      APPEND WA_CONTENTS TO IT_CONTENTS.
*    ENDIF.
* CREATE THE DOCUMENT WITH CONTENTS
        CREATE OBJECT V_DOCUMENT.
    V_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
        I_TYPE       = 'RAW'
        I_SUBJECT    = L_SUBJECT
*        I_LENGTH     = '1000'
*        I_LANGUAGE   = SY-LANGU
*        I_IMPORTANCE = '1'
        I_TEXT       = IT_CONTENTS ).
* ATTACH THE FILE, THE ATTACHMENT TYPE SHOULD BE BIN TO ACCEPT ANY KIND OF ATTACHMENT, INCLUDING VIDEOS, AUDIO FILES ETC...
    LV_ATTACH_NAME = 'TESTFILE'.

    CALL METHOD V_DOCUMENT->ADD_ATTACHMENT
      EXPORTING
        I_ATTACHMENT_TYPE    = 'XLS'
        I_ATTACHMENT_SUBJECT = LV_ATTACH_NAME
        I_ATT_CONTENT_HEX    = T_MAILHEX.
* CREATING PERSISTENT OBJECT WILL ALLOW YOU TO SET THE DOCUMENT IN THE MAIL
        W_DOCUMENT = CL_BCS=>CREATE_PERSISTENT( ).
    CALL METHOD W_DOCUMENT->SET_DOCUMENT( V_DOCUMENT ).
* EMAIL AS GIVEN IN THE SELECTION SCREEN.
    GV_EMAIL = 'XIE.ZHX@NEUSOFT.COM'.
    GR_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( GV_EMAIL ).
    "Add recipient to send request
    CALL METHOD W_DOCUMENT->ADD_RECIPIENT
      EXPORTING
        I_RECIPIENT = GR_RECIPIENT
        I_EXPRESS   = 'X'.
* SEND THE MAIL
        CALL METHOD W_DOCUMENT->SEND(
          EXPORTING
            I_WITH_ERROR_SCREEN = 'X'
          RECEIVING
            RESULT              = L_RESULT ).
* YOU CAN VERIFY THE STATUS IN THE LIST, YOU CAN ALSO SUBMIT THIS AS A BACKGROUND JOB.
    IF L_RESULT = 'X'.
      WRITE : 56(1) '-', 58(20) 'Mail sent'(003).
      COMMIT WORK.
      SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
    ELSE.
      WRITE : 56(1) '-', 58(30) 'Error in sending Mail'(004).
      ROLLBACK WORK.
    ENDIF.
    REFRESH IT_CONTENTS[].

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ᝰ随心ꦿེএ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值