SAP AUTOMAIL-自动发邮件功能

总结

针对发送邮件内容封装公用函数,针对不同业务场景,比如邮件统计排名晾晒类,各类业务催办类知会类邮件等,实现AUTO MAIL自动触发邮件。

1. 邮件发送内容:正文,附件,超链接等等

1.1  正文可以是一般内容或表格明细清单,涉及到很多格式的设置,用HTML格式设置。

1.2  附件可以是DOC,  PDF ,EXCEL,JPG/PNG图片等等格式,附件以二进制流XSTRING类型

1.3  邮件中可设置超链接地址,比如用户催办邮件,用户点超链接,可以直接调整到待办单据页面。

2.  邮件发送监控

发送邮件tcode: scot   可以监控邮件发送状态及内容

如果系统中所有邮件发送不出去 跟BASIS排查系统问题;若单据功能发送不出,排查程序的问题。

相关事务代码:SO00,SCOT,SOST

  1. sost : 所有待发送的邮件清单,也可以监视邮件发送状态,也可以在此页面发送邮件!
  2. sbwp:发送邮件功能
  3. so01 :邮件/消息

如果没有接收到邮件,可以在这里查看邮件发送状态。邮件发送一般有延迟。黄灯表示在等待发送中。蓝灯发送成功。

SCOT管理->出站发送请求:

在这里配置邮件主机地址。

ABAP代码实现方式

1. OO方式CL_BCS类发送

1.1 封装发送邮件的公用函数

1.SE37创建公用函数FUNCTION :ZFIFM_0164

2. Import 参数。

入参说明: 

IM_MAIL_CONTENTTYPESTRING                     邮件正文
IM_SUBJECTTYPESO_OBJ_DES                     邮件主题
IM_MAILTYPEBCSY_SMTPA                     主送邮件地址
IM_CCMAILTYPEBCSY_SMTPA                     抄送邮件地址
IM_CCMAIL_BLINDTYPEBCSY_SMTPA                     密抄送邮件地址
IM_SENDERTYPESYST_UNAME'ICP-NOTICE'邮件发送人
IM_OTFTYPETT_ITCOO                     附件PDF格式内表数据
IM_CONTENT_HEXTYPESOLIX_TAB                     附件EXCEL文件
IM_CONTENT_DOCTYPESOLIX_TAB                     附件WORD文件
IM_CONTENT_PNGTYPESOLIX_TAB                     附件图片文件
IT_EXPERTSTYPEZTTFI_GENERAL_RANGE                     Table type for general range table
IM_IMG_TOP_NAMETYPESTRING                     顶部图片
IM_IMG_BOTTOM_NAMETYPESTRING                     底部图片
IM_ATTACHMENT_SUBJECTTYPESO_OBJ_DES                     附件名称
IM_XSTRINGTYPEXSTRING                                                                                                    
IM_EXCEL_SIZETYPESO_OBJ_LEN                     EXCEL文档内容大小
IT_CONTENT_HEXTYPEZTEXCEL_FJ                     邮件附件表类型 
IM_XLSXTYPECHAR1                     附件格式XLSX

 EXCEPTION定义:

FUNCTION ZFIFM_0164.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IM_MAIL_CONTENT) TYPE  STRING OPTIONAL
*"     VALUE(IM_SUBJECT) TYPE  SO_OBJ_DES OPTIONAL
*"     VALUE(IM_MAIL) TYPE  BCSY_SMTPA OPTIONAL
*"     VALUE(IM_CCMAIL) TYPE  BCSY_SMTPA OPTIONAL
*"     VALUE(IM_CCMAIL_BLIND) TYPE  BCSY_SMTPA OPTIONAL
*"     VALUE(IM_SENDER) TYPE  SYST_UNAME DEFAULT 'ICP-NOTICE'
*"     VALUE(IM_OTF) TYPE  TT_ITCOO OPTIONAL
*"     VALUE(IM_CONTENT_HEX) TYPE  SOLIX_TAB OPTIONAL
*"     VALUE(IM_CONTENT_DOC) TYPE  SOLIX_TAB OPTIONAL
*"     VALUE(IM_CONTENT_PNG) TYPE  SOLIX_TAB OPTIONAL
*"     REFERENCE(IT_EXPERTS) TYPE  ZTTFI_GENERAL_RANGE OPTIONAL
*"     VALUE(IM_IMG_TOP_NAME) TYPE  STRING OPTIONAL
*"     VALUE(IM_IMG_BOTTOM_NAME) TYPE  STRING OPTIONAL
*"     VALUE(IM_ATTACHMENT_SUBJECT) TYPE  SO_OBJ_DES OPTIONAL
*"     VALUE(IM_XSTRING) TYPE  XSTRING OPTIONAL
*"     VALUE(IM_EXCEL_SIZE) TYPE  SO_OBJ_LEN OPTIONAL
*"     VALUE(IT_CONTENT_HEX) TYPE  ZTEXCEL_FJ OPTIONAL
*"     VALUE(IM_XLSX) TYPE  CHAR1 OPTIONAL
*"  RAISING
*"      CX_SEND_REQ_BCS
*"----------------------------------------------------------------------
  DATA : LT_MAIL_BODY       TYPE SOLI_TAB,
         LO_CX_SEND_REQ_BCS TYPE REF TO CX_SEND_REQ_BCS,
         LO_EMAIL_BODY      TYPE REF TO CL_DOCUMENT_BCS,
         LO_RECEIVER        TYPE REF TO CL_CAM_ADDRESS_BCS,
         LO_EMAIL           TYPE REF TO CL_BCS,
         LO_SENDER          TYPE REF TO CL_SAPUSER_BCS,
         L_SEND_RESULT      TYPE OS_BOOLEAN,
         COS_MAIL           TYPE C LENGTH 10 VALUE '@XXXX.com',
         COS_MAIL_HZ        TYPE C LENGTH 10 VALUE '@'.

**  设置签名相关变量
  DATA: L_LEN          TYPE SO_OBJ_LEN,
        LT_SOLIX       TYPE SOLIX_TAB,
        LV_IS_FOLDER   TYPE BOOLE_D,
        LV_CONTENT     TYPE XSTRING,
        LV_LOIO        TYPE SKWF_IO,
        LO_MR_API      TYPE REF TO IF_MR_API,
        LO_CONVERT     TYPE REF TO CL_BCS_CONVERT,
        LO_MIME_HELPER TYPE REF TO CL_GBT_MULTIRELATED_SERVICE.

