SAP向外部发送邮件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

物流与采购部门不会去经常查看SAP中货物的在库时间所以导致经常有呆滞料的产生,为了解决这个问题,在SAP中开发库龄报表给用户查看,并且将马上呆滞的物料发送邮件给飞书

一、实现方式?

使用SAP的标准类CL_BCS进行邮件发送,网上有很多文章对这个类有详细的解读,在这就不在赘述

二、代码实现

在这里插入代码片  "获取发件人,收件人,抄送人的信息
  SELECT
    *
    INTO TABLE @DATA(lt_mail_addr)
    FROM
      zmail
    WHERE
      zprogram = 'ZRMM003' AND
      zactive = 'X'.

  READ TABLE lt_mail_addr INTO DATA(ls_mail_addr) INDEX 1.
  IF sy-subrc eq 0.
    gv_receiver_addr = ls_mail_addr-ZRECEIVER.  "收件人
    gv_send_addr = ls_mail_addr-zsend.          "发件人
    gv_cc_addr = ls_mail_addr-zcc.              "抄送人
  ENDIF.

  "获取附件
  "调用其他程序获取附件内容
  CALL METHOD cl_salv_bs_runtime_info=>set
    EXPORTING
      display  = abap_false
      metadata = abap_false
      data     = abap_true.

  "获取附件内容
  SUBMIT zrmm002 AND RETURN.

  TRY.
      CALL METHOD cl_salv_bs_runtime_info=>get_data_ref
        IMPORTING
          r_data = go_data.
      ASSIGN go_data->* TO <go_data>.
    CATCH cx_salv_bs_sc_runtime_info .
      MESSAGE '调用失败' TYPE 'S' DISPLAY LIKE 'E'.
  ENDTRY.

  cl_salv_bs_runtime_info=>clear_all( ).

  MOVE-CORRESPONDING <go_data> TO gt_data.

  "分割符 #
  gv_tab = cl_bcs_convert=>gc_tab.

  "字段描述
  CONCATENATE gv_string
              '零件号'     gv_tab
              '项目号'     gv_tab
              '中文描述'   gv_tab
              '英文描述'   gv_tab
              '供应商名称' gv_tab
              '保质期'     gv_tab
              '采购周期'   gv_tab
              '类型'       gv_tab
              '保存温度'   gv_tab
              '保存湿度'   gv_tab
              'SQE'        gv_tab
              '备注'       gv_crlf
               INTO gv_string.

*      "字段值
  LOOP AT gt_data INTO gs_data.

    DO 12 TIMES.
      ASSIGN COMPONENT sy-index OF STRUCTURE gs_data TO <fs>.
      IF <fs> IS ASSIGNED.
        IF <fs> IS INITIAL.
          <fs> = '空'.
        ENDIF.
      ENDIF.
    ENDDO.

    gv_ztemperature = gs_data-ztemperature.
    gv_zhumidity = gs_data-zhumidity.
    REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN gv_ztemperature WITH ''.
    REPLACE ALL OCCURRENCES OF '"' IN gv_ztemperature WITH ''.
    REPLACE ALL OCCURRENCES OF '"' IN gv_zhumidity WITH ''.
    REPLACE ALL OCCURRENCES OF '(' IN gs_data WITH ''.
    REPLACE ALL OCCURRENCES OF ')' IN gs_data  WITH ''.

    CONCATENATE gv_string
                gs_data-zpartno      gv_tab
                gs_data-zproject     gv_tab
                gs_data-zchinese     gv_tab
                gs_data-zenglish     gv_tab
                gs_data-zsupplier    gv_tab
                gs_data-zvalidity    gv_tab
                gs_data-zleadtime    gv_tab
                gs_data-ztype        gv_tab
                gv_ztemperature      gv_tab
                gv_zhumidity         gv_tab
                gs_data-zsqe         gv_tab
                gs_data-zremarks     gv_crlf
                INTO gv_string.

    CLEAR:gs_data,
          gv_ztemperature,
          gv_zhumidity.

  ENDLOOP.

  TRY.

      cl_bcs_convert=>string_to_solix(
      EXPORTING
        iv_string   = gv_string
        iv_codepage = '4103'  "suitable for MS Excel, leave empty
        iv_add_bom  = 'X'     "for other doc types
      IMPORTING
        et_solix  = gt_mailhex
        ev_size   = gv_size ).

      "邮件正文
      gv_documnet = '库存到期提醒邮件,系统自动发送请勿回复,附件为到期零件数据,有问题请联系相关部门,谢谢!'.
      APPEND gv_documnet TO gt_contents.

      gv_length = gv_size.

      "创建文档连接
      go_document = cl_document_bcs=>create_document(
                    i_type = 'RAW'
                    i_subject      = '库存到期邮件提醒'
                    i_length      = gv_length
                    i_language     = sy-langu
                    i_importance   = '1'
                    i_text         = gt_contents
                    ).

      gv_subject = '库存到期邮件提醒.XLSX'.


      "添加附件
      CALL METHOD go_document->add_attachment
        EXPORTING
*         I_ATTACHMENT_TYPE    = 'BIN'
          i_attachment_type    = 'XLS'
          i_attachment_subject = gv_subject
          i_attachment_size    = gv_size
          i_att_content_hex    = gt_mailhex.

      "持续发送请求
      go_request = cl_bcs=>create_persistent( ).

      "发件人
      go_sender = cl_sapuser_bcs=>create( gv_send_addr ).
      go_request->set_sender( go_sender ).

      "收件人
      go_bcs_receiver = cl_cam_address_bcs=>create_internet_address( gv_receiver_addr ).

      "添加收件人
      CALL METHOD go_request->add_recipient
        EXPORTING
          i_recipient = go_bcs_receiver.

      "抄送人
      go_bcs_cc = cl_cam_address_bcs=>create_internet_address( gv_cc_addr ).

      "添加抄送人
      CALL METHOD go_request->add_recipient
        EXPORTING
          i_recipient = go_bcs_cc
          i_copy      = 'X'.

      "发送邮件
      go_request->set_send_immediately( 'X' )."设置立即发送
      CALL METHOD go_request->set_document( go_document ).
      CALL METHOD go_request->send(
        EXPORTING
          i_with_error_screen = 'X'
        RECEIVING
          result              = gv_result ).

      COMMIT WORK.

    CATCH cx_bcs INTO go_fail.

  ENDTRY.

三、注意事项

1.应用服务器的hosts文件设置IP与域名的映射关系
2.添加附件时注意特殊符号的影响

总结

这是我第一做关于SAP的邮件功能,对SAP的邮件功能有了一定的了解!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值