当前位置: 首页 > article >正文

abap - 发送邮件,邮件正文带表格和excel附件

发送内容 的数据获取:

  •  正文部分使用cl_document_bcs=>create_document静态方法实现
  •  传入参数为html内表结构 
      CLEAR lo_document .
      lo_document =  cl_document_bcs=>create_document(
                      i_type =    'HTM'
                      i_text =     lt_html
                      i_length =  conlengths
                      i_subject = lv_subject ).
  • 添加附件使用lo_document->add_attachment 
  • 传入参数为二进制数据(Excel的制作使用ZXLSX_WORKBENCH方式,百度搜ZXLSX_WORKBENCH就可以了)
      CALL METHOD lo_document->add_attachment
        EXPORTING
          i_attachment_type    = 'BIN'
          i_attachment_subject = lv_att_subject
          i_attachment_size    = lv_att_size
          i_att_content_hex    = lt_doc_table.

示例代码:

  DATA: lv_subject      TYPE so_obj_des,
        lo_send_request TYPE REF TO cl_bcs,
        lo_document     TYPE REF TO cl_document_bcs,
        conlengths      TYPE so_obj_len,
        bcs_exception   TYPE REF TO cx_bcs,
        bcs_message     TYPE string,
        lt_html         TYPE STANDARD TABLE OF w3html,  "存放HTML5代码的内表
        lw_html         TYPE w3html,                    "工作区
        lo_sender       TYPE REF TO cl_sapuser_bcs,     "发送人
        lv_to           TYPE adr6-smtp_addr,            "接收人
        lo_bcs_to       TYPE REF TO if_recipient_bcs,
        lv_cc           TYPE adr6-smtp_addr,            "抄送人
        lo_bcs_cc       TYPE REF TO if_recipient_bcs,
        lv_rawdata_01   TYPE mime_data,
        lv_doc_size     TYPE i,                                             "文件大小
        lt_doc_table    TYPE solix_tab,                                     "文件内容
        lv_att_size     TYPE so_obj_len,                                    "附件长度
        lv_att_subject  TYPE so_obj_des,                                    "附件名称
        lv_result       TYPE os_boolean,                "发送结果
        lo_fail         TYPE REF TO cx_bcs.             "异常信息

  DEFINE %%add_html.
    lw_html-line = &1.
    APPEND lw_html TO lt_html.
    CLEAR lw_html.
  END-OF-DEFINITION.

  SELECT * INTO TABLE @DATA(lt_emp) FROM ztlbmm_emp_email.

** 邮件主题
  lv_subject = '大仓多库位库存预警表'.