**  邮件正文转换
  CALL FUNCTION 'CONVERT_STRING_TO_TAB'
    EXPORTING
      I_STRING         = IM_MAIL_CONTENT
      I_TABLINE_LENGTH = 255
    TABLES
      ET_TABLE         = LT_MAIL_BODY. "

**  设置集团 LOGO 签名
  IF LO_MR_API IS INITIAL.
    LO_MR_API = CL_MIME_REPOSITORY_API=>IF_MR_API~GET_API( ).

  ENDIF.

  CALL METHOD LO_MR_API->GET
    EXPORTING
      I_URL              = '/SAP/PUBLIC/XXXXLogo4Mail.png'
    IMPORTING
      E_IS_FOLDER        = LV_IS_FOLDER
      E_CONTENT          = LV_CONTENT
      E_LOIO             = LV_LOIO
    EXCEPTIONS
      PARAMETER_MISSING  = 1
      ERROR_OCCURED      = 2
      NOT_FOUND          = 3
      PERMISSION_FAILURE = 4
      OTHERS             = 5.

  L_LEN = XSTRLEN( LV_CONTENT ).

  CREATE OBJECT LO_CONVERT.

  CALL METHOD LO_CONVERT->XSTRING_TO_SOLIX
    EXPORTING
      IV_XSTRING = LV_CONTENT
    RECEIVING
      ET_SOLIX   = LT_SOLIX.

  CREATE OBJECT LO_MIME_HELPER.

  CALL METHOD LO_MIME_HELPER->ADD_BINARY_PART
    EXPORTING
      CONTENT      = LT_SOLIX
      FILENAME     = 'XXXX.jpg'
      EXTENSION    = 'JPG'
      DESCRIPTION  = 'descriptiongif'
      CONTENT_TYPE = 'image/jpg'
      LENGTH       = L_LEN
      CONTENT_ID   = 'XXXX.jpg'.
  CALL METHOD LO_MIME_HELPER->SET_MAIN_HTML
    EXPORTING
      CONTENT     = LT_MAIL_BODY
      FILENAME    = 'XXXX' "'xx'
      DESCRIPTION = 'yy'.


  IF IM_IMG_TOP_NAME IS NOT INITIAL.


    CALL METHOD LO_MR_API->GET
      EXPORTING
*       i_url              = '/SAP/PUBLIC/ZPO/ZAI_HED_EMIAL.PNG' "ZAI_BOTTOM_EMIAL
        I_URL              = '/SAP/PUBLIC/ZPO/' && IM_IMG_TOP_NAME "ZAI_BOTTOM_EMIAL
      IMPORTING
        E_IS_FOLDER        = LV_IS_FOLDER
        E_CONTENT          = LV_CONTENT
        E_LOIO             = LV_LOIO
      EXCEPTIONS
        PARAMETER_MISSING  = 1
        ERROR_OCCURED      = 2
        NOT_FOUND          = 3
        PERMISSION_FAILURE = 4
        OTHERS             = 5.

    L_LEN = XSTRLEN( LV_CONTENT ).

    CREATE OBJECT LO_CONVERT.

    CALL METHOD LO_CONVERT->XSTRING_TO_SOLIX
      EXPORTING
        IV_XSTRING = LV_CONTENT
      RECEIVING
        ET_SOLIX   = LT_SOLIX.

    CALL METHOD LO_MIME_HELPER->ADD_BINARY_PART
      EXPORTING
        CONTENT      = LT_SOLIX
*       filename     = 'ZAI_HED_EMIAL.PNG'
        FILENAME     = |{ IM_IMG_TOP_NAME }|
        EXTENSION    = 'PNG'
        DESCRIPTION  = 'descriptiongif'
        CONTENT_TYPE = 'image/png'
        LENGTH       = L_LEN
*       content_id   = 'ZAI_HED_EMIAL.PNG'.
        CONTENT_ID   = |{ IM_IMG_TOP_NAME }|.

  ENDIF.

  IF IM_IMG_BOTTOM_NAME IS NOT INITIAL.

    CLEAR :LV_IS_FOLDER,LV_CONTENT,LV_LOIO,L_LEN,LO_CONVERT,LT_SOLIX[].
    CALL METHOD LO_MR_API->GET
      EXPORTING
*       i_url              = '/SAP/PUBLIC/ZPO/ZAI_BOTTOM_EMIAL.PNG' "ZAI_BOTTOM_EMIAL
        I_URL              = '/SAP/PUBLIC/ZPO/' && IM_IMG_BOTTOM_NAME "ZAI_BOTTOM_EMIAL
      IMPORTING
        E_IS_FOLDER        = LV_IS_FOLDER
        E_CONTENT          = LV_CONTENT
        E_LOIO             = LV_LOIO
      EXCEPTIONS
        PARAMETER_MISSING  = 1
        ERROR_OCCURED      = 2
        NOT_FOUND          = 3
        PERMISSION_FAILURE = 4
        OTHERS             = 5.

    L_LEN = XSTRLEN( LV_CONTENT ).

    CREATE OBJECT LO_CONVERT.

    CALL METHOD LO_CONVERT->XSTRING_TO_SOLIX
      EXPORTING
        IV_XSTRING = LV_CONTENT
      RECEIVING
        ET_SOLIX   = LT_SOLIX.

*    CREATE OBJECT lo_mime_helper.

    CALL METHOD LO_MIME_HELPER->ADD_BINARY_PART
      EXPORTING
        CONTENT      = LT_SOLIX
*       filename     = 'ZAI_BOTTOM_EMIAL.PNG'
        FILENAME     = |{ IM_IMG_BOTTOM_NAME }|
        EXTENSION    = 'PNG'
        DESCRIPTION  = 'descriptiongif2'
        CONTENT_TYPE = 'image/png'
        LENGTH       = L_LEN
        CONTENT_ID   = |{ IM_IMG_BOTTOM_NAME }|.

  ENDIF.


  TRY.
      CALL METHOD CL_DOCUMENT_BCS=>CREATE_FROM_MULTIRELATED
        EXPORTING
          I_SUBJECT          = IM_SUBJECT
          I_MULTIREL_SERVICE = LO_MIME_HELPER
        RECEIVING
          RESULT             = LO_EMAIL_BODY.
    CATCH CX_DOCUMENT_BCS .
      MESSAGE E672(SO) WITH 'bcs error while creating bcs_doc'.
      EXIT.
    CATCH CX_BCOM_MIME .
      MESSAGE E672(SO) WITH 'mime error while creating bcs_doc'.
      EXIT.
    CATCH CX_GBT_MIME.

  ENDTRY.
