邮件发送

*&---------------------------------------------------------------------*
*& Report  Y_CP_MAIL_SEND_DEMO
*&
*&---------------------------------------------------------------------*
*& 用于如何写abap程序发送邮件的DEMO程序
*& 翱翔云天原创
*& 翱翔云天六步法发送邮件
*&---------------------------------------------------------------------*

REPORT y_cp_mail_send_demo.
** 前提之变量定义
*DATA: send_request  TYPE REF TO cl_bcs,
*      document      TYPE REF TO cl_document_bcs,
*      fail          TYPE REF TO cx_bcs,
*      recipient     TYPE REF TO if_recipient_bcs.
*DATA: ls            TYPE string,
*      mailto        TYPE ad_smtpadr,
*      main_text     TYPE bcsy_text,
*      title         TYPE so_obj_des.
*
*ls = '该邮件用于测试演示程序'.
*APPEND ls TO main_text.
*title = '翱翔云天测试邮件'.
*mailto = 'ChenP5@CATLBattery.Local'.
*
*TRY.
**   第一步: 创建发送请求
*    send_request = cl_bcs=>create_persistent( ).
**   第二步: 创建整理发送内容
*    document = cl_document_bcs=>create_document( i_type = 'RAW' i_text = main_text i_subject = title ).
**   第三步: 添加邮件内容到发送请求
*    send_request->set_document( document ).
**   第四步: 邮件地址转换
*    recipient = cl_cam_address_bcs=>create_internet_address( mailto ).
**   第五步: 添加邮件地址到发送请求
*    send_request->add_recipient( recipient ).
**   第六步: 正式发送并提交作业
*    "send_request->set_send_immediately( 'X' ).
*    send_request->send( i_with_error_screen = 'X' ).
*    COMMIT WORK AND WAIT.
*  CATCH cx_bcs INTO fail.
**    MESSAGE ixxx(xx) WITH fail->error_type.
*ENDTRY.
DATA lt_to TYPE bcsy_text WITH HEADER LINE.
lt_to-line 'ChenP5@CATLBattery.Local'.
APPEND lt_to.
CALL FUNCTION 'ZSEND_MAIL_FUNC'
  EXPORTING
    zfrom     'catl-srm@catlbattery.com'   " 发件人(多个的话用;隔开)
    zto       lt_to[]    " 收件人(可多人发送)
*   zcc       =     " 抄送人(可多人抄送)
    i_subject 'IAEF8R8'    " 主题
    i_body    lt_to[]     " 邮件内容
*   i_zattach =     " 文档内容(可多个附件)
*   zip_name  =     " 附件压缩名称(需要压缩填入)
*  IMPORTING
*   msgtyp    =     " 消息类型: S 成功,E 错误,W 警告,I 信息,A 中断
*   msg       =     " 消息文本

  .

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

*&---------------------------------------------------------------------*
*& Report  Y_CP_MAILSEND
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT y_cp_mailsend.
TYPE-POOLSixml.


TYPESBEGIN OF xml_line,
          data(255TYPE x,
       END OF xml_line.

DATAl_xml_table_forecast  TYPE TABLE OF xml_line,
      l_rc                  TYPE i,
      l_xml_size            TYPE i,
      wa_xml                TYPE xml_line.

CONSTANTS gc_mark VALUE 'X'.

* gt_data ASSIGNING <ls_data>.
DATAgt_data TYPE TABLE OF bkpf.

FIELD-SYMBOLS <ls_data> LIKE LINE OF gt_data.

START-OF-SELECTION.
  SELECT FROM bkpf INTO TABLE gt_data UP TO 20 ROWS.

  PERFORM frm_process_xml_data USING 1.

  PERFORM frm_send_email USING 'catl-srm@catlbattery.com'.

*&---------------------------------------------------------------------*
*&      Form  frm_process_xml_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RELTYPE    text
*----------------------------------------------------------------------*
FORM frm_process_xml_data  USING reltype TYPE i.
  DATAl_ixml TYPE REF TO if_ixml,
        l_streamfactory TYPE REF TO if_ixml_stream_factory,
        l_ostream       TYPE REF TO if_ixml_ostream,
        l_renderer      TYPE REF TO if_ixml_renderer,
        l_document      TYPE REF TO if_ixml_document.

  DATAl_element_root  TYPE REF TO if_ixml_element,
        r_element       TYPE REF TO if_ixml_element,
        r_worksheet     TYPE REF TO if_ixml_element,
        r_table         TYPE REF TO if_ixml_element,
        r_column        TYPE REF TO if_ixml_element,
        r_row           TYPE REF TO if_ixml_element,
        r_cell          TYPE REF TO if_ixml_element,
        r_data          TYPE REF TO if_ixml_element,
        l_value         TYPE string.


  DEFINE fill_data.
    r_cell l_document->create_simple_elementname 'Cell' parent r_row ).
    l_value &1.
    r_data l_document->create_simple_elementname 'Data' value l_value parent r_cell ).
    r_data->set_attribute_nsname 'Type' prefix 'ss' value 'String' ).

  END-OF-DEFINITION.

