• [转]邮件发送功能


    关键字: sost

          在SAP中我们可以配置STMP邮件功能,可以通过SOST来查看邮件状态,在编码中可用FM SO_DOCUMENT_SEND_API1 、SO_NEW_DOCUMENT_ATT_SEND_API1通过编码的方式来发送邮件以及邮件附件。在定义附件表时用solisti1,其长度为Char255,实际中我们导出的每一行记录都会超出这个长度。对XLS格试的附件我们可以用Excel的分隔标签来解决这个问题,对于文字乱码我们可以在附件加charset=utf-16le解决此类问题。同样,也适用于其他类似的乱码问题。

     

     constants: c_tab  type c value cl_abap_char_utilities=>horizontal_tab,
                c_cret type c value cl_abap_char_utilities=>cr_lf,
                c_mimetype type char64
                           value 'APPLICATION/MSEXCEL;charset=utf-16le'.

     

     data:   v_xattach type xstring,

             it_binary_attach type solix_tab.

     

    *---------------------------------------------------------------------------------

    * Convert the internal data to XString

    *----------------------------------------------------------------------------------

     data: lc_descr_ref type ref to cl_abap_structdescr,
             lv_value     type char128,
             lv_temp      type string,
             lv_mid       type string,
             lv_tabix     type sy-tabix.

       field-symbols: <fs_intable>  type any.
       field-symbols: <intable_wa>  type abap_compdescr.

       loop at it_table.

         lv_tabix = sy-tabix.

         clear lv_temp.
         lc_descr_ref ?= cl_abap_typedescr=>describe_by_data( it_table ).
         loop at lc_descr_ref->components assigning <intable_wa>.
           assign component sy-tabix of structure  in_table to <fs_table>.
           lv_value = <fs_table>.
           condense lv_value.
           if sy-tabix = 1.
             lv_temp = lv_value.
             continue.
           endif.
           concatenate lv_temp lv_value
                  into lv_temp separated by c_tab.
         endloop.

         concatenate lv_mid lv_temp c_cret into lv_mid.

       endloop.

    *  Convert string to xstring type
    *  'APPLICATION/MSEXCEL;charset=utf-16le'
       call function 'SCMS_STRING_TO_XSTRING'
         exporting
           text                = lv_mid
           mimetype       = c_mimetype
         importing
           buffer             = v_xattach
         exceptions
           failed              = 1
           others            = 2.

    *  Add the file header for utf-16le.             .
       if sy-subrc = 0.
         concatenate cl_abap_char_utilities=>byte_order_mark_little
                     v_xattach into v_xattach in byte mode.
       endif.

       call function 'SCMS_XSTRING_TO_BINARY'
         exporting
           buffer          = v_xattach
         tables
           binary_tab  = it_binary_attach.

    *---------------------------------------------------------------------------------

    *Send Email

    *----------------------------------------------------------------------------------

       data: lv_title        type so_obj_des,             " Email Title
                lv_email      type adsmtp-smtp_addr,  " Receiver
                lv_attitle     type char50.                     " Attachment Title

       data: send_request  type ref to     cl_bcs,
                 document        type ref to     cl_document_bcs,
                 conlengths      type               so_obj_len,
                 html                 type table of w3html,  
                 sender_id        type ref to     if_sender_bcs,
                 recipient          type ref to     if_recipient_bcs,
                 cc_recipient     type ref to     if_recipient_bcs,
                 sent_to_all      type              os_boolean,
                 bcs_exception type ref to     cx_bcs,
                bcs_message   type              string.

       clear:   lv_email,
                   lv_title,
                   html.      " Email Body Content with html format

       try.
    *     request email function
           clear send_request.
           send_request = cl_bcs=>create_persistent( ).

    *     Create the content of email
           clear document .
           document  =  cl_document_bcs=>create_document(
           i_type    =  'HTM'
           i_text    =  html
           i_length  =  conlengths
           i_subject =  lv_title ).

    *     Add Attachment
           call method document->add_attachment
             exporting
               i_attachment_type      = 'XLS'
               i_attachment_subject = lv_attitle
               i_att_content_hex      = it_binary_attach.

    *     Add document to send request
           call method send_request->set_document( document ).
           clear recipient.

             recipient =
               cl_cam_address_bcs=>create_internet_address( lv_email ).
    *        Add recipient with its respective attributes to send request
             call method send_request->add_recipient
               exporting
                 i_recipient = recipient
                 i_express   = 'X'.

    *     E-mail
           call method send_request->set_status_attributes
             exporting
               i_requested_status = 'E'
               i_status_mail           = 'E'.
           call method send_request->set_send_immediately( 'X' ).

    *      Send document
           call method send_request->send(
            exporting
            i_with_error_screen = 'X'
            receiving
            result = sent_to_all ).
           if sent_to_all = 'X' and sy-batch <> 'X'.
             message 'Send Successfully' type 'I'.
           endif.

           commit work.

         catch cx_bcs into bcs_exception.
           bcs_message = bcs_exception->get_text( ).
           if sy-batch <> 'X'.
             message bcs_exception type 'E'.
           else.
             write: bcs_message.
           endif.
           exit.
       endtry.

  • 相关阅读:
    链表(1) --- 单链表
    .Net性能调优-MemoryPool
    .Net性能调优-WeakReference
    .Net性能调优-ArrayPool
    .Net Core 中的选项Options
    .Net Core配置Configuration源码研究
    .Net中异步任务的取消和监控
    nginx 实现jira反向代理
    k8s-harbor拉取镜像权限问题-imagePullSecrets
    Studio 3T 重置试用日期
  • 原文地址:https://www.cnblogs.com/wequst/p/1513908.html
Copyright © 2020-2023  润新知