*START-OF-MODIFICATION-ON 24.07.2017 15:28:09 ------------------------------*
*Description:发送XLS附件功能
  DATA:LT_CONTENTS  TYPE TABLE OF SOLIX.
  DATA:LT_CONTENTS_DOC  TYPE TABLE OF SOLIX.
  DATA:LT_CONTENTS_EXCEL  TYPE TABLE OF SOLIX.
  DATA:LV_PDF_SIZE  TYPE SO_OBJ_LEN.
  DATA:LV_DESCR     TYPE SO_OBJ_DES.
  DATA:LV_PDF       TYPE XSTRING.
  DATA:LV_SIZE      TYPE SO_OBJ_LEN.
  DATA:L_PDF_LEN    TYPE I,
       LT_PDF_LINES TYPE TABLE OF TLINE.
**附件PDF
  IF NOT IM_OTF[] IS INITIAL.
    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        FORMAT                = 'PDF'
        MAX_LINEWIDTH         = 132
      IMPORTING
        BIN_FILESIZE          = L_PDF_LEN
        BIN_FILE              = LV_PDF        " BINARY FILE
      TABLES
        OTF                   = IM_OTF
        LINES                 = LT_PDF_LINES
      EXCEPTIONS
        ERR_MAX_LINEWIDTH     = 1
        ERR_FORMAT            = 2
        ERR_CONV_NOT_POSSIBLE = 3
        ERR_BAD_OTF           = 4
        OTHERS                = 5.
    IF SY-SUBRC = 0.
    ENDIF.

    LV_SIZE = XSTRLEN( LV_PDF ).
    LT_CONTENTS = CL_DOCUMENT_BCS=>XSTRING_TO_SOLIX( IP_XSTRING =  LV_PDF ).
    CONCATENATE IM_SUBJECT '.PDF' INTO LV_DESCR.
    TRY.
        CALL METHOD LO_EMAIL_BODY->ADD_ATTACHMENT(
            I_ATTACHMENT_TYPE    = 'PDF'
            I_ATT_CONTENT_HEX    = LT_CONTENTS
            I_ATTACHMENT_SIZE    = LV_SIZE
            I_ATTACHMENT_SUBJECT = LV_DESCR ).

      CATCH CX_DOCUMENT_BCS.

    ENDTRY.
  ENDIF.

  IF NOT IM_CONTENT_HEX[] IS INITIAL.
**附件XLS
*    APPEND LINES OF im_content_doc TO lt_contents_doc.
*    IF im_attachment_subject IS INITIAL.
*      CONCATENATE im_subject '.XLS' INTO lv_descr.
*    ELSE.
*      lv_descr = im_attachment_subject.
*    ENDIF.
*    TRY.
*        CALL METHOD lo_email_body->add_attachment(
*            i_attachment_type    = 'XLS'
*            i_att_content_hex    = lt_contents_doc
**           i_attachment_size    = lv_size
*            i_attachment_subject = lv_descr ).
*      CATCH cx_document_bcs.
*
*    ENDTRY.
    APPEND LINES OF IM_CONTENT_HEX TO LT_CONTENTS_EXCEL.
    IF IM_ATTACHMENT_SUBJECT IS INITIAL.
      IF IM_XLSX IS NOT INITIAL.
       CONCATENATE IM_SUBJECT '.XLSX' INTO LV_DESCR.
      ELSE.
       CONCATENATE IM_SUBJECT '.XLS' INTO LV_DESCR.
      ENDIF.
    ELSE.
      LV_DESCR = IM_ATTACHMENT_SUBJECT.
    ENDIF.
    IF IM_EXCEL_SIZE IS NOT INITIAL.
      LV_SIZE = IM_EXCEL_SIZE.
    ENDIF.
    TRY.
        CALL METHOD LO_EMAIL_BODY->ADD_ATTACHMENT(
            I_ATTACHMENT_TYPE    = 'BIN'
            I_ATT_CONTENT_HEX    = LT_CONTENTS_EXCEL
            I_ATTACHMENT_SIZE    = LV_SIZE
            I_ATTACHMENT_SUBJECT = LV_DESCR ).
      CATCH CX_DOCUMENT_BCS.

    ENDTRY.
  ENDIF.

  " 新增发送多个附件功能,按表传进来循环处理  
  LOOP AT  IT_CONTENT_HEX INTO DATA(LS_CONTENT_HEX).
    TRY.
        CALL METHOD LO_EMAIL_BODY->ADD_ATTACHMENT(
            I_ATTACHMENT_TYPE    = 'BIN'
            I_ATT_CONTENT_HEX    = LS_CONTENT_HEX-EXCEL
            I_ATTACHMENT_SIZE    = LS_CONTENT_HEX-SIZE
            I_ATTACHMENT_SUBJECT = LS_CONTENT_HEX-DESCR ).
      CATCH CX_DOCUMENT_BCS.

    ENDTRY.
  ENDLOOP.

  IF NOT IM_XSTRING IS INITIAL.
    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        BUFFER          = IM_XSTRING
        APPEND_TO_TABLE = ABAP_TRUE
      IMPORTING
        OUTPUT_LENGTH   = L_PDF_LEN
      TABLES
        BINARY_TAB      = LT_CONTENTS_DOC.
    IF IM_ATTACHMENT_SUBJECT IS INITIAL.
      CONCATENATE IM_SUBJECT '.XLSX' INTO LV_DESCR.
    ELSE.
      LV_DESCR = IM_ATTACHMENT_SUBJECT.
    ENDIF.
    TRY.
        CALL METHOD LO_EMAIL_BODY->ADD_ATTACHMENT(
            I_ATTACHMENT_TYPE    = 'BIN'
            I_ATT_CONTENT_HEX    = LT_CONTENTS_DOC
            I_ATTACHMENT_SIZE    = LV_SIZE
            I_ATTACHMENT_SUBJECT = LV_DESCR ).
      CATCH CX_DOCUMENT_BCS.

    ENDTRY.
  ENDIF.

  IF NOT IM_CONTENT_DOC[] IS INITIAL.
