ABAP 发送邮件

* 变量定义
  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.
  DATA LO_SENDER TYPE REF TO IF_SENDER_BCS.

  DATA: LV_DATE TYPE C LENGTH 10.
  DATA: LT_EMAIL TYPE TABLE OF ZTIF_EMAIL,
        LS_EMAIL TYPE ZTIF_EMAIL.
  DATA: LT_SEND TYPE TABLE OF TY_OUTPUT,
        LS_SEND TYPE TY_OUTPUT.

  LV_DATE = SY-DATUM+0(4) && '-' && SY-DATUM+4(2) && '-' && SY-DATUM+6(2).

  LT_SEND[] = GT_OUTPUT[].
  DELETE LT_SEND WHERE SLBOX EQ ''.

  IF LT_SEND IS NOT INITIAL.
    SELECT *
      INTO TABLE LT_EMAIL
      FROM ZTIF_EMAIL
      FOR ALL ENTRIES IN LT_SEND
      WHERE GP EQ LT_SEND-GP.
    SORT LT_SEND BY GP.
  ENDIF.

  CLEAR TITLE.
*  TITLE
  CONCATENATE  'SAP系统过账错误日志-' SY-DATUM INTO TITLE.

  DATA: LV_STR1 TYPE STRING.
  DATA: LV_STR2 TYPE STRING.
  DATA: LV_STR3 TYPE STRING.

  LOOP AT LT_EMAIL ASSIGNING FIELD-SYMBOL(<LW_EMAIL>).
    AT NEW GP.
      CLEAR MAIN_TEXT[].
      LOOP AT LT_SEND INTO LS_SEND WHERE GP EQ <LW_EMAIL>-GP.
        CLEAR: LV_STR1,LV_STR2,LV_STR3,LS.
        LV_STR1 = '接口编号:' && LS_SEND-IN_NO.
        LV_STR2 = '接口描述:' && LS_SEND-IF_NM.
        LV_STR3 = '错误条目数:' && LS_SEND-ERR_ROWS && ';'.
        CONCATENATE LV_STR1 LV_STR2 LV_STR3 INTO LS SEPARATED BY SPACE.
        APPEND LS TO MAIN_TEXT.

        CLEAR LS_SEND.
      ENDLOOP.

      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 ).
        CATCH CX_BCS INTO FAIL.
          MESSAGE S001(00) WITH FAIL->ERROR_TYPE FAIL->ERROR_TEXT.
      ENDTRY.
    ENDAT.

    TRY .
        CLEAR MAILTO.
        "收件人
        IF <LW_EMAIL>-SEND EQ 'X'.
          MAILTO = <LW_EMAIL>-E_EMAIL.
          SHIFT MAILTO LEFT DELETING LEADING SPACE.
          TRANSLATE MAILTO TO LOWER CASE.
          RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
          CALL METHOD SEND_REQUEST->ADD_RECIPIENT
            EXPORTING
              I_RECIPIENT  = RECIPIENT
              I_EXPRESS    = 'X'
              I_COPY       = ''
              I_BLIND_COPY = ' '
              I_NO_FORWARD = ' '.
        ENDIF.

        CLEAR MAILTO.
        "抄送人
        IF <LW_EMAIL>-COPY EQ 'X'.
          MAILTO = <LW_EMAIL>-E_EMAIL.
          SHIFT MAILTO LEFT DELETING LEADING SPACE.
          TRANSLATE MAILTO TO LOWER CASE.
          RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
          CALL METHOD SEND_REQUEST->ADD_RECIPIENT
            EXPORTING
              I_RECIPIENT  = RECIPIENT
              I_EXPRESS    = 'X'
              I_COPY       = 'X'
              I_BLIND_COPY = ' '
              I_NO_FORWARD = ' '.
        ENDIF.
      CATCH CX_BCS INTO FAIL.
*    MESSAGE ixxx(xx) WITH fail->error_type.
    ENDTRY.


    AT END OF GP.

      TRY.
*   第四步: 邮件地址转换
*          RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
*          SEND_REQUEST->ADD_RECIPIENT( RECIPIENT ).
*   第五步: 添加邮件地址到发送请求
          "设置邮件发送账号和地址
          TRY .
              CALL METHOD CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS
                EXPORTING
                  I_ADDRESS_STRING = '发送的邮箱'
*                 I_ADDRESS_NAME   = 'scn team'
                RECEIVING
                  RESULT           = LO_SENDER.
            CATCH CX_ADDRESS_BCS.
            CATCH CX_ROOT.
          ENDTRY.

          TRY.
              SEND_REQUEST->SET_SENDER( I_SENDER = LO_SENDER ).
            CATCH CX_SEND_REQ_BCS.
            CATCH CX_ROOT.
          ENDTRY.


*   第六步: 正式发送并提交作业
          SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X' ).
          COMMIT WORK AND WAIT.
        CATCH CX_BCS INTO FAIL.
          MESSAGE S001(00) WITH FAIL->ERROR_TYPE FAIL->ERROR_TEXT.
      ENDTRY.

      IF FAIL IS INITIAL.
        GS_OUTPUT-LIGHT = ICON_GREEN_LIGHT.
        GS_OUTPUT-MESSAGE = '发送邮件成功'.
        MODIFY GT_OUTPUT FROM GS_OUTPUT TRANSPORTING LIGHT MESSAGE
        WHERE GP EQ <LW_EMAIL>-GP.
*        MESSAGE S001(00) WITH '发送邮件成功'.
      ELSE.
        GS_OUTPUT-LIGHT = ICON_RED_LIGHT.
        GS_OUTPUT-MESSAGE = '发送邮件失败'.
        MODIFY GT_OUTPUT FROM GS_OUTPUT TRANSPORTING LIGHT MESSAGE
        WHERE GP EQ <LW_EMAIL>-GP.
      ENDIF.

      FREE: SEND_REQUEST,DOCUMENT,LO_SENDER,RECIPIENT,FAIL.

    ENDAT.

  ENDLOOP.

OVER……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值