前言
发送邮件功能在SAP 中比较常见的了,比如报表,生产上的数据记录等,都需要用到邮件功能。有时数据较少,就不需要打开附件了,直接在正文表格中显示。
。现展示给大家,望采纳。
语法
千篇一律,实用最要紧,直接贴代码。
DATA: GT_SPFLI TYPE TABLE OF SPFLI WITH HEADER LINE.
DATA:M_REMARK TYPE SO_TEXT255,STITLE1(50) TYPE C,MAILTO TYPE AD_SMTPADR.
DATA:OREF TYPE REF TO CX_ROOT,TXT TYPE STRING, LV_STRING TYPE STRING,LINETEXT(350) TYPE C.
CONSTANTS:
GC_TAB TYPE C VALUE CL_BCS_CONVERT=>GC_TAB, "CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
GC_CRLF TYPE C VALUE CL_BCS_CONVERT=>GC_CRLF.
DATA BINARY_CONTENT TYPE SOLIX_TAB.
DATA SIZE TYPE SO_OBJ_LEN.
DATA SEND_REQUEST TYPE REF TO CL_BCS.
DATA DOCUMENT TYPE REF TO CL_DOCUMENT_BCS.
DATA RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.
DATA RECIPSEND TYPE REF TO IF_SENDER_BCS.
DATA BCS_EXCEPTION TYPE REF TO CX_BCS.
DATA BINARY_CONTENT_FORECAST TYPE SOLIX_TAB.
DATA MAIN_TEXT TYPE BCSY_TEXT.
DATA SENT_TO_ALL TYPE OS_BOOLEAN.
DATA:BEGIN OF T_EXCEL OCCURS 0,
CARRID TYPE SPFLI-CARRID,
CITYFROM TYPE SPFLI-CITYFROM,
END OF T_EXCEL.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_SPFLI FROM SPFLI.
CLEAR :T_EXCEL,MAIN_TEXT,STITLE1,LV_STRING,LINETEXT.
REFRESH:T_EXCEL,MAIN_TEXT.
"标题---------------------------------------------
CONCATENATE '测试数据(' SY-DATUM+0(4) '-' SY-DATUM+4(2) '-' SY-DATUM+6(2) ')' INTO STITLE1.
"正文说明-------------------------------------
M_REMARK = '测试表格数据:<br>'.
APPEND M_REMARK TO MAIN_TEXT.
M_REMARK = '<br>'.
APPEND M_REMARK TO MAIN_TEXT.
APPEND '<table border="1">' TO MAIN_TEXT ."开始增加表格
"附件数据---------------------------------------
T_EXCEL-CARRID = ''.
T_EXCEL-CITYFROM = 'Depart.city'.
INSERT T_EXCEL INDEX 1.
LOOP AT GT_SPFLI.
T_EXCEL-CARRID = GT_SPFLI-CARRID.
T_EXCEL-CITYFROM = GT_SPFLI-CITYFROM .
APPEND T_EXCEL.
CLEAR T_EXCEL.
ENDLOOP.
LOOP AT T_EXCEL.
CONCATENATE LV_STRING
T_EXCEL-CARRID GC_TAB
T_EXCEL-CITYFROM GC_CRLF
INTO LV_STRING.
"制作表格
CONCATENATE '<tr><td>' T_EXCEL-CARRID '</td><td>' T_EXCEL-CITYFROM '</td></tr>' INTO LINETEXT .
APPEND LINETEXT TO MAIN_TEXT .
CLEAR LINETEXT.
ENDLOOP.
APPEND '</table><br>' TO MAIN_TEXT .
"---------------------------------------------------
TRY.
CL_BCS_CONVERT=>STRING_TO_SOLIX(
EXPORTING
IV_STRING = LV_STRING
IV_CODEPAGE = '4103' "suitable for MS Excel, leave empty
IV_ADD_BOM = 'X' "for other doc types
IMPORTING
ET_SOLIX = BINARY_CONTENT
EV_SIZE = SIZE ).
CATCH CX_BCS.
MESSAGE E445(SO).
ENDTRY.
TRY.
SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'HTM'
I_TEXT = MAIN_TEXT
I_SUBJECT = STITLE1 ). " 邮件主题名
DOCUMENT->ADD_ATTACHMENT(
I_ATTACHMENT_TYPE = 'XLS' " 附件格式
I_ATTACHMENT_SUBJECT = 'Attachment' " attachment name
I_ATTACHMENT_SIZE = SIZE "附件大小
I_ATT_CONTENT_HEX = BINARY_CONTENT ). "附件内容
SEND_REQUEST->SET_DOCUMENT( DOCUMENT ).
"寄件人若为空,则默认SAP 邮件,SU01 维护默认邮件----------------
* RECIPSEND = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
* SEND_REQUEST->SET_SENDER( RECIPSEND ).
"收件人--------------------------------------------------------
MAILTO = 'XX<XXX.ORG>'."需维护收件人,
RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
SEND_REQUEST->ADD_RECIPIENT( RECIPIENT ).
SEND_REQUEST->SET_SEND_IMMEDIATELY( 'X' ). "设置立即发送
* SEND_REQUEST->SEND_REQUEST->SET_LINK_TO_OUTBOX( 'X' ). "与outbox关联
CALL METHOD SEND_REQUEST->SEND(
EXPORTING
I_WITH_ERROR_SCREEN = 'X'
RECEIVING
RESULT = SENT_TO_ALL ).
IF SENT_TO_ALL = 'X'.
COMMIT WORK AND WAIT.
MESSAGE '发送成功' TYPE 'S'.
ELSE.
ROLLBACK WORK.
MESSAGE '发送失败' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
CATCH CX_BCS INTO BCS_EXCEPTION.
MESSAGE I865(SO) WITH BCS_EXCEPTION->ERROR_TYPE.
ENDTRY.
结果
总结
本次介绍了ABAP 发邮件的功能,后期还会继续更新其他功能。若有疑问或错误,请到评论区留言,谢谢!