**附件DOC
    APPEND LINES OF IM_CONTENT_DOC TO LT_CONTENTS.
    CONCATENATE IM_SUBJECT '.DOC' INTO LV_DESCR.
    TRY.
        CALL METHOD LO_EMAIL_BODY->ADD_ATTACHMENT(
            I_ATTACHMENT_TYPE    = 'DOC'
            I_ATT_CONTENT_HEX    = LT_CONTENTS
*           i_attachment_size    = lv_size
            I_ATTACHMENT_SUBJECT = LV_DESCR ).
      CATCH CX_DOCUMENT_BCS.
    ENDTRY.
  ENDIF.

  IF NOT IM_CONTENT_PNG[] IS INITIAL.
**附件为图片
    APPEND LINES OF IM_CONTENT_PNG TO LT_CONTENTS.
    CONCATENATE IM_SUBJECT '.PNG' INTO LV_DESCR.
    TRY.
        CALL METHOD LO_EMAIL_BODY->ADD_ATTACHMENT(
            I_ATTACHMENT_TYPE    = 'PNG'
            I_ATT_CONTENT_HEX    = LT_CONTENTS
*           i_attachment_size    = lv_size
            I_ATTACHMENT_SUBJECT = LV_DESCR ).
      CATCH CX_DOCUMENT_BCS.
    ENDTRY.
  ENDIF.

  LO_EMAIL = CL_BCS=>CREATE_PERSISTENT( ).
  LO_EMAIL->SET_DOCUMENT( LO_EMAIL_BODY ).

** 主送邮件地址设置
  LOOP AT IM_MAIL INTO DATA(LS_MAIL).
**    检查是否有包含集团邮箱后缀 @XXXXX.com,没有则追加
    IF LS_MAIL NS COS_MAIL_HZ.
      LS_MAIL = LS_MAIL && COS_MAIL.
    ENDIF.

    TRY.
        LO_RECEIVER = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LS_MAIL ).
        LO_EMAIL->ADD_RECIPIENT( I_RECIPIENT = LO_RECEIVER ).
      CATCH CX_ADDRESS_BCS.

    ENDTRY.

  ENDLOOP.

** 业务专家邮件地址设置
  LOOP AT IT_EXPERTS ASSIGNING FIELD-SYMBOL(<FS_EXP>).
**    检查是否有包含 集团邮箱后缀 @XXXXX.com,没有则追加
    IF <FS_EXP>-LOW NS COS_MAIL_HZ.
      LS_MAIL = <FS_EXP>-LOW && COS_MAIL.
    ENDIF.

    TRY.
        LO_RECEIVER = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LS_MAIL ).
        LO_EMAIL->ADD_RECIPIENT( I_RECIPIENT = LO_RECEIVER ).
      CATCH CX_ADDRESS_BCS.

    ENDTRY.

  ENDLOOP.

** CC邮件地址设置
  LOOP AT IM_CCMAIL INTO DATA(LS_CCMAIL).
**    检查是否有包含集团邮箱后缀 @XXXXX.com,没有则追加
    IF LS_CCMAIL NS COS_MAIL_HZ.
      LS_CCMAIL = LS_CCMAIL && COS_MAIL.
    ENDIF.

    TRY.
        LO_RECEIVER = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LS_CCMAIL ).
        LO_EMAIL->ADD_RECIPIENT( I_RECIPIENT = LO_RECEIVER I_COPY = ABAP_TRUE ).
      CATCH CX_ADDRESS_BCS.
    ENDTRY.

  ENDLOOP.


** 密抄邮件地址设置
  LOOP AT IM_CCMAIL_BLIND INTO  LS_CCMAIL.
**    检查是否有包含集团邮箱后缀 @XXXXX.com,没有则追加
    IF LS_CCMAIL NS COS_MAIL.
      LS_CCMAIL = LS_CCMAIL && COS_MAIL.
    ENDIF.

    TRY.
        LO_RECEIVER = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( LS_CCMAIL ).
        LO_EMAIL->ADD_RECIPIENT( I_RECIPIENT = LO_RECEIVER I_COPY = ABAP_TRUE I_BLIND_COPY = ABAP_TRUE ).
      CATCH CX_ADDRESS_BCS.
    ENDTRY.

  ENDLOOP.

  "Set Sender and send mail
  TRY.
      LO_SENDER = CL_SAPUSER_BCS=>CREATE( IM_SENDER ).
    CATCH CX_ADDRESS_BCS.

  ENDTRY.

  LO_EMAIL->SET_SENDER( LO_SENDER ).
  LO_EMAIL->SET_STATUS_ATTRIBUTES( I_REQUESTED_STATUS = 'E' I_STATUS_MAIL = 'E' ).""不返回执邮件
**  立即发送
  TRY.
      CALL METHOD LO_EMAIL->SET_SEND_IMMEDIATELY
        EXPORTING
          I_SEND_IMMEDIATELY = 'X'.
    CATCH CX_SEND_REQ_BCS .
*RAISE cx_send_req_bcs.
  ENDTRY.

  TRY.
      CALL METHOD LO_EMAIL->SEND
        RECEIVING
          RESULT = L_SEND_RESULT.

      COMMIT WORK.
    CATCH CX_SEND_REQ_BCS INTO LO_CX_SEND_REQ_BCS.
  ENDTRY.

ENDFUNCTION.

邮件中图片的说明:

1. 邮件中显示的图片在SE80 MIME资源库PUBLIC路径下上传

 2. 用户email中有时会出现图片打不开的问题,有时需要手工点击邮件加载图片才能出来,

 需要检查outlook设置了图片拦截之类。

1.2 调用封装函数
  DATA lt_mail    TYPE  bcsy_smtpa.
  DATA ls_mail    LIKE  LINE OF lt_mail.
 "邮件
  DATA: lv_subject TYPE  so_obj_des, "主题
        lt_mail    TYPE  bcsy_smtpa, "收件人
        lt_mail_cc TYPE  bcsy_smtpa, "抄送人
        ls_mail    LIKE  LINE OF lt_mail.

  "附件
  DATA : lt_excel      TYPE  ztexcel_fj,
         lv_excel_name TYPE string, "EXCEL 附件名
         lv_xstring1   TYPE xstring, "附件一
         lv_xstring2   TYPE xstring, "附件二
         lv_xstring3   TYPE xstring. "附件三.

  DATA:lv_row_1 TYPE zexcel_cell_row.
  DATA:lv_row_2 TYPE zexcel_cell_row.
  "读取EXCEL
  DATA: lo_excel_reader1 TYPE REF TO zif_excel_reader,
        lo_excel_reader2 TYPE REF TO zif_excel_reader,
        lo_excel_reader3 TYPE REF TO zif_excel_reader.