*  create a ixml factory
  l_ixml cl_ixml=>create).

*  create the DOM object model
  l_document l_ixml->create_document).

*  create workbook
  PERFORM create_workbook USING l_document
                                r_worksheet
                                r_table.
*  column formatting
  CASE reltype.
    WHEN 1.
      PERFORM frm_forecast_column_format USING l_document r_table.
    WHEN 2.
    WHEN OTHERS.
  ENDCASE.
  LOOP AT gt_data ASSIGNING <ls_data>.

    r_row l_document->create_simple_elementname 'Row' parent r_table ).


    fill_data:
            <ls_data>-bukrs,
            <ls_data>-belnr,
            <ls_data>-gjahr,
            <ls_data>-blart,
            <ls_data>-bldat,
            <ls_data>-monat,
            <ls_data>-usnam,
            <ls_data>-tcode.

  ENDLOOP.

*   creating a stream factory
  l_streamfactory l_ixml->create_stream_factory).

*   connect internal xml table to stream factory
  CASE reltype.
    WHEN 1.
      l_ostream l_streamfactory->create_ostream_itabletable l_xml_table_forecast ).
    WHEN 2.
    WHEN OTHERS.
  ENDCASE.

*   rendering the document
  l_renderer l_ixml->create_rendererostream l_ostream document l_document ).
  l_rc l_renderer->render).

*   saving the xml document
  l_xml_size l_ostream->get_num_written_raw).



ENDFORM.                    " FRM_PROCESS_XML_DATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_WORKBOOK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_L_DOCUMENT  text
*      -->P_R_WORKSHEET  text
*      -->P_R_TABLE  text
*----------------------------------------------------------------------*
FORM create_workbook  USING    l_document TYPE REF TO if_ixml_document
                               r_worksheet TYPE REF TO if_ixml_element
                               r_table TYPE REF TO if_ixml_element.
  DATAl_element_root        TYPE REF TO if_ixml_element,
        ns_attribute          TYPE REF TO if_ixml_attribute,
        r_element_properties  TYPE REF TO if_ixml_element,
        l_value               TYPE string.

*  create root node 'workbook'
  l_element_root l_document->create_simple_elementname 'Workbook' parent l_document ).
  l_element_root->set_attributename 'xmlns' value 'urn:schemas-microsoft-com:office:spreadsheet' ).

  ns_attribute l_document->create_namespace_declname 'ss' prefix 'xmlns'
                                        uri 'urn:schemas-microsoft-com:office:spreadsheet' ).
  l_element_root->set_attribute_nodens_attribute ).

  ns_attribute l_document->create_namespace_declname 'x' prefix 'xmlns'
                                        uri 'urn:schemas-microsoft-com:office:excel' ).
  l_element_root->set_attribute_nodens_attribute ).

*  create node for document properties
  r_element_properties l_document->create_simple_elementname 'TEST_REPORT' parent l_element_root ).
  l_value sy-uname.
  l_document->create_simple_elementname 'Author' value l_value parent r_element_properties ).

*  worksheet
  r_worksheet l_document->create_simple_elementname 'Worksheet' parent l_element_root ).
  r_worksheet->set_attribute_nsname 'Name' prefix 'ss' value 'Sheet1' ).

*  table
  r_table l_document->create_simple_elementname 'Table' parent r_worksheet ).
  r_table->set_attribute_nsname 'FullColumns' prefix 'x' value '1' ).
  r_table->set_attribute_nsname 'FullRows'    prefix 'x' value '1' ).

