ABAP 邮件发送

14 篇文章 0 订阅
参数
PI_SUBJECTTYPE SO_OBJ_DES邮件主题
PI_SENDERTYPE AD_SMTPADR OPTIONAL发件人邮箱地址
PT_ACCEPTTYPE BCSY_SMTPA 收件人邮箱
PT_CCACCEPTTYPE BCSY_SMTPA OPTIONAL抄送人邮箱
PT_CONTENTTYPE SOLI_TAB邮件内容
PT_ATTACHMENTTYPE TFPATTACHMENTS OPTIONAL附件清单(只用filename:文件名,mimetype:BIN,data:xstring数据)
PS_RETURNTYPE BAPIRET2返回参数

*&------Send Email Parameter
    DATA: lt_contents_txt    TYPE soli_tab,
          ls_contents_txt    TYPE soli,
          lt_attach_header   TYPE soli_tab,
          ls_attach_header   TYPE soli,
          lt_att_content_hex TYPE solix_tab,
          lv_outlength       TYPE i,
          lv_attch_size      TYPE so_obj_len,
          lv_content_size    TYPE so_obj_len,
          lv_send_return     TYPE os_boolean.

    DATA: lr_send     TYPE REF TO cl_bcs,
          lr_document TYPE REF TO cl_document_bcs,
          lr_sender   TYPE REF TO cl_cam_address_bcs,
          lr_accept   TYPE REF TO cl_cam_address_bcs,
          lr_ccaccept TYPE REF TO cl_cam_address_bcs,
          lr_sap_user TYPE REF TO cl_sapuser_bcs,
          lr_bcs      TYPE REF TO cx_bcs.

    DATA:lr_cx_send_req_bcs TYPE REF TO cx_send_req_bcs,
         lr_cx_address_bcs  TYPE REF TO cx_address_bcs.

    DATA: lv_accept  TYPE ad_smtpadr,
          lv_message TYPE bapiret2-message.

    DATA: ls_attachment TYPE sfpattachments,
          lv_doctype    TYPE so_obj_tp,
          lv_attsubject TYPE so_obj_des.

    DEFINE mcr_fill_return.
      ps_return-id         = sy-msgid.
      ps_return-number     = sy-msgno.
      ps_return-type       = sy-msgty.
      ps_return-message_v1 = sy-msgv1.
      ps_return-message_v2 = sy-msgv2.
      ps_return-message_v3 = sy-msgv3.
      ps_return-message_v4 = sy-msgv4.
      ps_return-message    = &1.
      RETURN.
    END-OF-DEFINITION.

    " Content format
    lt_contents_txt = pt_content.

*&------Create Send Request
    TRY.
        CALL METHOD cl_bcs=>create_persistent
          RECEIVING
            result = lr_send.
      CATCH cx_send_req_bcs INTO lr_cx_send_req_bcs.

    ENDTRY.
    IF lr_cx_send_req_bcs IS NOT INITIAL.
      lv_message = lr_cx_send_req_bcs->get_text( ).
      mcr_fill_return lv_message.
    ENDIF.

*&------Get The Sender Email Adress
    IF pi_sender IS NOT INITIAL.
      TRY.
          CALL METHOD cl_cam_address_bcs=>create_internet_address
            EXPORTING
              i_address_string = pi_sender
              i_address_name   = 'System Notification'
*             i_incl_sapuser   =
            RECEIVING
              result           = lr_sender.

*&---------Set Sender
          CALL METHOD lr_send->set_sender
            EXPORTING
              i_sender = lr_sender.

        CATCH cx_address_bcs INTO lr_cx_address_bcs.
        CATCH cx_send_req_bcs INTO lr_cx_send_req_bcs.
      ENDTRY.

    ELSE.
      TRY.
          CALL METHOD cl_sapuser_bcs=>create
            EXPORTING
              i_user = sy-uname
            RECEIVING
              result = lr_sap_user.

          CALL METHOD lr_send->set_sender
            EXPORTING
              i_sender = lr_sap_user.

        CATCH cx_send_req_bcs INTO lr_cx_send_req_bcs.
        CATCH cx_address_bcs INTO lr_cx_address_bcs.
      ENDTRY.
    ENDIF.

    " Error Deal
    IF lr_cx_address_bcs IS NOT INITIAL.
      lv_message = lr_cx_address_bcs->get_text( ).
      mcr_fill_return lv_message.
    ENDIF.

    IF lr_cx_send_req_bcs IS NOT INITIAL.
      lv_message = lr_cx_send_req_bcs->get_text( ).
      mcr_fill_return lv_message.
    ENDIF.

*&------Create Send Document Content
    TRY.
        IF lr_sender IS NOT INITIAL.
          CALL METHOD cl_document_bcs=>create_document
            EXPORTING
              i_type        = 'RAW' "'HTM'"'RAW'
              i_subject     = pi_subject
              i_length      = lv_content_size
              i_language    = sy-langu
*             i_importance  = '1'
              i_sensitivity = 'O'
              i_text        = lt_contents_txt
*             i_hex         =
*             i_header      =
              i_sender      = lr_sender