*  DATA LO__EXCEL_WORKSHEET TYPE REF TO ZCL_EXCEL_WORKSHEET .
  "style类
  DATA:lo_style TYPE REF TO zcl_excel_style.
  DATA:lv_style_guid TYPE zexcel_cell_style."style的guid
  "border类-边框
  DATA:lo_border TYPE REF TO zcl_excel_style_border.

  DATA:lv_sender TYPE syst_uname.
  lv_sender = 'V-XXXX'."发送人

  DATA: lv_content TYPE string .
 
  ls_mail = sy-uname && '@XXXX.COM'.
  COLLECT ls_mail INTO pt_mail_cc.

    "转换为二进制
    "附件1
"写到EXCEL 按页签名获取页签
    DATA(lo_worksheet_1_1) = lo_excel1->get_worksheet_by_name( ip_sheet_name = '月度XX统计' ). "附件1 页签1
    DATA(lo_worksheet_1_2) = lo_excel1->get_worksheet_by_name( ip_sheet_name = 'XXX明细表' )."附件1 页签2

      "填充EXCEL 附件1 页签2
      lv_row_1 = lv_row_1 + 1 .
      lo_worksheet_1_2->set_cell( ip_column = 'A'  ip_row = lv_row_1 ip_style = lv_style_guid ip_value = ls_data_mx-bukrs   ). "公司
      lo_worksheet_1_2->set_cell( ip_column = 'B'  ip_row = lv_row_1 ip_style = lv_style_guid ip_value = ls_data_mx-butxt   ). "公司名称
      lo_worksheet_1_2->set_cell( ip_column = 'C'  ip_row = lv_row_1 ip_style = lv_style_guid ip_value = ls_data_mx-sqdnr   ). "申请单号
      lo_worksheet_1_2->set_cell( ip_column = 'D'  ip_row = lv_row_1 ip_style = lv_style_guid ip_value = ls_data_mx-fkdnr   ). "付款单号


    lv_excel_name = '附件1-' && p_month+0(4) && '年' && p_month+4(2) && '月XX情况统计报告-' && ls_bukrs-nupnm && '.xlsx'.
    PERFORM frm_excel_to_binary USING lt_excel lo_excel1 lv_excel_name .

    "正文
    lv_content =   '<html>'
                   && '<head>'
                   && '<meta http-equiv="Content-Type" content="text/html;charset=gb2312">'
                   && '</head>'
                   && '<body>'
                   && '<font face="楷体";size="3"; style="text-indent:2em ; line-height:180%" >'
                   && '<small>各位领导好,<br/>'
                   && '&nbsp&nbsp&nbsp&nbsp每个月将下发XX月度分析报告。'
                   && p_month+0(4) &&'年'&& p_month+4(2) &&'月XX分析报告如下:<br/>'.

    "拼接正文lv_content 

  CALL FUNCTION 'ZFIFM_0164'
      EXPORTING
        im_mail_content = lv_content
        im_subject      = lv_subject
        im_sender       = lv_sender
        im_mail         = lt_mail
        im_ccmail       = lt_mail_cc
*       im_xstring      = lv_xstring.
        it_content_hex  = lt_excel[]
*       IM_EXCEL_SIZE   = LV_SIZE.
    IF  sy-subrc = 0 .
    ENDIF.




*&---------------------------------------------------------------------*
*&      Form  FRM_EXCEL_TO_BINARY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_excel_to_binary USING pt_excel TYPE ztexcel_fj
                               po_excel TYPE REF TO zcl_excel
                               pv_excel_name .

  "转换为二进制
  DATA: lv_file         TYPE xstring,
        lv_bytecount    TYPE i,
        lv_xstring      TYPE  xstring,
        lo_excel_writer TYPE REF TO zif_excel_writer,
        lt_file_tab     TYPE solix_tab.
  CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007.

  DATA lv_excelname TYPE string .

  lv_file = lo_excel_writer->write_file( po_excel ).

  lv_xstring = lv_file.

  " Convert to binary
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer        = lv_file
    IMPORTING
      output_length = lv_bytecount
    TABLES
      binary_tab    = lt_file_tab.

*    LT_EXCEL[] = LT_FILE_TAB[].
  DATA  lv_size TYPE so_obj_len.
  lv_size = lv_bytecount.

  APPEND INITIAL LINE TO pt_excel[] ASSIGNING FIELD-SYMBOL(<lfs_excel>) .
  <lfs_excel>-excel[] = lt_file_tab[] .
  <lfs_excel>-size = lv_size .
  <lfs_excel>-descr = pv_excel_name .

ENDFORM.

2. 调sap标准funciton发送邮件

发送邮件(不能带附件)

   CALL FUNCTION 'ZMAIL_SEND_01'
     EXPORTING
       mail_tittle = '保税仓调入数量超额提示'
     TABLES
       i_objtxt_u  = gt_txt[]          "发送的数据
       i_reclist_u = gt_email[].     "收件人
commit_work                = 'X'
*--------------------------------------------------------------------*
***相关事务码:SO00,SCOT,SOST。
*******调FM方法发送邮件
**附件是EXCEL文件

***相关定义
DATA: ls_docdata   TYPE sodocchgi1, "邮件抬头信息
      lt_packlist  TYPE TABLE OF sopcklsti1 WITH HEADER LINE, "传输内容格式
      lt_contxt    TYPE TABLE OF solisti1   WITH HEADER LINE, "邮件正文
      lt_conhex    TYPE TABLE OF solix      WITH HEADER LINE, "二进制内容
      lt_objbin    TYPE TABLE OF solisti1   WITH HEADER LINE, "附件内容
      lt_objheader TYPE TABLE OF solisti1   WITH HEADER LINE, "附件名称
      lt_receivers TYPE TABLE OF somlreci1  WITH HEADER LINE. "收件人信息

DATA: lv_tablines TYPE i,
      lv_string   TYPE string,
      lv_mimetype TYPE char64 VALUE 'APPLICATION/MSEXCEL;charset=utf-16le',
      lv_xattach  TYPE xstring.

DATA: lt_spfli TYPE TABLE OF spfli WITH HEADER LINE.