** 邮件正文
  %%add_html:'<html>',
               '<head>',
                 '<meta charset="utf-8" />',
                 '<title></title>',
                 '<style>table {text-align: center;}</style>',
               '</head>',
               '<body>',
                 '<h3>    为避免单个SKU存放多库位交货时,产品不能按批次先进先出原则,导致存在呆滞风险,',
                     '烦请仓库重点关注对产品库位进行管控;单个SKU多库位存放的成品预警明细见附件:</h3>',
                 '<table border="1" width="550px" height="150px" cellspacing="0" align="center">',
                   '<thead><tr>',
                     '<th>装运点</th>',
                     '<th>数据获取时间</th>',
                     '<th>SKU总数</th>',
                     '<th>多库位SKU总数</th>',
                     '<th>多库位SKU占比</th>',
                     '<th>增长率</th>',
                  '</tr></thead>'.
  LOOP AT lt_email INTO lw_email.   "存放表格数据
    %%add_html: '<tbody><tr>',
                  '<td>',  lw_email-name1,  '</td>',
                  '<td>',  lw_email-zdate,  '</td>',
                  '<td>',  lw_email-skun1,  '</td>',
                  '<td>',  lw_email-skun2,  '</td>',
                  '<td>',  lw_email-zcent,  '</td>',
                  '<td>',  lw_email-zupsn,  '</td>',
                '</tr></tbody>'.
    CLEAR:lw_email.
  ENDLOOP.
  %%add_html:   '</table>',
               '</body>',
             '</html>'.
    
  "开源项目ZXLSX_WORKBENCH使用方式
  CALL FUNCTION 'ZXLWB_CALLFORM'
    EXPORTING
      iv_formname         = 'ZMMR05B_TEMP'    "Excel 模板
      iv_context_ref      = lt_excel[]        "Excel 映射内表 会自动填充到模板
      iv_viewer_suppress  = 'X'
    IMPORTING
      ev_document_rawdata = lv_rawdata_01     "把EXCEL 转换为String类型的字符串
    EXCEPTIONS
      OTHERS              = 2.

  "附件部分
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        buffer        = lv_rawdata_01        "传入ZXLSX_WORKBENCH处理的Excel字符串
      IMPORTING
        output_length = lv_doc_size
      TABLES
        binary_tab    = lt_doc_table.        "传出二进制内容
  "附件长度
  lv_att_size = lv_doc_size.
  "附件名称
  lv_att_subject = |{ sy-datum }_多库位预警报表.xlsx|.
 

  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    RETURN.
  ENDIF.
  
  " 开始发送流程
  TRY.
      "正文部分
      CLEAR lo_document .
      lo_document =  cl_document_bcs=>create_document(
                      i_type =    'HTM'         "正文选择HTML格式显示
                      i_text =     lt_html      "显示的内容
                      i_length =  conlengths   
                      i_subject = lv_subject ). "邮件主题
      
      "添加附件
      CALL METHOD lo_document->add_attachment
        EXPORTING
          i_attachment_type    = 'BIN'
          i_attachment_subject = lv_att_subject "附件主题
          i_attachment_size    = lv_att_size   
          i_att_content_hex    = lt_doc_table.  "附件内容

      "创建传输请求对象
      CLEAR lo_send_request.
      lo_send_request = cl_bcs=>create_persistent( ).
      
      "将文件对象放进传输请求对象
      CALL METHOD lo_send_request->set_document( lo_document ).
      
      " 发件人:前提是这个邮箱地址能发邮件,并且不需要密码
      lo_sender = cl_sapuser_bcs=>create( sy-uname ).
      lo_send_request->set_sender( lo_sender ).

      " 收件人
      lv_to = '这里填收件人邮箱'
      lo_bcs_to = cl_cam_address_bcs=>create_internet_address( lv_to ).
      CALL METHOD lo_send_request->add_recipient
         EXPORTING
           i_recipient = lo_bcs_to.

      " 抄送人
      lv_cc = '这里填抄送人邮箱'.
      lo_bcs_cc = cl_cam_address_bcs=>create_internet_address( lv_cc ).
      CALL METHOD lo_send_request->add_recipient
        EXPORTING
          i_recipient = lo_bcs_cc
          i_copy      = 'X'.

      "设置立即发送
      lo_send_request->set_send_immediately( 'X' ).

      "与outbox关联
      lo_send_request->send_request->set_link_to_outbox( 'X' ).

      "发送邮件
      CALL METHOD lo_send_request->send(
        EXPORTING
          i_with_error_screen = 'X'
        RECEIVING
          result              = lv_result ).
    CATCH cx_bcs INTO bcs_exception.
      bcs_message = bcs_exception->get_text( ).
      MESSAGE bcs_exception TYPE 'E'.
      EXIT.
  ENDTRY.

  IF lv_result EQ 'X'.
    COMMIT WORK AND WAIT.   "提交事务
  ELSE.
    ROLLBACK WORK.          "事务回滚
  ENDIF.

  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

    RETURN.
  ENDIF.


http://www.kler.cn/a/232669.html

相关文章:

  • 基于海思soc的智能产品开发(两个图像处理来源)
  • 专题十八_动态规划_斐波那契数列模型_路径问题_算法专题详细总结
  • css:盒子模型
  • 搭建Python2和Python3虚拟环境
  • MybatisPlus入门(十)MybatisPlus-逻辑删除和多记录操作
  • 使用elementUI实现表格行拖拽改变顺序,无需引入外部库
  • 年底我被裁了,大环境不好?
  • 【芯片设计- RTL 数字逻辑设计入门 14 -- 使用子模块实现三输入数的大小比较】
  • router路由跳转的两种模板2.0版本
  • 2.2-学成在线内容管理之课程分类查询+新增课程
  • Linux 36.2@Jetson Orin Nano之Hello AI World!
  • 蓝桥杯刷题day06——平均
  • Peter算法小课堂—枚举优化
  • 前端工程化之:webpack3-5(css module)
  • Redis(十二)Bigkey
  • Qt信号和槽机制(什么是信号和槽,connect函数的形式,按钮的常用信号,QWidget的常用槽,自定义槽函数案例 点击按钮,输出文本)
  • 基于 Python opencv 的人脸识别的酒店客房入侵系统的检测
  • 电脑服务器离线安装.net framework 3.5解决方案(错误:0x8024402c )(如何确定当前系统是否安装NET Framework 3.5)
  • STM32学习笔记——定时器
  • 力扣36.有效的数独
  • AD9361多片同步设计方法
  • Android Studio 安装Flutter插件但是没法创建项目
  • 七、Nacos源码系列:Nacos服务发现
  • 阿里云服务器租用价格表_2024一年_1个月_1小时收费价格表
  • 怎么在bash shell中操作复杂json对象
  • 【玩转408数据结构】线性表——定义和基本操作