ENDFORM.                    " CREATE_WORKBOOK
*&---------------------------------------------------------------------*
*&      Form  FRM_FORECAST_COLUMN_FORMAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_L_DOCUMENT  text
*      -->P_R_TABLE  text
*----------------------------------------------------------------------*
FORM frm_forecast_column_format  USING    l_document TYPE REF TO if_ixml_document
                                          r_table TYPE REF TO if_ixml_element.

  DATAl_element_root TYPE REF TO if_ixml_element,
        r_column       TYPE REF TO if_ixml_element,
        r_row          TYPE REF TO if_ixml_element,
        r_cell         TYPE REF TO if_ixml_element,
        r_data         TYPE REF TO if_ixml_element,
        l_value        TYPE string.
  DATAlv_short       TYPE string,
        lv_medium      TYPE string,
        lv_long        TYPE string,
        lv_exe_date    TYPE char10,
        lv_exe_time    TYPE char10,
        lv_exe_user    TYPE string,
        lt_month_names TYPE TABLE OF t247,
        ls_month_name  TYPE t247,
        lv_date_add    TYPE sy-datum,
        lv_count       TYPE i.


  DEFINE fill_header.
    r_cell l_document->create_simple_elementname 'Cell' parent r_row ).
    r_data l_document->create_simple_elementname 'Data' value &1 parent r_cell ).
    r_data->set_attribute_nsname 'Type' prefix 'ss' value 'String' ).
  END-OF-DEFINITION.

  lv_short '60'.
  lv_medium '90'.
  lv_long '150'.

  WRITE sy-datum TO lv_exe_date.
  CONCATENATE sy-uzeit+0(2':' sy-uzeit+2(2INTO lv_exe_time.
  lv_exe_user sy-uname.

  CALL FUNCTION 'MONTH_NAMES_GET'
    EXPORTING
      language              sy-langu
    TABLES
      month_names           lt_month_names
    EXCEPTIONS
      month_names_not_found 1
      OTHERS                2.
  IF sy-subrc 0.
    READ TABLE lt_month_names WITH KEY mnr sy-datum+4(2INTO ls_month_name.
  ENDIF.

*  columns and width
*  line
  DO TIMES.
    r_column l_document->create_simple_elementname 'Column' parent r_table ).
    r_column->set_attribute_nsname 'Width' prefix 'ss' value lv_short ).
  ENDDO.

  "列数
  DO TIMES.
    r_column l_document->create_simple_elementname 'Column' parent r_table ).
  ENDDO.

*  information row
  r_row l_document->create_simple_elementname 'Row' parent r_table ).
  r_row->set_attribute_nsname 'AutoFitHeight' prefix 'ss' value '1' ).

*  type
  r_cell l_document->create_simple_elementname 'Cell' parent r_row ).
  l_value 'SFLIGHT_FORECAST'.
  r_data l_document->create_simple_elementname 'Data' value l_value parent r_cell ).
  r_data->set_attribute_nsname 'Type' prefix 'ss' value 'String' ).

  DO TIMES.
    r_cell l_document->create_simple_elementname 'Cell' parent r_row ).
  ENDDO.
*  name
  r_cell l_document->create_simple_elementname 'Cell' parent r_row ).
  l_value sy-uname.
  r_data l_document->create_simple_elementname 'Data'  value l_value   parent r_cell ).           " Data
  r_data->set_attribute_nsname 'Type'  prefix 'ss'  value 'String' ).

*   Date
  r_cell l_document->create_simple_elementname 'Cell'  parent r_row ).
  l_value lv_exe_date.
  r_data l_document->create_simple_elementname 'Data'  value l_value   parent r_cell ).           " Data
  r_data->set_attribute_nsname 'Type'  prefix 'ss'  value 'String' ).

*   Time
  r_cell l_document->create_simple_elementname 'Cell'  parent r_row ).
  l_value lv_exe_time.
  r_data l_document->create_simple_elementname 'Data'  value l_value   parent r_cell ).           " Data
  r_data->set_attribute_nsname 'Type'  prefix 'ss'  value 'String' ).

*   Column Headers Row
  r_row l_document->create_simple_elementname 'Row'  parent r_table ).
  r_row->set_attribute_nsname 'AutoFitHeight'  prefix 'ss'  value '1' ).


  fill_header:
               'Airline Code',
               'Flight Connection Number',
               'Country Key',
               'Departure city',
               'Departure airport',
               'Country Key',
               'Arrival city',
               'Destination airport'.

ENDFORM.                    " FRM_FORECAST_COLUMN_FORMAT