CONSTANTS:
  lc_tab  TYPE c VALUE cl_bcs_convert=>gc_tab,  "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
  lc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf. "CL_ABAP_CHAR_UTILITIES=>CR_LF

***邮件主题
CLEAR ls_docdata.
ls_docdata-obj_name  = 'EMAIL'.        "文档名称 名称随便取
ls_docdata-obj_descr = 'THIS IS A TEST MAIL!'. "邮件的主题

***邮件正文(手动赋值或取表数据)
CLEAR:lt_contxt,lt_contxt[].
lt_contxt-line = 'Hello Dear:'.
APPEND lt_contxt.
lt_contxt-line = '  HAVE A NICE DAY!'.
APPEND lt_contxt.
lt_contxt-line = '           FROM:XXX.'.
APPEND lt_contxt.

*添加邮件正文内容格式
CLEAR lv_tablines.
DESCRIBE TABLE lt_contxt LINES lv_tablines.
READ     TABLE lt_contxt INDEX lv_tablines.
ls_docdata-doc_size = ( lv_tablines - 1 ) * 255 + strlen( lt_contxt ). "文档的大小

CLEAR:lt_packlist,lt_packlist[].
lt_packlist-head_start = 1.
lt_packlist-head_num   = 0.
lt_packlist-body_start = 1.
lt_packlist-body_num   = lv_tablines.
lt_packlist-doc_type   = 'RAW'.
APPEND lt_packlist.

***收件人(手动赋值或取表数据)
CLEAR:lt_receivers,lt_receivers[].
lt_receivers-receiver = 'xxxxxxxxx@qq.com'.  "接收人邮箱
lt_receivers-rec_type = 'U'.               "收件人类型,具体可看字段的域值
lt_receivers-express  = 'X'.              "快件
APPEND lt_receivers.

***附件内容(内表内容做附件)
PERFORM frm_add_attachment.

***发送邮件
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
  EXPORTING
    document_data              = ls_docdata "邮件标题
    put_in_outbox              = 'X'
    commit_work                = 'X'
* IMPORTING
*   SENT_TO_ALL                =
*   NEW_OBJECT_ID              =
  TABLES
    packing_list               = lt_packlist "传输内容格式
    object_header              = lt_objheader "附件名称
*   CONTENTS_BIN               =
    contents_txt               = lt_contxt "邮件文字内容
    contents_hex               = lt_conhex "二进制内容
*   OBJECT_PARA                =
*   OBJECT_PARB                =
    receivers                  = lt_receivers "接收人列表
  EXCEPTIONS
    too_many_receivers         = 1
    document_not_sent          = 2
    document_type_not_exist    = 3
    operation_no_authorization = 4
    parameter_error            = 5
    x_error                    = 6
    enqueue_error              = 7
    OTHERS                     = 8.

IF sy-subrc NE 0.
  MESSAGE '邮件发送失败' TYPE 'E'.

ELSE.
* 如果不自动送,加上执行邮件立即发送程序代码
  SUBMIT rsconn01 WITH mode = 'INT'
                  WITH output = 'X' "显示发送结果  空则不弹窗
                  AND RETURN.
  MESSAGE '发送成功' TYPE 'S'.
ENDIF.

*&---------------------------------------------------------------------*
*& Form FRM_ADD_ATTACHMENT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_add_attachment .

  CLEAR:lt_spfli,lt_spfli[].
  SELECT * FROM spfli
  INTO CORRESPONDING FIELDS OF TABLE lt_spfli.

  IF lt_spfli[] IS NOT INITIAL.
    LOOP AT lt_spfli.
      CONCATENATE lv_string
              lt_spfli-carrid    lc_tab
              lt_spfli-connid    lc_tab
              lt_spfli-countryfr lc_tab
              lt_spfli-cityfrom  lc_tab
              lt_spfli-cityfrom  lc_tab
              lt_spfli-countryto lc_tab
              lt_spfli-cityto    lc_tab
              lt_spfli-airpto    lc_crlf
              INTO lv_string.
    ENDLOOP.

* Convert string to xstring type
* 'APPLICATION/MSEXCEL;charset=utf-16le'
    CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
      EXPORTING
        text     = lv_string
        mimetype = lv_mimetype
      IMPORTING
        buffer   = lv_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
      lv_xattach INTO lv_xattach IN BYTE MODE.
    ENDIF.

    CLEAR:lt_conhex,lt_conhex[].
    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
      EXPORTING
        buffer     = lv_xattach
      TABLES
        binary_tab = lt_conhex.

***设置附件名称***********
    lt_objheader = 'SPFLI.txt'.
    APPEND lt_objheader.

***计算附件大小分配空间*******************
    CLEAR lv_tablines.
    DESCRIBE TABLE lt_conhex LINES lv_tablines.
    CLEAR lt_packlist.
    lt_packlist-transf_bin = 'X'.
    lt_packlist-head_start = 1.
    lt_packlist-head_num   = 0.
    lt_packlist-body_start = 1.
    lt_packlist-body_num   = lv_tablines.
    lt_packlist-doc_type   = 'XLS'.
    lt_packlist-obj_name   = 'ATTACHMENT'.
    lt_packlist-obj_descr  = 'spfli'.
    lt_packlist-doc_size   =  lv_tablines * 255.
    APPEND lt_packlist.

  ENDIF.

ENDFORM.

其他应用1

1.SE37创建FUNCTION :Z_COM_AUTO_MAIL

2. Import 参数。

3.Export 参数

4.table参数

5.table参数中ZTMAILADD邮件地址表参数,SE11创建表类型ZTMAILADD

SE11创建结构ZSMAILADD

SE11创建数据元素

SE11创建域

6. 源码如下: 

FUNCTION Z_COM_AUTO_MAIL.
*"----------------------------------------------------------------------
*"*"區域介面:
*"  IMPORTING
*"     REFERENCE(I_SUBJECT) TYPE  SO_OBJ_DES OPTIONAL
*"     REFERENCE(I_MAILTO) TYPE  CHAR255 OPTIONAL
*"     REFERENCE(I_MAILCC) TYPE  CHAR255 OPTIONAL
*"  EXPORTING
*"     VALUE(E_RETURN) TYPE  CHAR255
*"  TABLES
*"      T_MAILADD TYPE  ZTMAILADD OPTIONAL
*"      T_CONTENT TYPE  SOLI_TAB
*"      T_ATTACHMENT TYPE  SOLI_TAB OPTIONAL
*"----------------------------------------------------------------------
 
  DATA:LO_DOCUMENT      TYPE REF TO CL_DOCUMENT_BCS, "用来放发送的内容的类
       LIT_CONTENTS     TYPE SOLI_TAB,
       L_CC             TYPE ADR6-SMTP_ADDR,
       L_TO             TYPE ADR6-SMTP_ADDR,
       L_BCS_TO         TYPE REF TO IF_RECIPIENT_BCS,
       L_BCS_CC         TYPE REF TO IF_RECIPIENT_BCS,
       LO_SENDER        TYPE REF TO CL_SAPUSER_BCS,
       L_RESULT         TYPE OS_BOOLEAN,