*             iv_vsi_profile =
            RECEIVING
              result        = lr_document.
        ELSE.
          CALL METHOD cl_document_bcs=>create_document
            EXPORTING
              i_type        = 'RAW'
              i_subject     = pi_subject
              i_length      = lv_content_size
              i_language    = sy-langu
*             i_importance  = '1'
              i_sensitivity = 'O'
              i_text        = lt_contents_txt
*             i_hex         =
*             i_header      =
*             i_sender      =
*             iv_vsi_profile =
            RECEIVING
              result        = lr_document.
        ENDIF.
      CATCH cx_document_bcs INTO lr_bcs.
    ENDTRY.

    IF lr_bcs IS NOT INITIAL.
      lv_message = lr_bcs->get_text( ).
      mcr_fill_return lv_message.
    ENDIF.

*&------Add Attachment To Send Document
    TRY.
        LOOP AT pt_attachment INTO ls_attachment.

          CLEAR: lt_attach_header,ls_attach_header,lv_attch_size,lt_att_content_hex.
          ls_attach_header = ls_attachment-filename.
          APPEND ls_attach_header TO lt_attach_header.

          CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
            EXPORTING
              buffer        = ls_attachment-data
            IMPORTING
              output_length = lv_outlength
            TABLES
              binary_tab    = lt_att_content_hex.

          lv_attch_size = lv_attch_size.
          lv_doctype    = ls_attachment-mimetype.
          lv_attsubject = ls_attachment-filename.
          SHIFT lv_attch_size LEFT DELETING LEADING ' '.

          CALL METHOD lr_document->add_attachment
            EXPORTING
              i_attachment_type     = lv_doctype
              i_attachment_subject  = lv_attsubject
              i_attachment_size     = lv_attch_size
              i_attachment_language = sy-langu
*             i_att_content_text    =
              i_att_content_hex     = lt_att_content_hex
*             i_attachment_header   = lt_attach_header
*             iv_vsi_profile        =
            .
          CLEAR ls_attachment.
        ENDLOOP.
      CATCH cx_document_bcs INTO lr_bcs.

    ENDTRY.

    IF lr_bcs IS NOT INITIAL.
      lv_message = lr_bcs->get_text( ).
      mcr_fill_return lv_message.
    ENDIF.

*&------Set Send Document For Send Request
    TRY.
        CALL METHOD lr_send->set_document
          EXPORTING
            i_document = lr_document.
      CATCH cx_send_req_bcs INTO lr_bcs.
    ENDTRY.
    IF lr_bcs IS NOT INITIAL.
      lv_message = lr_bcs->get_text( ).
      mcr_fill_return lv_message.
    ENDIF.

*&------Add Accept For Email
    TRY.
        LOOP AT pt_accept INTO lv_accept.
          CLEAR lr_accept.
          CALL METHOD cl_cam_address_bcs=>create_internet_address
            EXPORTING
              i_address_string = lv_accept
*             i_address_name   =
*             i_incl_sapuser   =
            RECEIVING
              result           = lr_accept.

          CALL METHOD lr_send->add_recipient
            EXPORTING
              i_recipient  = lr_accept
              i_express    = 'X'
              i_copy       = ''
              i_blind_copy = ''
              i_no_forward = ''.
        ENDLOOP.

        " 抄送人
        LOOP AT pt_ccaccept INTO lv_accept.
          CLEAR lr_accept.
          CALL METHOD cl_cam_address_bcs=>create_internet_address
            EXPORTING
              i_address_string = lv_accept
*             i_address_name   =
*             i_incl_sapuser   =
            RECEIVING
              result           = lr_accept.

          CALL METHOD lr_send->add_recipient
            EXPORTING
              i_recipient  = lr_accept
              i_express    = 'X'
              i_copy       = 'X'
              i_blind_copy = ''
              i_no_forward = ''.
        ENDLOOP.

      CATCH cx_send_req_bcs INTO lr_bcs.
        lv_message = lr_bcs->get_text( ).
        mcr_fill_return lv_message.
      CATCH cx_address_bcs INTO lr_bcs.
        lv_message = lr_bcs->get_text( ).
        mcr_fill_return lv_message.
    ENDTRY.

    TRY.
        CALL METHOD lr_send->set_send_immediately
          EXPORTING
            i_send_immediately = 'X'.

      CATCH cx_send_req_bcs INTO lr_bcs.
        lv_message = lr_bcs->get_text( ).
        mcr_fill_return lv_message.
    ENDTRY.

*&------Send Email
    TRY.
        CALL METHOD lr_send->send
          EXPORTING
            i_with_error_screen = space
          RECEIVING
            result              = lv_send_return.

      CATCH cx_send_req_bcs INTO lr_bcs.
        lv_message = lr_bcs->get_text( ).
        mcr_fill_return lv_message.
    ENDTRY.

    COMMIT WORK AND WAIT.

*    SUBMIT rsconn01 WITH mode = '*'"INT'
*                  WITH output = ''
*                  AND RETURN.

1. 邮件内容为HTML格式时,create_document方法中类型需要传'HTM'

2. 如果需要立即发送,则要调用邮件发送程序,会比较慢

3. 可以为邮件设置重要等级

4. 发件邮箱显示名字 System Notification 可修改

5. ...

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值