使用SO_DOCUMENT_SEND_API1发送邮件

注意点:代码中的设置邮件内文属性要放在设置附件属性前面(不知道为什么,只知道不这样会出错。

地址:发邮件程式

DATA: L_ATTLIN TYPE I,
      L_MAILIN TYPE I,
      L_BINLEN TYPE I,
      "将附件内容拼接成一个字符串存储到该变量
      L_ATTACHMENT TYPE STRING.
DATA: GT_BINARY LIKE SOLISTI1 OCCURS 0 WITH HEADER LINE.
"储存附件内容的内表
DATA: BEGIN OF GT_ATTACHMENT OCCURS 0,
      ID TYPE I,
      NAME(10),
      PRICE TYPE P,
      END OF GT_ATTACHMENT.
"储存邮件内容的内表
DATA: LT_MAILBODY TYPE TABLE OF SOLISTI1,
      LS_MAILBODY LIKE LINE OF LT_MAILBODY.
      
      "邮件属性结构
DATA: LS_SODOCCHGI1 TYPE SODOCCHGI1,
      "邮件组件(附件、邮件内文等)属性内表
      LT_SOPCKLSTI1 TYPE TABLE OF SOPCKLSTI1,
      LS_SOPCKLSTI1 LIKE LINE OF LT_SOPCKLSTI1,
      "收件人内表
      LT_SOMLRECI1 TYPE TABLE OF SOMLRECI1,
      LS_SOMLRECI1 LIKE LINE OF LT_SOMLRECI1.

"添加收件人
LS_SOMLRECI1-RECEIVER = '123456@QQ.COM'.
LS_SOMLRECI1-REC_TYPE = 'U'.
LS_SOMLRECI1-COPY = 'X'.
APPEND LS_SOMLRECI1 TO LT_SOMLRECI1.
CLEAR LS_SOMLRECI1.
LS_SOMLRECI1-RECEIVER = '723456@QQ.COM'.
LS_SOMLRECI1-REC_TYPE = 'U'.
LS_SOMLRECI1-BLIND_COPY = 'X'.
APPEND LS_SOMLRECI1 TO LT_SOMLRECI1.

"添加附件内容
GT_ATTACHMENT-ID = 1.
GT_ATTACHMENT-NAME = 'NAME1'.
GT_ATTACHMENT-PRICE = 11.
APPEND GT_ATTACHMENT.
CLEAR GT_ATTACHMENT.
GT_ATTACHMENT-ID = 2.
GT_ATTACHMENT-NAME = 'NAME2'.
GT_ATTACHMENT-PRICE = 12.
APPEND GT_ATTACHMENT.
DESCRIBE TABLE GT_ATTACHMENT LINES L_ATTLIN.

"添加邮件内容内容
LS_MAILBODY = '<HTML><BODY>'.
APPEND LS_MAILBODY TO LT_MAILBODY.
CONCATENATE '<P><FONT SIZE = 2 >' SY-DATUM '</FONT></P>' INTO LS_MAILBODY.
APPEND LS_MAILBODY TO LT_MAILBODY.
LS_MAILBODY = '<TABLE WIDTH=100% BORDER=1 CELLSPACING=0><TR BGCOLOR=#00CCFF>'.
APPEND LS_MAILBODY TO LT_MAILBODY.
READ TABLE GT_ATTACHMENT INDEX 1.
CONCATENATE '<TD>' GT_ATTACHMENT-ID '</TD></TR></TABLE>' INTO LS_MAILBODY.
APPEND LS_MAILBODY TO LT_MAILBODY.
CONCATENATE '<p><span style=''font-size:10.0pt;color:#999999''>'
            'Client-' SY-MANDT
            '</span></p></body></html>' INTO LS_MAILBODY.
APPEND LS_MAILBODY TO LT_MAILBODY.
DESCRIBE TABLE LT_MAILBODY LINES L_MAILIN.

"将附件内表转换为一STRING
PERFORM ITABTOSTR TABLES GT_ATTACHMENT USING L_ATTACHMENT.

"将储存附件内容的STRING转换为BIN
PERFROM STRTOBIN TABLES GT_BINARY USING L_ATTACHMENT L_BINLEN.

"设置邮件属性
CLEAR LS_SODOCCHGI1.
LS_SODOCCHGI1-OBJ_DESCR = 'SUBJECT'.
LS_SODOCCHGI1-OBJ_NAME = 'TEXT'.
LS_SODOCCHGI1-EXPIRY_DAT = SY-DATUM + 2.
LS_SODOCCHGI1-SENSITIVTY = 'F'.
LS_SODOCCHGI1-DOC_SIZE = L_MAILIN * 255.

"设置邮件内文属性
CLEAR LS_SOPCKLSTI1.
LS_SOPCKLSTI1-TRANSF_BIN = ''.
LS_SOPCKLSTI1-HEAD_START = 1.
LS_SOPCKLSTI1-HEAD_NUM = 0.
LS_SOPCKLSTI1-BODY_START = 1.
DESCRIBE TABLE LT_MAILBODY LINES LS_SOPCKLSTI1-BODY_NUM.
LS_SOPCKLSTI1-DOC_TYPE = 'HTML'.
APPEND LS_SOPCKLSTI1 TO LT_SOPCKLSTI1.

"设置邮件附件属性
CLEAR LS_SOPCKLSTI1.
LS_SOPCKLSTI1-TRANSF_BIN = 'X'.
LS_SOPCKLSTI1-HEAD_START = 1.
LS_SOPCKLSTI1-HEAD_NUM = 0.
LS_SOPCKLSTI1-BODY_START = 1.
LS_SOPCKLSTI1-BODY_NUM = L_ATTLIN.
LS_SOPCKLSTI1-OBJ_NAME = 'TEXT'.
LS_SOPCKLSTI1-DOC_TYPE = 'XLS'.
LS_SOPCKLSTI1-OBJ_DESCR = 'FILENAME.XLS'.
LS_SOPCKLSTI1-DOC_SIZE = LS_SOPCKLSTI1-BODY_NUM * 255.
APPEND LS_SOPCKLSTI1 TO LT_SOPCKLSTI1.

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
  EXPORTING
    DOCUMENT_DATA              = LS_SODOCCHGI1
    PUT_IN_OUTBOX              = 'X'
    COMMIT_WORK                = 'X'
  TABLES
    PACKING_LIST               = LT_SOPCKLSTI1
    CONTENTS_BIN               = GT_BINARY
    CONTENTS_TXT               = LT_MAILBODY
    RECEIVERS                  = LT_SOMLRECI1
  EXCEPTIONGS
    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 <>.
ENDIF.

CLEAR: LS_SOMLRECI1,GT_ATTACHMENT,LS_MAILBODY,LS_SOPCKLSTI1,GT_BINARY.
REFRESH: LT_SOMLRECI1,LT_MAILBODY,LT_SOPCKLSTI1,GT_BINARY.
FORM ITABTOSTR TABLES INTAB
               USING  OUTSTR TYPE STRING.
  DATA: TAB TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
          ENTER(2) TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF,
          N TYPE I.
  DATA: BEGIN OF HEADTAB OCCURS 0 ,
          LENGTH    TYPE I ,
          DECIMALS  TYPE I,
          TYPE_KIND TYPE C,
          NAME(30)  TYPE C,
        END OF HEADTAB.
  DATA DESCR_REF TYPE REF TO CL_ABAP_STRUCTDESCR.
  FIELD-SYMBOLS: <COMP_WA> TYPE ABAP_COMPDESCR ,
                 <F_FIELD> ,
                 <F_INTAB> TYPE ANY .
  DATA:STR TYPE STRING,
       STR2 TYPE STRING ,
       TEXT1 TYPE C.
  DESCR_REF ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( INTAB ).
  LOOP AT DESCR_REF->COMPONENTS ASSIGNING <COMP_WA>.
    MOVE-CORRESPONDING <COMP_WA> TO HEADTAB.
    APPEND HEADTAB.
  ENDLOOP.
  DESCRIBE TABLE HEADTAB LINES N.
  LOOP AT INTAB ASSIGNING <F_INTAB>.
    DO N TIMES.
      ASSIGN COMPONENT SY-INDEX OF STRUCTURE <F_INTAB> TO <F_FIELD>.
      STR = <F_FIELD>.
      READ TABLE HEADTAB INDEX SY-INDEX.
      IF HEADTAB-TYPE_KIND = 'I' OR HEADTAB-TYPE_KIND = 'P'
                                 OR HEADTAB-TYPE_KIND = 'F'.
        SEARCH STR FOR '-'.
        IF SY-SUBRC = 0 AND SY-FDPOS <> 0.
          SPLIT STR AT '-' INTO STR TEXT1.
          CONDENSE STR.
          CONCATENATE '-' STR INTO STR.
        ELSE.
          CONDENSE STR.
        ENDIF.
      ELSE.
*        SHIFT str LEFT DELETING LEADING '0' .
      ENDIF.
      CONCATENATE STR2 TAB STR INTO STR2.
    ENDDO.
    SHIFT STR2.
    CONCATENATE OUTSTR STR2 ENTER INTO OUTSTR.
    CLEAR STR2.
  ENDLOOP.
ENDFORM.
FORM STRTOBIN TABLES RECORD
              USING  STR
                     LEN.
  DATA:TMPBUFFER TYPE XSTRING.
  CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
    EXPORTING
      TEXT     = STR
      MIMETYPE =  '"text/html; charset=Unicode; charset=big5"'
*      encoding = '8400'
    IMPORTING
      BUFFER   = TMPBUFFER
    EXCEPTIONS
      FAILED   = 1
      OTHERS   = 2.

  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      BUFFER          = TMPBUFFER
      APPEND_TO_TABLE = ''
    IMPORTING
      OUTPUT_LENGTH   = LEN
    TABLES
      BINARY_TAB      = RECORD.
ENDFORM.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值