*      cl_bcs发送邮件主要用到的功能类, 包括创建发送请求, 添加发送内容,添加发送地址, 到最终的发送指令发出.
       W_DOCUMENT       TYPE REF TO CL_BCS,
       L_FILE_SIZE_CHAR TYPE SO_OBJ_LEN,
       L_FILEN          TYPE STRING,
       LIT_MAILHEX      TYPE SOLIX_TAB,
       L_FILE_SIZE      TYPE I,
       L_RC             TYPE I,
       L_STRING         TYPE STRING,
       L_SUBJECT        TYPE SO_OBJ_DES,
*      cx_bcs异常类, 捕捉发送邮件过程中出现的异常.
       LO_FAIL          TYPE REF TO CX_BCS.
* 邮件正文
  LOOP AT T_CONTENT INTO L_STRING.
    APPEND L_STRING  TO LIT_CONTENTS.
  ENDLOOP.
  TRY.
*     CREATE THE DOCUMENT WITH CONTENTS
      CREATE OBJECT LO_DOCUMENT.
      LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
          I_TYPE       = 'HTM'
          I_SUBJECT    = I_SUBJECT  "邮件标题
          I_LENGTH     = L_FILE_SIZE_CHAR
          I_LANGUAGE   = SY-LANGU
          I_IMPORTANCE = '1'
          I_TEXT       = LIT_CONTENTS
          ).
 
* 附件类型为BIN接收任何类型的附件,包括视频、音频文件等。
* 读取附件
      IF T_ATTACHMENT IS NOT INITIAL.
        LOOP AT T_ATTACHMENT INTO DATA(P_FILE).
          L_FILEN = P_FILE.
          CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
            EXPORTING
              FILENAME                = L_FILEN
              FILETYPE                = 'BIN'  "
*             has_field_separator     = SPACE
*             header_length           = 0
*             read_by_line            = ''
*             dat_mode                = SPACE
*             codepage                = SPACE
*             ignore_cerr             = ABAP_TRUE
*             replacement             = '#'
*             virus_scan_profile      =
            IMPORTING
              FILELENGTH              = L_FILE_SIZE
*             header                  =
            CHANGING
              DATA_TAB                = LIT_MAILHEX
*             isscanperformed         = SPACE
            EXCEPTIONS
              FILE_OPEN_ERROR         = 1
              FILE_READ_ERROR         = 2
              NO_BATCH                = 3
              GUI_REFUSE_FILETRANSFER = 4
              INVALID_TYPE            = 5
              NO_AUTHORITY            = 6
              UNKNOWN_ERROR           = 7
              BAD_DATA_FORMAT         = 8
              HEADER_NOT_ALLOWED      = 9
              SEPARATOR_NOT_ALLOWED   = 10
              HEADER_TOO_LONG         = 11
              UNKNOWN_DP_ERROR        = 12
              ACCESS_DENIED           = 13
              DP_OUT_OF_MEMORY        = 14
              DISK_FULL               = 15
              DP_TIMEOUT              = 16
              NOT_SUPPORTED_BY_GUI    = 17
              ERROR_NO_GUI            = 18
              OTHERS                  = 19.
          IF SY-SUBRC <> 0.
            CASE SY-SUBRC.
              WHEN   '1' .
                E_RETURN = 'FILE_OPEN_ERROR         ' .
              WHEN   '2' .
                E_RETURN = 'FILE_READ_ERROR         ' .
              WHEN   '3' .
                E_RETURN = 'NO_BATCH                ' .
              WHEN   '4' .
                E_RETURN = 'GUI_REFUSE_FILETRANSFER ' .
              WHEN   '5' .
                E_RETURN = 'INVALID_TYPE            ' .
              WHEN   '6' .
                E_RETURN = 'NO_AUTHORITY            ' .
              WHEN   '7' .
                E_RETURN = 'UNKNOWN_ERROR           ' .
              WHEN   '8' .
                E_RETURN = 'BAD_DATA_FORMAT         ' .
              WHEN   '9' .
                E_RETURN = 'HEADER_NOT_ALLOWED      ' .
              WHEN   '10'.
                E_RETURN = 'SEPARATOR_NOT_ALLOWED   ' .
              WHEN   '11'.
                E_RETURN = 'HEADER_TOO_LONG         ' .
              WHEN   '12'.
                E_RETURN = 'UNKNOWN_DP_ERROR        ' .
              WHEN   '13'.
                E_RETURN = 'ACCESS_DENIED           ' .
              WHEN   '14'.
                E_RETURN = 'DP_OUT_OF_MEMORY        ' .
              WHEN   '15'.
                E_RETURN = 'DISK_FULL               ' .
              WHEN   '16'.
                E_RETURN = 'DP_TIMEOUT              ' .
              WHEN   '17'.
                E_RETURN = 'NOT_SUPPORTED_BY_GUI    ' .
              WHEN   '18'.
                E_RETURN = 'ERROR_NO_GUI            ' .
              WHEN OTHERS.
                E_RETURN = 'OTHERS mistake' .
            ENDCASE.
* Implement suitable error handling here
            RETURN.
          ENDIF.
* 附件长度,这个很重要,一定要有
          L_FILE_SIZE_CHAR = L_FILE_SIZE_CHAR.
*     获取附件名字及附件文件类型
          DATA(L_FILE) = P_FILE .
          DO .
            SPLIT L_FILE AT '\' INTO DATA(LV_TMP) L_FILE .
            SEARCH L_FILE FOR '\' .
            IF SY-SUBRC <> 0.
              EXIT .
            ENDIF.
          ENDDO.
          L_SUBJECT = L_FILE .
