使用SO_DOCUMENT_SEND_API1发送邮件
注意点:代码中的设置邮件内文属性要放在设置附件属性前面(不知道为什么,只知道不这样会出错。)地址:发邮件程式DATA: L_ATTLIN TYPE I,L_MAILIN TYPE I,L_BINLEN TYPE I,"将附件内容拼接成一个字符串存储到该变量L_ATTACHMENT TYPE STRING.DATA: GT_BINA...
·
注意点:代码中的设置邮件内文属性要放在设置附件属性前面(不知道为什么,只知道不这样会出错。)
地址:发邮件程式
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.
更多推荐
已为社区贡献1条内容
所有评论(0)