SAP ABAP发送HTML格式的邮件

 

输入参数:

I_SUBJECT:内容的简短描述

IT_MESSAGE_BODY:邮件主体部分(convert string to table)

IT_ATTACHMENTS:附件内容

I_SENDER_MAIL:发送者的电子邮件地址

I_ATTMSG_CHECK:邮件类型

 

输出参数:

E_RESULT:Boolean Variable (X=True, -=False, Space=Unknown)

传输内表:

RECIPIENTS:接收者的电子邮件地址(可多人)

举例如下

FUNCTION ZCMF_SEND_MAIL.
*"----------------------------------------------------------------------
*"  IMPORTING
*"     REFERENCE(I_SUBJECT) TYPE  SO_OBJ_DES
*"     REFERENCE(IT_MESSAGE_BODY) TYPE  BCSY_TEXT
*"     REFERENCE(IT_ATTACHMENTS) TYPE  RMPS_T_POST_CONTENT OPTIONAL
*"     VALUE(I_SENDER_MAIL) TYPE  ADR6-SMTP_ADDR OPTIONAL
*"     VALUE(I_ATTMSG_CHECK) TYPE  ZEHRATTYP OPTIONAL
*"  EXPORTING
*"     REFERENCE(E_RESULT) TYPE  BOOLEAN
*"  TABLES
*"      RECIPIENTS STRUCTURE  ADR6 OPTIONAL
*"----------------------------------------------------------------------
 
*Data Declaration
  DATA: LO_SENDER        TYPE REF TO IF_SENDER_BCS VALUE IS INITIAL,
        L_RECIPIENT_MAIL TYPE ADR6-SMTP_ADDR.
  DATA : ITAB TYPE TABLE OF SVAL,
            LS_ITAB TYPE SVAL,
            I_RETURN.
  DATA: L_MSG_TYPE TYPE SO_OBJ_TP,
        LO_SEND_REQUEST TYPE REF TO CL_BCS VALUE IS INITIAL.
  DATA: LX_DOCUMENT_BCS TYPE REF TO CX_DOCUMENT_BCS VALUE IS INITIAL,
        ATTACHMENT_SUBJECT TYPE SO_OBJ_DES.
 
  DATA: LO_RECIPIENT TYPE REF TO IF_RECIPIENT_BCS VALUE IS INITIAL.
  DATA: LS_RECIPIENT LIKE LINE OF RECIPIENTS,
  LS_ATTACHMENT LIKE LINE OF IT_ATTACHMENTS.
 
  CLEAR: E_RESULT.
* Sender mail setting
  IF I_SENDER_MAIL IS INITIAL.
    I_SENDER_MAIL = 'xiuxianhai@xxx.com'.
  ENDIF.
 
  CASE I_ATTMSG_CHECK.
    WHEN 'X'. " 
      CLEAR:L_MSG_TYPE.
    WHEN 'H'.
      L_MSG_TYPE = 'HTML'.     " HTML格式
 
    WHEN OTHERS.
      L_MSG_TYPE = 'RAW'.     " 普通格式
  ENDCASE.
*Prepare Mail Object
  CLASS CL_BCS DEFINITION LOAD.
  LO_SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
* Message body and subject
  DATA: LO_DOCUMENT TYPE REF TO CL_DOCUMENT_BCS VALUE IS INITIAL.
  LO_DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
  I_TYPE = L_MSG_TYPE
  I_TEXT =  IT_MESSAGE_BODY
  I_SUBJECT = I_SUBJECT ).
*Send  attachment
  LOOP AT IT_ATTACHMENTS INTO LS_ATTACHMENT.
    ATTACHMENT_SUBJECT = LS_ATTACHMENT-SUBJECT.
    TRY.
        LO_DOCUMENT->ADD_ATTACHMENT(
        EXPORTING
        I_ATTACHMENT_TYPE = LS_ATTACHMENT-OBJTP
        I_ATTACHMENT_SUBJECT = ATTACHMENT_SUBJECT
        I_ATT_CONTENT_HEX = LS_ATTACHMENT-CONT_HEX ).
      CATCH CX_DOCUMENT_BCS INTO LX_DOCUMENT_BCS.
    ENDTRY.
  ENDLOOP.
* Pass the document to send request
  LO_SEND_REQUEST->SET_DOCUMENT( LO_DOCUMENT ).
  TRY.
      IF I_SENDER_MAIL IS NOT INITIAL.
        LO_SENDER = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( I_SENDER_MAIL ).
      ENDIF.
* Set sender
      LO_SEND_REQUEST->SET_SENDER(
        EXPORTING
          I_SENDER = LO_SENDER ).
    CATCH CX_ADDRESS_BCS.
      RETURN.
  ENDTRY.
* Set  recipients
  LOOP AT RECIPIENTS INTO LS_RECIPIENT.
    IF LS_RECIPIENT-SMTP_ADDR IS NOT INITIAL.
      L_RECIPIENT_MAIL = LS_RECIPIENT-SMTP_ADDR .
      TRY.
          LO_RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( L_RECIPIENT_MAIL ).
        CATCH CX_ADDRESS_BCS .
      ENDTRY.
    ENDIF.
    LO_SEND_REQUEST->ADD_RECIPIENT(
        EXPORTING
        I_RECIPIENT = LO_RECIPIENT
        I_EXPRESS = 'X' ).
  ENDLOOP.
  TRY.
      CALL METHOD LO_SEND_REQUEST->SET_STATUS_ATTRIBUTES
        EXPORTING
          I_REQUESTED_STATUS = 'E'
          I_STATUS_MAIL      = 'E'.
* set send immediately flag
      LO_SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ).
* Send email
      LO_SEND_REQUEST->SEND(
        EXPORTING
          I_WITH_ERROR_SCREEN = 'X'
        RECEIVING
          RESULT = E_RESULT ).
      COMMIT WORK.
      WAIT UP TO 1 SECONDS.
    CATCH CX_SEND_REQ_BCS.
      E_RESULT = ''.
  ENDTRY.
ENDFUNCTION.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值