*     添加附件,可以添加多个附件
          CALL METHOD LO_DOCUMENT->ADD_ATTACHMENT
            EXPORTING
              I_ATTACHMENT_TYPE    = 'BIN'
              I_ATTACHMENT_SUBJECT = L_SUBJECT         "附件名称
              I_ATTACHMENT_SIZE    = L_FILE_SIZE_CHAR  "附件大小
              I_ATT_CONTENT_HEX    = LIT_MAILHEX.      "附件内容
        ENDLOOP.
      ENDIF.
*     CREATING PERSISTENT OBJECT WILL ALLOW YOU TO SET THE DOCUMENT IN THE MAIL
      W_DOCUMENT = CL_BCS=>CREATE_PERSISTENT( ).
*     发件人
*     前提是这个邮箱地址能发邮件,并且不需要密码
      LO_SENDER = CL_SAPUSER_BCS=>CREATE( SY-UNAME ).
      W_DOCUMENT->SET_SENDER( LO_SENDER ).
 
*     收件人
      IF I_MAILTO IS NOT INITIAL.
        L_TO = I_MAILTO.
        L_BCS_TO = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( L_TO ).
*     Add recipient to send request
        CALL METHOD W_DOCUMENT->ADD_RECIPIENT
          EXPORTING
            I_RECIPIENT = L_BCS_TO.
      ENDIF.
*    抄送人
      IF I_MAILCC IS NOT INITIAL.
        L_CC = I_MAILCC.  "
        L_BCS_CC = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( L_CC ).
        CALL METHOD W_DOCUMENT->ADD_RECIPIENT
          EXPORTING
            I_RECIPIENT = L_BCS_CC
            I_COPY      = 'X'.
        " i_express   = 'X'.
      ENDIF.
      "邮件地址表有值。
      IF T_MAILADD IS NOT INITIAL.
        LOOP AT T_MAILADD INTO DATA(LS_MAILADD).
          IF LS_MAILADD-MAILTYPE = 'T'.
            L_TO = LS_MAILADD-MAILADDR.
            L_BCS_TO = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( L_TO ).
*     Add recipient to send request
            CALL METHOD W_DOCUMENT->ADD_RECIPIENT
              EXPORTING
                I_RECIPIENT = L_BCS_TO.
          ELSEIF LS_MAILADD-MAILTYPE = 'C'.
            L_CC = LS_MAILADD-MAILADDR.  "
            L_BCS_CC = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( L_CC ).
 
            CALL METHOD W_DOCUMENT->ADD_RECIPIENT
              EXPORTING
                I_RECIPIENT = L_BCS_CC
                I_COPY      = 'X'.
            " i_express   = 'X'.
          ENDIF.
        ENDLOOP.
      ENDIF.
*     SEND THE MAIL
      W_DOCUMENT->SET_SEND_IMMEDIATELY( 'X' ).  "设置立即发送
      W_DOCUMENT->SEND_REQUEST->SET_LINK_TO_OUTBOX( 'X' ). "与outbox关联
      CALL METHOD W_DOCUMENT->SET_DOCUMENT( LO_DOCUMENT ).
      CALL METHOD W_DOCUMENT->SEND(
        EXPORTING
          I_WITH_ERROR_SCREEN = 'X'
        RECEIVING
          RESULT              = L_RESULT ).
    CATCH CX_BCS INTO LO_FAIL.
  ENDTRY.
* YOU CAN VERIFY THE STATUS IN THE LIST, YOU CAN ALSO SUBMIT THIS AS A BACKGROUND JOB.
  IF L_RESULT = 'X'.
    COMMIT WORK AND WAIT.
  ELSE.
    ROLLBACK WORK.
    E_RETURN = '发送失败' .
  ENDIF.
ENDFUNCTION.

邮件附件表可添加多个附件及多个不同的邮件种类,ABAP获取附件的方法可查看另一篇博文:ABAP选择本地文件,获取文件地址

以上,function已经创建完成,可以使用了。返回消息为空就代表发送成功了。下面我们创建将测试程序。

se38创建测试程序(代码中的邮件地址改为自己的哟,目前为本人邮箱)。

*&---------------------------------------------------------------------*
*& Report ZLQT_COM_AUTO_MAIL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZLQT_COM_AUTO_MAIL.
 
DATA I_SUBJECT    TYPE SO_OBJ_DES .              "邮件主题
DATA I_MAILTO     TYPE CHAR255    .              "收件人
DATA I_MAILCC     TYPE CHAR255    .              "抄送
DATA E_RETURN     TYPE CHAR255    .              "返回消息
DATA T_MAILADD    TYPE TABLE OF ZSMAILADD WITH HEADER LINE   .   "邮件地址表
DATA T_CONTENT    TYPE TABLE OF SOLI      WITH HEADER LINE   .   "邮件正文内容
DATA T_ATTACHMENT TYPE TABLE OF SOLI      WITH HEADER LINE   .   "邮件附件地址
I_SUBJECT = '邮件主题' .
*T_MAILADD-MAILTYPE = 'T' .
*T_MAILADD-MAILADDR = 'szmis11@lotestech.com' .
*APPEND T_MAILADD .
*
*T_MAILADD-MAILTYPE = 'C' .
*T_MAILADD-MAILADDR = '979621537@QQ.com' .
*APPEND T_MAILADD .
I_MAILTO  = 'szmis11@lotestech.com'.
I_MAILCC  = '979621537@QQ.com' .
T_CONTENT-LINE = SY-UNAME && SY-DATUM  .
APPEND T_CONTENT .
T_ATTACHMENT-LINE = 'C:\Users\szmis11\Desktop\WeChat 圖片_202]]]]]01109190311.jpg' .
APPEND T_ATTACHMENT.
T_ATTACHMENT-LINE = 'C:\Users\szmis11\Desktop\automail.docx' .
APPEND T_ATTACHMENT.
CALL FUNCTION 'Z_COM_AUTO_MAIL'
 EXPORTING
   I_SUBJECT          = I_SUBJECT
   I_MAILTO           = I_MAILTO
   I_MAILCC           = I_MAILCC
 IMPORTING
   E_RETURN           = E_RETURN
  TABLES
    T_MAILADD          = T_MAILADD
    T_CONTENT          = T_CONTENT
    T_ATTACHMENT       = T_ATTACHMENT
          .
WRITE : E_RETURN .

以上为-自动发邮件FUNCTION,AUTOMAIL功能全部内容,若代码存在问题,欢迎评论指正。

应用效果2

邮件内容形式比如:

排名统计类晾晒邮件:

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值