*&---------------------------------------------------------------------*
*&      Form  frm_send_email
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PV_EMAIL   text
*----------------------------------------------------------------------*
FORM frm_send_email USING pv_email.
  DATAlc_xls_type TYPE so_obj_tp VALUE 'XLS',
        lc_codepage TYPE abap_encod VALUE '4103',
        lv_string   TYPE string,
        lv_size     TYPE so_obj_len,
        lc_add_attc TYPE so_obj_des VALUE 'popup',
        lt_binary_content TYPE solix_tab.

  DATA:
        gs_solix              TYPE solix,
        binary_content_forecast TYPE solix_tab,
        sent_to_all   TYPE os_boolean,
        main_text     TYPE bcsy_text,
        send_request  TYPE REF TO cl_bcs,
        document      TYPE REF TO cl_document_bcs,
        recipient     TYPE REF TO if_recipient_bcs,
        bcs_exception TYPE REF TO cx_bcs,
        mailto        TYPE ad_smtpadr.

  DATA lv_body TYPE string.
  DATA l_htmlext TYPE soli_tab.

  mailto pv_email.

  LOOP AT l_xml_table_forecast INTO wa_xml.
    CLEAR gs_solix.
    gs_solix-line wa_xml-data.
    APPEND gs_solix TO binary_content_forecast.
  ENDLOOP.

  CLEAR lv_body.
  CLEAR l_htmlext[].
  TRY .
*    -------------create persistent sent request----------------
      send_request cl_bcs=>create_persistent).

*    -------------create and set document with attachment-------
*    create document object from internal table with text

      CONCATENATE lv_body '<html><body><table>' INTO lv_body.


      "here add table content within rows (<tr>) and cells (<td>)
      CONCATENATE lv_body '<tr>'
                          '<td>' 'Dear:' '</td>'
                          '<td>' '' '</td>'
                          '</tr>' INTO lv_body.
      CONCATENATE lv_body '<tr>'
                          '<td>' ' ' '</td>'
                          '<td>' 'Detail information please check the Attachment Excel' '</td>'
                          '</tr>' INTO lv_body.


      "close table
      CONCATENATE lv_body '</table>' INTO lv_body.

      "now close html format
      CONCATENATE lv_body '</body></html>' INTO lv_body.


      "transfer to table type
      CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
        EXPORTING
          text      lv_body
        TABLES
          ftext_tab l_htmlext.


      "Set your document to accept html body
      document cl_document_bcs=>create_documenti_type 'HTM'
                                           i_text l_htmlext
                                           i_subject 'Just for test'  ).


*    add the spread sheet as attachment to document object
      document->add_attachment(
        i_attachment_type lc_xls_type
        i_attachment_subject 'Test_spfli'
        i_att_content_hex binary_content_forecast ).

*    send document object to send request
      send_request->set_documentdocument ).

*    --------------add recipient (e-mail address)--------------
*    create recipient object
      recipient cl_cam_address_bcs=>create_internet_addressmailto ).

*    add recipient object to send request
      send_request->add_recipientrecipient ).

*    --------------send document ------------------------------
      send_request->set_send_immediately'X' ).
      sent_to_all send_request->sendi_with_error_screen 'X' ).

      COMMIT WORK.

      IF sent_to_all IS INITIAL.
        MESSAGE i500(sbcomsWITH mailto.
      ELSE.
        MESSAGE s022(so).
      ENDIF.

*    ---------------exception handling ------------------------
    CATCH cx_bcs INTO bcs_exception.
      MESSAGE i865(soWITH bcs_exception->error_type.
  ENDTRY.



ENDFORM.                    " FRM_SEND_EMAIL

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

INCLUDE ZMMC143_SEL.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text001.
PARAMETERS r1  RADIOBUTTON GROUP   rd USER-COMMAND flag DEFAULT 'X'.
PARAMETERS r2  RADIOBUTTON GROUP   rd .
SELECTION-SCREEN END OF BLOCK b1.


INCLUDE ZMMC143_FRM.
FORM frm_ini_selc .
  text001              = 'MM模块自定义配置表维护'.
  %_r1_%_app_%-text   = '采购组织-采购经理配置表'.
  %_r2_%_app_%-text   = 'MM预算编码审批表'.
ENDFORM.                    " FRM_INI_SELC


FORM get_data .
  IF r_1 EQ 'X'.    "采购组织-采购经理配置表
    PERFORM sub_view_maintenance_call USING 'ZTMM0013'.
  ELSEIF r_2 EQ 'X'."MM预算编码审批表
    PERFORM sub_view_maintenance_call USING 'ZTMM0014'.
  ENDIF.
ENDFORM.                    " GET_DATA


FORM sub_view_maintenance_call  USING    VALUE(p_table).
  CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
    EXPORTING
      action    = 'U' "S 显示 U 修改 T 传输
      view_name = p_table.
ENDFORM.                    " SUB_VIEW_MAINTENANCE_CALL


INITIALIZATION.
  PERFORM frm_ini_selc.
END-OF-SELECTION.
  PERFORM get_data.


/
CALL FUNCTION 'MONTH_NAMES_GET'
    EXPORTING
      language              = sy-langu
    TABLES
      month_names           = lt_month_names
    EXCEPTIONS
      month_names_not_found = 1
      OTHERS                = 2.




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值